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

Codesys—联合体在数据转换中的高效应用 本文深入探讨了Codesys中联合体(Union)在数据转换中的高效应用,特别是在字节、字和双字之间的转换场景。通过详细的代码示例和内存布局分析,展示了联合体如何简化PLC编程中的数据类型转换,提升代码可读性和维护性。文章还涵盖了联合体与结构体的嵌套使用、类型安全注意事项以及性能优化技巧,为工业自动化开发者提供了实用指南。 阅读详情
AI摘要

本文介绍了C语言中联合体的数据结构,包括其声明语法、特点如共享内存和单个变量的存储顺序,以及如何用于数据转换。通过实例展示了联合体在内存管理和数据操作中的应用。,

定义&声明

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

其声明语法如下

TYPE <联合体名字>:
 UNION
   <变量1>
   <变量2>
   <变量3>
   <.....>
 END_UNION
END_TYPE

例如

TYPE TEST :
UNION
	iVar      : INT  ;
	rVar      : REAL ;
	strVar    : STRING(20);
END_UNION
END_TYPE

特点

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

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

TYPE TEST :
UNION
	byVar     : BYTE;
	wVar      : WORD;
	dwVar     : DWORD;
END_UNION
END_TYPE
PROGRAM PGR2
VAR     
  unionVar : TEST;
  uiVar : UINT;(*内存大小*) 
END_VAR


unionVar.dwVar := 16#11114321;//查看映射关系
uiVar := SIZEOF(TEST);//查看内存大小

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

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

TYPE TEST :
UNION
	strVar1    : STRING(4);
	strVar2    : STRING(2);
END_UNION
END_TYPE
PROGRAM PGR2
VAR     
  unionVar : TEST;
  uiVar : UINT;(*内存大小*)
END_VAR

unionVar.strVar1:='abcd';
uiVar := SIZEOF(TEST);

应用举例

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

TYPE TEST :
UNION
   wVar   : DWORD;
   abyVar : ARRAY[0..1] OF BYTE;
END_UNION
END_TYPE
PROGRAM PGR2
VAR     
  unionVar : TEST;
  uiVar    : UINT;(*内存大小*)
END_VAR


unionVar.abyVar[0] := 16#12;
unionVar.abyVar[1] := 16#34;
uiVar := SIZEOF(TEST);


请添加图片描述

【CODESYS】-软件Bug与处理方法(20240710更) 【CODESYS】-软件Bug与处理方法(不定期更新) 阅读详情

相关推荐

别再手动拆解字节了!CODESYS V3下用Union联合体搞定汇川AM系列PLC通信数据打包

本文介绍了在CODESYS V3平台下使用Union联合体高效处理汇川AM系列PLC通信数据打包的现代方案。通过对比传统手动拆解字节的方法,详细展示了Union联合体在简化代码、提升可维护性和确保数据安全方面的优势,为工业自动化领域的工程师提供了实用指南。

586

Codesys—联合体的应用示例

利用联合体,将两个独立字节和字之间的合成与拆分,以及两个独立字和双字之间的合成与拆分。

原来你也__的博客 3868

别再手动拆解字节了!CODESYS V3.5下用Union联合体搞定汇川AM400 PLC通信数据打包

本文详细介绍了在CODESYS V3.5平台下,如何利用Union联合体高效处理汇川AM400 PLC的通信数据打包问题。通过对比传统方法的局限性,展示了Union在类型安全、代码可读性和维护简便性上的优势,并提供了从基础定义到高级优化的完整实现方案,大幅提升工业自动化项目中的数据交互可靠性。

768

联合体(union)的使用方法及其本质

有些基础知识快淡忘了,所以有必要复习一遍,在不借助课本死知识的前提下做些推理判断,温故知新。 1.联合体union的基本特性——和struct的同与不同 union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。 不过区别也挺明显: 结构体(struct)中所有变量是“共存”的...

huqinwei的专栏 21万+

CODESYS V3.5联合体(Union)实战:5分钟搞定汇川PLC变量与字节流的无损互转

本文详细介绍了如何在CODESYS V3.5中使用联合体(Union)特性,快速实现汇川AM系列PLC变量与字节流的无损互转。通过实战案例展示了联合体的核心原理、优势及具体应用,包括数据打包、解包和高级优化技巧,显著提升工业自动化通信的效率和代码可维护性。

517

汇川AM系列PLC通信数据打包避坑指南:用CODESYS联合体(Union)告别字节对齐烦恼

