• Codesys 数据结构:1.2.4 扩展数据类型之联合体(UNION) 类型详解


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

    定义&声明

    联合体就是不同类型的变量占用同一个内存的数据结构;

    其声明语法如下

    TYPE <联合体名字>:
     UNION
       <变量1>
       <变量2>
       <变量3>
       <.....>
     END_UNION
    END_TYPE
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    例如

    TYPE TEST :
    UNION
    	iVar      : INT  ;
    	rVar      : REAL ;
    	strVar    : STRING(20);
    END_UNION
    END_TYPE
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    特点

    1、不同变量占用同一个内存

    2、单个变量值从内存低字节开始

    TYPE TEST :
    UNION
    	byVar     : BYTE;
    	wVar      : WORD;
    	dwVar     : DWORD;
    END_UNION
    END_TYPE
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    PROGRAM PGR2
    VAR     
      unionVar : TEST;
      uiVar : UINT;(*内存大小*) 
    END_VAR
    
    
    unionVar.dwVar := 16#11114321;//查看映射关系
    uiVar := SIZEOF(TEST);//查看内存大小
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    内存大小为4个byte ;
    byVar变量从低位读取1个字节内存空间对应的值;
    wWar变量从低位读取2个字节内存空间对应的值;

    3、尽量保证每个数据占用内存空间一样,避免错乱

    TYPE TEST :
    UNION
    	strVar1    : STRING(4);
    	strVar2    : STRING(2);
    END_UNION
    END_TYPE
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    PROGRAM PGR2
    VAR     
      unionVar : TEST;
      uiVar : UINT;(*内存大小*)
    END_VAR
    
    unionVar.strVar1:='abcd';
    uiVar := SIZEOF(TEST);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    应用举例

    数据转换,例如如下,可以把2个BYTE的数据类型转换成1个WORD类型

    TYPE TEST :
    UNION
       wVar   : DWORD;
       abyVar : ARRAY[0..1] OF BYTE;
    END_UNION
    END_TYPE
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    PROGRAM PGR2
    VAR     
      unionVar : TEST;
      uiVar    : UINT;(*内存大小*)
    END_VAR
    
    
    unionVar.abyVar[0] := 16#12;
    unionVar.abyVar[1] := 16#34;
    uiVar := SIZEOF(TEST);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

  • 相关阅读:
    人工智能作业第二三章
    Mybatis总结
    学习docker记录(三)
    WEB代码审计
    C++语法——详细剖析类成员函数在内存中存储形式(包括静态)
    exFAT文件系统的目录与文件存储
    【感恩系列】:说点事儿 以及 我把所有的粉丝放到了中国地图上啦~
    docker安装postgresql
    大数据之Spark(二)
    关于MP3文件中找不到TAG标签的问题
  • 原文地址:https://blog.csdn.net/qq_30992795/article/details/121607853