|
邀请回答
马上注册,享受更多特权
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 whpxixi 于 2019-7-20 17:26 编辑
问题描述:
通过PLC计算16bit/32bit加减乘除,当计算结果超过32767(16bit运算)或2147483647(32bit运算),进位标志(M8022)置位;当计算结果不满-32767(16bit运算)或-2147483647(32bit运算),借位标志(M8021)置位。两种情况都会导致计算结果溢出,但是当加减法同时存在,若程序编写不当,会影响M8022或M8021置位。
如16bit加法计算结果溢出,M8022不置位。
解决思路:
1、 检查PLC编码及InoTouch元件地址,并重新下载运算,发现没有问题。
2、 尝试进行减法运算并使其结果溢出,发现借位标志M8021置位,M90元件触发。尝试调整M8022和M8021代码顺序以及加法运算和减法运算顺序,发现前者运算结果溢出,但对应M8021或M8022没有置位。
3、 寻求大神(朱工)支援,发现若将加减法运算分开或增设开关分别控制,可以将M8022和M8021置位。并在PLC编程手册中发现“编程时防止重复或误覆盖”的提醒。
总结分析:
加减法运算中,若运算结果溢出,M8022和M8021是否置位会根据后者运算结果来判定,前者运算结果溢出导致的进位或借位被后者覆盖,因而编写程序时,若要监控M8022和M8021是否置位,需要将其代码编写在对应运算后或设置开关分开加减法运算。此外还发现,乘除法运算不会导致M8022和M8021置位。
|
上一篇: 关于加减运算数据溢出的问题总结下一篇: H3U高速输入输出口
|