本文深入解析汇川AM系列PLC通信中因字节对齐导致的数据错乱问题,并详细介绍如何利用CODESYS联合体(Union)特性实现精确数据打包。通过对比传统方法的局限性,展示联合体方案在跨平台通信、Modbus TCP交互等场景中的优势,提供自动化打包函数封装和调试策略,帮助工程师高效解决工业通信中的字节对齐难题。

weixin_29631169的博客 400

【Codesys】单精度浮点数转十六进制的方法

Codesys_单精度转十六进制的方法

qq_35316470的博客 5756

Codesys联合体的跨界应用:工业协议解析中的类型转换艺术

本文探讨了Codesys联合体在工业协议解析中的高效类型转换实践,重点分析了其在Modbus、CANopen等协议中的应用优势。通过内存共享机制,联合体实现了零开销转换、代码简洁和实时性强等特性,显著提升工业自动化系统的数据处理效率。

weixin_29008691的博客 272

从内存视角解析Codesys联合体:高效数据处理的底层逻辑

本文深入解析了Codesys中联合体(UNION)的高效数据处理机制,通过内存共享原理优化工业自动化系统的实时性能。详细探讨了联合体在传感器数据打包、协议解析等场景的应用,对比结构体展示其66%的内存节省和40-60%的速度提升,并提供了内存对齐、类型安全等最佳实践。

weixin_29021291的博客 539

汇川AM系列PLC通信避坑:用Union联合体搞定字节数组转换(附InoProShop代码)

本文详细介绍了在汇川AM系列PLC通信中,如何利用Union联合体解决字节对齐问题。通过CODESYS平台的实际案例和InoProShop代码示例,展示了Union在数据转换中的高效应用,帮助工程师避免通信协议解析错误,提升工业自动化系统的稳定性和开发效率。

565

Modbus 数据转换 3 种方法对比:指针、联合体与移位操作在 Codesys 中的实现

本文深入对比了在Codesys中实现Modbus数据转换的三种方法:指针操作、联合体与移位运算。通过性能测试和实际案例分析,详细解析了每种技术的优势、风险及适用场景,为工业自动化工程师提供了高效、安全的数据转换解决方案,特别适合处理Modbus协议中的复杂数据类型转换需求。

weixin_33883104的博客 256

CoDeSys入门实战一起学习(二十一):联合体、长时间、宽字符串、引用、指针5种标准扩展类型,解决复杂编程问题

—自定义数据类型,详解数组、结构体、结构体数组、枚举、子范围,这些类型能让你根据项目需求“定制”数据类型,让程序结构更清晰、更易维护,比如用结构体封装一台电机的所有参数,用枚举定义设备的运行状态,敬请期待!——通过指针,可间接访问任意变量的内存,实现灵活的内存操作,是CoDeSys中最灵活也最危险的扩展类型(使用不当会导致内存错误)。,相当于给变量起了一个新名字,操作引用就等同于操作原变量——引用与原变量共享同一块内存,修改引用的值,原变量的值会同步改变。,就是专门的解决方案。

电工 1392

CODESYS中ANY类型:类型安全与灵活性的平衡之道

在工业自动化编程中,类型安全是确保程序可靠性的基石,它能在编译阶段检测数据类型错误,提升代码健壮性。然而,严格的类型系统有时会限制灵活性,特别是在需要处理动态数据或构建通用函数库时。ANY类型作为一种通用数据类型,通过封装类型描述符和数据指针,实现了类型信息的延迟绑定与运行时传递,为特定场景提供了必要的灵活性。在CODESYS平台中,ANY类型常用于构建通用日志记录器、动态配方管理以及与非标设备通信等场景,它允许函数接收任意类型参数,但需注意性能开销和类型安全检查。理解ANY类型的工作原理和适用边界,有助于

weixin_33709364的博客 313

CoDeSys入门实战一起学习(二十三):数据类型实战总结!选择技巧+内存优化

从标准数据类型、标准扩展数据类型,到自定义数据类型,我们用3篇文章讲透了CoDeSys的整个数据类型体系。在实际项目开发中,很多开发者不是“不会用”,而是“用不好”——比如选了不合适的类型导致内存浪费、使用指针/联合体时出现数据错乱、数组下标越界导致程序崩溃……——不盲目选择大类型(如用LINT存储0~100的数值),也不选择小类型导致取值范围不足,同时结合变量的。在实际开发中,数据类型的错误是最常见的编程错误之一,轻则编译报错,重则程序运行异常、设备故障,以下是。限定数值范围,软件钳位(如模拟量输出)

