数据类型列出几个成员,不代表它们一定各自拥有一份独立存储。CODESYS的UNION帮助页明确说明,各成员占用同一内存空间,具有相同地址偏移,并共同使用这段内存。理解这种结构,要看共享存储,而不能只按成员清单想象一排互不相干的格子。[1]
页面先说UNION是用户定义的数据结构,其成员通常有不同的数据类型和大小,随后立即限定它们的内存关系。不同类型在这里可以共同出现在一个定义中,但并没有因此使每个成员都获得独立保存值的位置。名称并列与存储分离是两个问题,后者需要原文明确回答。
文档进一步将内存需求关联到最大的成员。原因可以从前面的共享关系理解:这些成员不是在同一实例中依次排开、把各自空间简单相加。本篇保留原厂给出的定性规则,没有计算某台控制器的实际占用字节数,也没有从类型名补出具体编译布局。
值的状态同样受共享关系限定。CODESYS说,一个UNION变量存储恰好一个成员的值,内存中保留最后赋入的值;页面末尾又指出,写入一个成员会影响变量的全部成员。因而,不能把每个名称当作彼此独立的历史记录,期待它们各自保留不同时间写入的内容。
这项说明适合用来澄清类型资料中的一个误读:一张成员表虽然有多行,但行数并没有直接证明有几份同时存在的独立值。假设摘要把UNION写成“几个字段分别保存各自结果”,它就遗漏了共享内存和最后赋值两个条件。这个假设只是对文字含义的分析,本篇没有运行示例或验证任何控制程序的变量状态。
UNION帮助页未给出可确认的首次发布日期,本文采用完整定义、内存说明及末尾影响关系,并阅读了中间示例作为语境,但不复制可下发代码或赋值步骤。对可编程控制系统资料,新增认识是多个成员可提供不同的类型视角,却仍共用同一段存储;这不构成地址映射、通信转换或生产调试方案,也不把其他语言的同名类型行为移到这份CODESYS定义中。
信息来源
本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。