Structured Text中字节变量加1操作报错问题咨询
报错原因
这个编译错误是PLC类编程环境(TIA博途、CODESYS等遵循IEC61131-3标准的平台)的默认类型校验规则导致的:
- 算术运算符
+执行计算时,会默认把两边的操作数都转成16位有符号整型INT再运算,就算你把加数1用TO_BYTE()转成字节型,最终算出来的结果还是INT类型 - 你直接把
INT类型的计算结果赋值给BYTE类型的数组元素,编译器判定存在类型不匹配、窄转换溢出风险,就会抛出加法无法执行的报错。
修正方案
不要只给加数做类型转换,要把整个加法表达式的计算结果统一转成BYTE类型再赋值,修正后的可正常编译的代码如下:
IF message_byte[11] = 16#02 OR message_byte[11] = 16#0D THEN message_byte[11] := TO_BYTE(message_byte[11] + 1); END_IF
注意事项
- 你代码里的两个常量值对应关系是对的:STX(正文开始符)ASCII码为
16#02,CR(回车符)ASCII码为16#0D,后续修改时不要搞混两个常量的含义 - 两个触发自增的原值加1后分别为
16#03、16#0E,都在BYTE类型0~255的合法取值区间内,不需要额外写溢出处理逻辑。
内容的提问来源于stack exchange,提问作者opol
相关产品推荐
相关产品推荐

