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

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);
相关推荐
CSharp精选营21 小时前
关系型 vs 非关系型:从原理到选型,一文搞定数据库核心分类
数据结构·nosql·关系型数据库·非关系型数据库·技术选型
刘马想放假4 天前
Modbus 全栈技术解析:TCP、RTU、ASCII、RTU over TCP
数据结构·网络协议
北域码匠5 天前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
Darling噜啦啦12 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
小小工匠13 天前
Redis - 事务机制:能实现 ACID 属性吗
数据结构·redis·性能优化·并发·持久化
玖玥拾13 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
Qres82113 天前
算法复键——树状数组
数据结构·算法
牛油果子哥q13 天前
并查集(DSU)超精讲,路径压缩、按秩合并、万能模板、连通性判定、最小生成树与刷题实战全解
数据结构·c++·最小生成树·并查集
凌波粒13 天前
LeetCode--491.递增子序列(回溯算法)
数据结构·算法·leetcode
WL学习笔记13 天前
单项不带头不循环链表
数据结构·链表