Codesys代码代写,程序开发,软件定制,bug修改,问题咨询: T宝搜索店铺【林磊教育】
定义&声明
联合体就是不同类型的变量占用同一个内存的数据结构;
其声明语法如下
c
TYPE <联合体名字>:
UNION
<变量1>
<变量2>
<变量3>
<.....>
END_UNION
END_TYPE
例如
c
TYPE TEST :
UNION
iVar : INT ;
rVar : REAL ;
strVar : STRING(20);
END_UNION
END_TYPE
特点
1、不同变量占用同一个内存
2、单个变量值从内存低字节开始
c
TYPE TEST :
UNION
byVar : BYTE;
wVar : WORD;
dwVar : DWORD;
END_UNION
END_TYPE
c
PROGRAM PGR2
VAR
unionVar : TEST;
uiVar : UINT;(*内存大小*)
END_VAR
unionVar.dwVar := 16#11114321;//查看映射关系
uiVar := SIZEOF(TEST);//查看内存大小
内存大小为4个byte ;
byVar变量从低位读取1个字节内存空间对应的值;
wWar变量从低位读取2个字节内存空间对应的值;
3、尽量保证每个数据占用内存空间一样,避免错乱
c
TYPE TEST :
UNION
strVar1 : STRING(4);
strVar2 : STRING(2);
END_UNION
END_TYPE
c
PROGRAM PGR2
VAR
unionVar : TEST;
uiVar : UINT;(*内存大小*)
END_VAR
unionVar.strVar1:='abcd';
uiVar := SIZEOF(TEST);
应用举例
数据转换,例如如下,可以把2个BYTE的数据类型转换成1个WORD类型
c
TYPE TEST :
UNION
wVar : DWORD;
abyVar : ARRAY[0..1] OF BYTE;
END_UNION
END_TYPE
c
PROGRAM PGR2
VAR
unionVar : TEST;
uiVar : UINT;(*内存大小*)
END_VAR
unionVar.abyVar[0] := 16#12;
unionVar.abyVar[1] := 16#34;
uiVar := SIZEOF(TEST);