昨天忘了这条件原则,代价是程序工作随机出现异常,浪费整整一个下午排错,搞得我头晕眼花。
比如有表示式 x = a / b,在 S7-200 中代码如下:
MOV* a, x // 这里存放结果的 x 作了中间变量
/* b, x // * 表示变量类型
或
MOV* a, AC0 // 引入中间变量 AC0
/* b, AC0
MOV* AC0, x
在一般情况下,前一种方法是没有问题的,而且代码也较为简洁。如果中断程序要直接或间接的用到变量 x 的值,就不能使用第一种方法了。因为中断可能在任何时候发生,当恰好在 MOV* a, x 之后发生中断时,此时 x 中的值是 a,而不是所要的 a / b,这将导致中断程序计算结果错误。
但中断程序不可能每次都发生在这个地方,所以程序表现为大多数时候正常,没有规律的出现异常,而且此种 BUG 极难排查。