做配方处理的程序,遇到两个有意思的事,跟大家分享。
1、做循环处理后,判断数据是否为0,为零则跳转。
我开始写的:
L #CYC_NUM;
+ -1;
JZ ZERO;
结果当#CYC_NUM=1时,动作不正常。
改程序为
L #CYC_NUM;
DEC 1;
JZ ZERO;
程序动作还是达不到我的期望……
回去翻STL编程手册, 首先JZ指令是没有问题的,即当累加器1的内容为0时,跳转。 问题是,+ 和 DEC指令均不会改变CC0和CC1的状态, 只有+I指令(-I)才会改变CC0和CC1,从而可以影响到JZ指令的执行。程序改为
L #CYC_NUM;
L 1;
-I ;
JZ ZERO;
动作正常。 总结, 本来是为了节约程序空间,省写一条语句,结果出问题了,呵呵。
2、做配方程序时,开始使用FB块。 由于使用了AR1和AR2,程序始终不正常。 后来才想起来以前看过西门子标准库里的程序,都会对AR2和AR1暂存, 上网查资料,发现一些特殊的数据访问会改变AR2的值……最后改用FC+全局DB。
总结,AR2是个比较特殊的东西,目前还没有完全搞清楚它的使用原则。 希望大家都来讨论讨论。