蓝色港湾 发表于 2023-4-20 13:01:18

解决codesys每2小时掉线及与使用其他组件中函数方法

解决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拷贝到板子,调用写此部分代码的函数接口即可创建写文件结果如下:

页: [1]
查看完整版本: 解决codesys每2小时掉线及与使用其他组件中函数方法