发表于:2012/9/8 23:36:11
#0楼
最经在学习PLC视频教程的过程中,发现在英文原版手册中,有这样的一段:
When a subroutine is called more than once in the same cycle, the edge/up, edge/down, timer and counter instructions should not be used.
注意,使用的是“should not”,翻成中文,应该是“不宜”。在中文版手册中,这个词被翻译成“不能”,显示对这个问题进行了强化。
但,我们要知道,这个“不宜/不能”使用的建议,是在“同一扫描周期内被多次调用”这一个前提条件下的,换成另一个角度说,这一句话并没有限制或禁止这些指令出现在子程序中。
因此我一直不支持“不能”这一论调。
那为什么会有“should not”这么一个建议?
一般在使用子程序里,都会建议多用局部变量,少用V区这样的全局变量。在S7200中,基于V区变量的程序执行性能,要好过基于L区的程序,按理说在子程序中少用L区变量比较好。其实这些建议,是照顾编程者的。因为人的精力有限,在写程序时会顾此失彼、前后冲突,在子程序中使用全局变量的编程出错风险要比使用局部变量大。
当在一个扫描周期内子程序被多次调用时,一般是被用来处理不同对象的(尽管处理过程相同或相似),如何使这些不同对象间的数据进行隔离或共享,也是编程者要解决的。
再来看沿指令、定时器、计数器,这些都是全局资源,相当于V区这样的全局变量。但是这些全局资源却在子程序中没有对应的局部资源。而这类全局资源的使用复杂度,远高于全局变量,在处理不同对象时保持隔离或共享这些资源更加复杂,不是几句话能讲清的,所以,是“should not”。
沿指令比较特别一点。其实它也是有编号,就象VB0、VB1这样。当我们在线监控沿指令时,指令上会出现一个编号。一旦程序完成,这个编号就固定了。
When a subroutine is called more than once in the same cycle, the edge/up, edge/down, timer and counter instructions should not be used.
注意,使用的是“should not”,翻成中文,应该是“不宜”。在中文版手册中,这个词被翻译成“不能”,显示对这个问题进行了强化。
但,我们要知道,这个“不宜/不能”使用的建议,是在“同一扫描周期内被多次调用”这一个前提条件下的,换成另一个角度说,这一句话并没有限制或禁止这些指令出现在子程序中。
因此我一直不支持“不能”这一论调。
那为什么会有“should not”这么一个建议?
一般在使用子程序里,都会建议多用局部变量,少用V区这样的全局变量。在S7200中,基于V区变量的程序执行性能,要好过基于L区的程序,按理说在子程序中少用L区变量比较好。其实这些建议,是照顾编程者的。因为人的精力有限,在写程序时会顾此失彼、前后冲突,在子程序中使用全局变量的编程出错风险要比使用局部变量大。
当在一个扫描周期内子程序被多次调用时,一般是被用来处理不同对象的(尽管处理过程相同或相似),如何使这些不同对象间的数据进行隔离或共享,也是编程者要解决的。
再来看沿指令、定时器、计数器,这些都是全局资源,相当于V区这样的全局变量。但是这些全局资源却在子程序中没有对应的局部资源。而这类全局资源的使用复杂度,远高于全局变量,在处理不同对象时保持隔离或共享这些资源更加复杂,不是几句话能讲清的,所以,是“should not”。
沿指令比较特别一点。其实它也是有编号,就象VB0、VB1这样。当我们在线监控沿指令时,指令上会出现一个编号。一旦程序完成,这个编号就固定了。