IEC61131-3语言中的直接表示变量(DRV)在其“地址”中包含数据宽度说明符:{1}表示1位,X
表示字节,B
表示字,W
用于dword等。
此外,当声明DRV时,指定IEC数据类型,作为任何变量(BYTE,WORD,INT,REAL ...)。
我不确定这些事情是如何相关的。它们是否正交?可以用D
(字节)地址定义一个REAL变量吗?预期的结果是什么?
一本书说:
将数据类型分配给标志或I / O地址可启用编程 系统检查是否正确访问变量。对于 例如,
W
声明的变量不能 无意中使用AT %QD3 : DINT;
或UINT
访问。
这对我来说并没有让事情更清晰。以此片段为例(回想一下REAL
表示Word,即16位 - W
和DINT
都对应32位)
REAL
第一行将32位IEC var映射到16位位置。这合法吗?写/读是否等同于“演员”或什么?
其他行声明两个不同类型的32位IEC变量指向相同的地址(我想这应该是合法的)。阅读或写作时的预期结果是什么?
答案 0 :(得分:2)
与PLC世界中的所有内容一样,不幸的是它的所有供应商和型号都具体。
西门子编译器不会让你用MD4.1这样的位组件声明实地址,它只允许MD4,数据长度必须是双字,不允许使用MB4。
阅读不等于演员。例如,您将MW2声明为整数并在那里复制一些值。 PLC存储整数,比如二进制补码格式。稍后在程序中,您将MD2视为真实。 PLC不会尝试将整数转换为实数,它只是盲目地读取字节并将其视为真实,无论在那里保存了什么或在那里声明了什么。没有自动投射。
这就是西门子S7 plc-s的工作原理。但是你必须非常小心,因为每个供应商都以自己的方式做事。