• 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

  • 相关阅读:
    【C语言】strlen和sizeof的区别
    ⭐北邮复试刷题429. N 叉树的层序遍历(按层入队出队BFS)(力扣每日一题)
    Linux发展历程
    mybatis详解(全)
    java 面试之经典算法篇
    合合信息财务自动化解决方案亮相腾讯全球数字生态大会,助力企业财务合规建设
    20221120
    现货白银有哪些优势
    IDEA取消git对项目的版本控制
    Spring Bean自动装配的简介
  • 原文地址:https://blog.csdn.net/qq_30992795/article/details/121607853