在Logix控制器的指令系统中,虽然我们改口称文件操作指令为数组操作指令,但这条指令的名称却保留了原貌(File Arithmetic and Logic),这是一条用于算术逻辑的批量数据处理的指令,这个批量数据原来称为文件,现在称为数组,且扩展为多维数组。Logix控制器的FAL指令的处理跟PLC5指令系统中的FAL指令有差别,可以说变得更为灵活,能够选择更多的表达形式,但编写指令参数也变得更为繁杂。
这条指令是一条处理功能很强的指令,它不仅仅完成数组的算术逻辑运算,还可以完成数组的转换和传送。尤其是在数据传送灵活性方面更优于COP指令。它可以根据需要对结构数据数组中的单个子元素完成数据连续存储的操作,甚至可以按照一定的规律抽取结构数据中的子元素完成连续存储,这正是COP指令无法解决的问题。FAL指令的处理方式灵活多变,它的执行过程有三种操作模式可选择:
●整体模式 梯级条件跳变激活指令后,指令在一次扫描中完成所有的操作,一般用于数组对数组的操作。Mode项选择ALL。
●数量模式 梯级条件跳变激活指令后,指令分几次扫描完成所有的操作,适合大批量数据的操作,将操作均衡地分配在几个扫描周期,避免不合理的某次扫描周期过长。倘若操作尚未结束,梯级条件消失,指令将继续执行直到完成。注意,在数组操作完成位没有置位之前,不要使用目标标签中的数据,否则将使用新旧混杂的数据,带来不可预料的结果。Mode项键入正整数,作为每次扫描的操作个数。
●增量模式 梯级条件每跳变一次执行一次,一般用于数组对元素的操作或元素对数组的操作。Mode项选择INC。
FAL指令属于保持型指令,指令的执行必须有梯级条件的跳变触发,受COP指令的影响,常常被人忽视这一点,提供的是梯级条件成立,而不给予梯级条件跳变,以至于出现指令只执行一次便不再执行的错误。梯级逻辑编写FAL指令如图9-3所示,本条FAL指令的执行结果是将结构数据标签计时器数组的子元素累加值ACC抽取出来,传送到双整字数组中连续存放。请注意,如果该条指令的梯级条件To—ACC置位后没有复位,这个数据传送动作只会执行一次。
具有操作模式可选的FAL指令跟其他数组指令的操作不同,甚至跟PLC5的FAL指令的操作也不同,主要表现在控制器系统不会令操作对象的数组元素序号顺序地自动增加,而是独立于指令操作之外,交由外部修改,即在FAL指令之外编写修改数组元素序号的梯级逻辑,这样可以使得数据批量处理的方式更为灵活。在FAL指令之外编写梯级逻辑修改被操作数组元素序号,对于增量模式是可行的,可以在修改好数组元素序号后,按照条件再进行下一步操作,如果FAL指令选择了整体模式,是没有机会由外部梯级逻辑的执行来修改数组元素序号的。通常采用间接寻址来获得数组元素序号的移动,如果借助指令本身的控制结构数据标签的指针变化来作为处理对象的数组元素序号,可以在数组元素项中直接填写本条指令控制结构数据的指针,随着指针的增加,元素寻址实现了顺序移动。
图9-3 抽取计时器子元素ACC送至双整数组中存放
间接寻址亦可安排出某种规律。如果数组每隔一个元素的抽取,比如抽取偶数元素的ACC值,则可以编写如图9-4所示的梯级逻辑,在数组元素寻址项的编写上,只要将控制结构数据标签的指针乘上2就可以了。同理,如果希望数组元素序号从2开始,则间接寻址令控制结构数据标签的指针加上偏移量2即可,其余类推。
图9-4 具有特定规律的间接寻址
图9-5 带运算表达式的数组操作(www.xing528.com)
FAL指令最基本的功能就是数组对数组的运算,编写梯级逻辑如图9-5所示。将数组Array_ADD_Dint1每个元素加上5,送到目标数组Array_ADD_Dint2的对应元素,由于使用了相同的间接寻址作为元素序号,源数组和目标数组的元素序号是一致的,有效算术连接符加号“+”连接常数5即为表达式。梯级条件采用本条指令的控制结构数据标签的使能位常开输入位指令,则可以让这条FAL指令反复地执行,这也是让指令反复执行常用的手法,对于需要梯级条件触发才能执行的保持型指令,则能保持其连续不断地执行指令。
FAL指令的操作可以更为复杂,如用单一操作的转换指令与表达式复合在一起实现运算兼转换的执行动作,FAL指令也可以实现数组对元素的操作或元素对数组的操作,但要采用增量模式。下面的实例综合了这两种运用,这个实例是一个将数字转换为BCD码送到数码显示LED的输出;和一个从拨盘输入TW读来的BCD码转换为数字并存入数组,编写梯级逻辑如图9-6所示。
图9-6 增量模式的数组操作
因为两条FAL指令选择的操作模式都是增量模式,每当梯级条件Unload_LED跳变一次,便将指针所指数组元素转换成BCD码并送给目标字Output_LED;每当梯级条件Load_TW跳变一次,便将来自Input_TW的BCD码转换为数字送到指针指向的数组元素。这种操作模式完全类似后面章节将要谈到的顺序器输出指令SQO和顺序器装载指令SQL的操作。对于数组操作指令来说,这是典型的数组对元素的操作或元素对数组的操作。
图9-6 增量模式的数组操作(续)
外部修改指针可以有任意的形式,方式可以灵活多变,甚至特别指定,这样顺序加1的修改,跟直接使用指令结构体的指针做间接寻址是一样的。
试想一下,如果元素和数组的操作不选用增量模式会是什么样的情景,前一条指令是送出,如果不采用增量模式,数组元素不停地输出到Output_LED,其覆盖的结果是只得到数组最后一个元素的数据,这完全可以用MOV指令来得到;后一条指令是读入,如果不采用增量方式,源字的数据将充填整个数组,这未尝不可,但是我们已有一条称为充填指令的FLL指令专司其职。
由于采用了增量操作模式,这种逐字的操作完全可以在外部修改数组指针,在FAL指令执行之前,需要执行一个指针修改的操作,用加1的操作便可实现。但是ADD指令自身不能识别是否已经完成一个循环,不会自动回归起始指针0,采用判断指令来完成,这里采用的不是等于10的判断而是大于等于10的判断,一旦错过了10,还是能够回到原点。此外,ADD的操作被ONS指令限于只能操作一次。
请注意,外部指针修改的梯级逻辑必须在FAL指令执行之前执行,梯级条件跳变不但引起指针的修改,还引发了FAL指令的操作动作,在这个操作动作之前必须准备好指针,如果不在意这两者的执行顺序,将FAL指令并列在输出指令的最前面,那么结果就完全不会是我们所想要的了。
总而言之,FAL指令是功能十分强大的指令,只是一条指令就可以完成需要大量梯级逻辑才能完成的任务,它不仅仅是数组的操作,还是复杂运算关系的集合,最有意义的是具有检索的功能,这些特性集合在一起,的确能解决许多棘手的问题,而表达又是如此的简洁和直观。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。