我继承了用IEC 61131-3结构化文本编写的PLC程序。我刚刚注意到它混合了STRING
个变量和一些STRING(15)
个变量。它表明IEC61131-3声明其字符串具有预定义的长度(是吗?)并且可能存在默认长度(是否存在?)这让我想知道我观察到的一些奇怪的字符串行为是否来自字符串溢出缓冲区和多余的被忽略(可能吗?)
理想情况下,请支持任何带有易于访问的IEC61131-3参考链接的答案,以便人们可以浏览它以获取STRING
和其他IEC 61131-3数据类型的更多详细信息。< / p>
答案 0 :(得分:2)
如果在IEC61131-3中声明STRING变量,则必须指定STRING的长度。
sExample : STRING(n);
n确定String的字符数/字节数。 始终附加\ 0字符,因此STRING(n)大于n + 1个字节。
在Codesys和TwinCat中,有一些供应商特定的专业未在IEC61131-3(afaik)中定义:
sExample : STRING; //This is the same as STRING(80)
sExample : T_MaxString; //This is the same as STRING(255)
你不应该使用大于T_MaxString的STRING,因为可用的字符串函数无法处理更大的字符串。
此信息基于Beckhoff Infosys TC3,因为CodeSys文档无法轻松访问,并且官方IEC61131-3标准不是免费提供的。所以我只能提供供应商特定的信息。
您应该使用plc系统中的文档重新检查。
答案 1 :(得分:0)
如果未定义大小,则CODESYS默认情况下分配80个字符。
https://help.codesys.com/api-content/2/codesys/3.5.12.0/en/_cds_datatype_string/