• Codesys扩展数据类型Any的探索


    Codesys代码代写,程序开发,软件定制,bug修改,问题咨询: TAO宝搜索店铺【林磊教育】

    ANY 定义

    Any内部是一个数据结构体,在定义一个Any变量时,内部会转成其结构体,定义如下

    TYPE Any : 
    STRUCT
            // 实际参数的类型
        typeclass : __SYSTEM.TYPE_CLASS ;
            // 指向实际参数的指针
        pvalue : POINTER TO BYTE;
            // 指针指向的数据大小
        diSize : DINT;
    END_STRUCT
    END_TYPE
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    (1) __SYSTEM.TYPE_CLASS的定义

    TYPE_CLASS是变量的数据类类型,对于用户自定义的数据类型或者功能块实例,其值是 TYPE_USERDEF;

    (2) TYPE_CLASS的获取运算符 ‘_VARINFO’

    ‘_VARINFO’ 运算符是符合IEC61131-3标准的扩展,该运算符返回变量的信息 __SYSTEM.VAR_INFO

    (3) __SYSTEM.VAR_INFO的定义

    __SYSTEM.VAR_INFO 是一个结构体类型,其定义说明如下

    名字数据类型描述
    ByteAddressDWORD字节地址
    ByteOffseDWORD地址偏移量: 如果是全局变量,其值是相对于该区域的起始地址 ;如果是函数或方法的局部变量,其值是相对于当前堆栈,如果是功能块中的局部变量,其值是相对于功能块的起始地址
    AreaDINT内存区域编号: -1 表示实例或者堆栈中变量
    BitNrINT位数;如果不是正数数据类型,其值我-1(16#FFFF)
    BitSizeINT变量内存的大小 (以位为单位)
    BitAddressUDINT变量的位地址;该变量位必须位于输入、输出,中间存储区
    TypeClassType_Class变量的数据类型
    TypeNamestring变量的数据类型(字符串显示)
    NumElementsUDINT数组元素的个数,变量数据类型必须是ARRAY
    BaseTypeClassType_Class数组元素变量的基本数据类型,变量数据类型必须是ARRAY
    ElemBitSizeUDINT数组元素变量的基本数据类型大小(以位为单位),变量数据类型必须是ARRAY
    内存区域MEMORY_AREA有关存储区的信息:MEM_GLOBAL: 全局内存区域;MEM_LOCAL: 本地内;MEM_MEMORY: 标记存储区%M;MEM_INPUT: 输入存储区%I ;MEM_OUTPUT: 输出存储区%Q;MEM_RETAIN: 保持存储区
    SymbolSTRING(39)变量名:例如‘iValue’
    CommentSTRING(79)变量注释:例如‘this is nums of array’
    ANY 的使用
  • 相关阅读:
    ORACLE日期相关语法
    Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的图像剪切(ROI)功能(C++)
    一篇博客搞定移动端布局
    编码格式科普ASCII unicode utf-8 usc-2 GB2312
    远程小组软件开发过程(1):流程
    OpenMV与JSON编码
    kr 第三阶段(六)C++ 逆向
    golang的defer执行时机案例分析
    python+selenium环境搭建
    中断系统中的设备树__中断号的演变与irq_domain
  • 原文地址:https://blog.csdn.net/qq_30992795/article/details/123543056