电工 1335

PLC结构化编程实战:联合体与结构体应用详解

结构化编程是PLC开发中提升代码复用与可维护性的核心方法。其原理在于通过功能封装与数据建模,将程序从线性堆叠转变为模块化架构。技术价值体现在降低耦合、提高复用率,使改动影响范围可预测。典型应用场景包括非标自动化产线、多工位设备控制及上位机通信。联合体与结构体作为数据组织的关键技术,分别解决同一数据多视图访问与相关数据打包问题,在西门子TIA Portal与汇川Codesys中均有成熟实现。掌握这些技术,能有效应对程序臃肿、调试困难等工程痛点,实现从搬砖式编程到结构化思维的跃迁。

weixin_31476015的博客 220

CODESYS 联合体变量(Union)

联合Union也是一种特殊的自定义类型这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体),联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)

RXXW_Dor的博客 3328

CoDeSys进阶:联合体、引用、指针等5种扩展类型实战解析

在工业自动化编程中,数据类型与内存管理是PLC开发者从基础迈向进阶的关键。联合体(UNION)允许同一段内存以多种类型解读,是通信报文解析的利器;而长时间(LTIME)以其64位纳秒级精度,解决了TIME溢出与高精度时间戳难题;宽字符串(WSTRING)则让中文等Unicode文本处理更加安全。此外,引用(REFERENCE)与指针(POINTER)作为传址操作的核心工具,在数据共享与底层操作中扮演重要角色。结合CoDeSys(IEC 61131-3)环境,本文从实际工程问题出发,讲解这5种标准扩展类型的语

weixin_30342363的博客 240

AlphaFold3实战:用它预测抗体结构,我的CDR H3环RMSD降到了2Å以内

本文详细介绍了如何利用AlphaFold3(AF3)高精度预测抗体结构,特别是CDR H3环的建模,其RMSD可降至2Å以内。通过实战演示从序列输入到结构优化的全流程,包括参数配置、置信度指标解读及结果分析,帮助研究人员快速掌握AF3在抗体药物研发中的应用。

weixin_29224529的博客 187

CoDeSys扩展数据类型实战:UNION、LINT、WSTRING、指针与引用

PLC编程中,基础数据类型(如BOOL、INT、REAL)在处理复杂协议解析、64位计数、Unicode文本及大数据高效访问时往往力不从心,导致数据拆解困难、计数器溢出、中文乱码等常见问题。CoDeSys提供了五种被低估的标准扩展类型——联合体(UNION)、长整型(LINT/ULINT/LTIME)、宽字符串(WSTRING)、指针(POINTER)和引用(REFERENCE),它们从内存映射、数值范围、编码表达和访问方式四个维度补足了基础类型的短板。理解这些类型的原理与适用边界,能够显著提升设备开发中数

weixin_29174385的博客 325

从ORCAP-1589警告看Cadence ORCAD的DRC设置:如何避免‘网络别名’引发的潜在短路风险

本文深入解析Cadence ORCAD中ORCAP-1589警告的深层含义,探讨网络别名可能引发的短路风险及DRC设置优化方案。通过分析网络别名的设计意图、DRC规则配置及最佳实践,帮助工程师有效规避设计风险,提升电路设计的可靠性和规范性。

weixin_34194829的博客 297

【华为OD机试】贪吃蛇(python, java, c++, js)

贪吃蛇是一个经典游戏,蛇的身体由若干方格连接而成,身体随蛇头移动。蛇头触碰到食物时,蛇的长度会增加一格。蛇头和身体的任一方格或者游戏版图边界碰撞时,游戏结束。 下面让我们来完成贪吃蛇游戏的模拟。 给定一个NM的数组arr,代表NM个方格组成的版图,贪吃蛇每次移动一个方格。 若arr[i][j] == H,表示该方格为贪吃蛇的起始位置; 若arr[i][j] == F,表示该方格为食物, 若arr[i][j] == E,表示该方格为空格。 贪吃蛇初始长度为1,初始移动方向为向左。

A_D_I_D_A_S的博客 541
上一篇: Codesys数据类型:扩展数据类型之 别名 详解
下一篇: Codesys数据结构:扩展数据类型之指针 Pointer 详解
林磊教育
博客等级 码龄3年 405粉丝 31原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值