解决codesys Runtime每2小时掉线
注意:必须购买codesys相关组件才可以进行以下设置;将3s_INFO.txt中ID复制到以下链接创建生成的模板库中即可。
使用其他组件中函数方法
注意:通过模板库生成的CmpXKLibDep.m4文件只是最基础的,如果想调用其他组件的函数,或者说想与其他组件产生联系需要修改该文件。
CmpXKLibDep.m4
/**
* <name>Component Template</name>
* <description>
* An example on how to implement a component.
* This component does no usefull work and it exports no functions
* which are intended to be used for anything. Use at your own risk.
* </description>
* <copyright>
* Copyright (c) 2017-2020 CODESYS Development GmbH, Copyright (c) 1994-2016 3S-Smart Software Solutions GmbH. All rights reserved.
* </copyright>
*/
SET_COMPONENT_NAME(`CmpXKLib') /* 组件名称 */
COMPONENT_SOURCES(`CmpXKLib.c') /* 组件源码 */
COMPONENT_VERSION(`0x03051000') /* 组件版本 */
/* NOTE: REPLACE 0x0001 BY YOUR VENDORID */
COMPONENT_VENDORID(`0x177d') /* 厂商ID,设置后可以解除2小时登录一次限制,从codesys提供的源码解压后找到Western_0x1_ARM_VxWorks_V3.5.16.40_XsCZMASIHS\Configuration\3S_INFO.txt 中可以找到 */
#define CMPID_CmpXKLib 0x2000 /* NOTE: START HERE WITH YOUR COMPONENTIDS (see CmpItf.h */ /* 组件ID codesys保留0x0001-0x1fff 从0x2000-0x3FFF是我们可以使用的;组件管理器通过组件ID进行判断当前组件并进行管理*/
#define CLASSID_CCmpXKLib ADDVENDORID(CMP_VENDORID, 0x2000) /* NOTE: START HERE WITH YOUR CLASSIDS (see CmpItf.h */ /* class ID */
#define ITFID_ICmpXKLib ADDVENDORID(CMP_VENDORID, 0x2000) /* NOTE: START HERE WITH YOUR INTERFACEIDS (see CmpItf.h */ /* INFO ID */
CATEGORY(`Templates') /* 只影响裸跑的RUNTIME 带有操作系统的runtime没有影响 */
USE_ITF(`CMUtilsItf.m4') /* 当前组件需要依赖的其他组件名称 */
USE_ITF(`SysFileItf.m4') /* 若是需要添加其他组件在此处加即可 */
IMPLEMENT_ITF(`CmpXKLibItf.m4') /*当前实现的接口*/
REQUIRED_IMPORTS(
CMUtlSafeStrCpy) /* 若上面添加了其他USE_ITF 此次就可以添加需要使用的接口函数,此次的函数接口必须实现 */
OPTIONAL_IMPORTS(
SysFileOpen,
SysFileClose,
SysFileRead,
SysFileWrite) /* 此次的函数接口可以不实现 */
比如我们想使用SysFileItf组件我们可以打开帮助文档(Western_0x1_ARM_VxWorks_V3.5.16.40_XsCZMASIHS\Documentation\RTS-Documentation.html)搜索SysFileItf后可以查看所有有关的函数
修改为:
REQUIRED_IMPORTS(
CMUtlSafeStrCpy,
SysFileOpen,
SysFileClose,
SysFileWrite)
OPTIONAL_IMPORTS(
SysFileRead)
此时使用.m4.bat重新生成.h后不同点为(READ的可以不实现后面写的是CM_IMPORT_OPTIONAL_FUNCTION,其余的都需要实现):
if (ERR_OK == importResult ) TempResult = GET_SysFileRead(CM_IMPORT_OPTIONAL_FUNCTION);\
if (ERR_OK == importResult ) importResult = GET_SysFileWrite(0);\
if (ERR_OK == importResult ) importResult = GET_SysFileClose(0);\
if (ERR_OK == importResult ) importResult = GET_SysFileOpen(0);\
if (ERR_OK == importResult ) importResult = GET_CMUtlSafeStrCpy(0);\
此时可以将此.h拷贝到工程,在工程中可以使用这几个函数了,注意调用函数必须加前缀CAL_
如以下:
//测试文件打开SysFileOpen_ (char *pszFile, RTS_IEC_UDINT am, RTS_RESULT *pResult)
char filename[]="coswsysFileTest";
RTS_RESULT *pResult;
RTS_HANDLE handle = RTS_INVALID_HANDLE;
unsigned char buf[] ="123456\n";
RTS_SIZE num;
handle = CAL_SysFileOpen_ (filename, AM_WRITE, &pResult);
if(handle != RTS_INVALID_HANDLE)//判断是否是无效
{
num = CAL_SysFileWrite (handle, buf, sizeof(buf), &pResult);
CAL_SysFileClose(handle);
}
将编译生成的.out拷贝到板子,调用写此部分代码的函数接口即可创建
写文件结果如下: