0

IEC61131-3 语言中的直接表示变量 (DRV) 在其“地址”中包含数据宽度说明符:X1 位、B字节、W字、D双字等。

此外,当 DRV 被声明时,IEC 数据类型被指定为任何变量(BYTE、WORD、INT、REAL...)。

我不确定这些事情是如何相关的。它们是否正交?W可以用(字节)地址定义一个 REAL 变量吗?预期的结果是什么?

一本书说:

将数据类型分配给标志或 I/O 地址使编程系统能够检查变量是否被正确访问。例如,AT %QD3 : DINT;不能使用UINTor无意中访问由 声明的变量REAL

这并没有让我更清楚。以这个片段为例(回想一下,这W意味着 Word,即 16 位 - 两者都DINT对应REAL于 32 位)

 X AT %MW3 : DINT;
 Y AT %MD4.1 : DINT;
 Z AT %MD4.1 : REAL; 

第一行将 32 位 IEC var 映射到 16 位位置。这合法吗?写/读是否相当于“演员”或什么?

其他行声明了两个指向同一地址的不同类型的 32 位 IEC 变量(我想这应该是合法的)。阅读或写作时的预期结果是什么?

4

1 回答 1

2

不幸的是,就像 PLC 世界中的一切一样,它的所有供应商和型号都是特定的。

西门子编译器不会让你用像MD4.1这样的位组件声明Real address,它只允许MD4,数据长度必须是双字,不允许MB4。

阅读不等于演员。例如,您将 MW2 声明为整数并在那里复制一些值。PLC以二进制补码格式存储整数。稍后在程序中,您将 MD2 视为真实的。PLC 不会尝试将整数转换为实数,它只是盲目地读取字节并将其视为实数,而不管那里保存了什么或在那里声明了什么。没有自动铸造。

这就是 Siemens S7 plc-s 中的工作方式。但是您必须非常小心,因为每个供应商都以自己的方式做事。

于 2016-01-24T00:10:06.873 回答