这条被称为数据转变的指令听起来跟顺序器指令似乎毫无关系,但作用跟顺序器指令SQI几乎一样,它也是一条输入指令,每逢它所在的梯级被扫描,源数组就会和参考数组通过屏蔽进行比较,产生逻辑结果作为梯级条件。比较结果相同,梯级条件为假;比较结果不同,梯级条件为真,并保持一个扫描周期,且将参考值改成与源值一致,等待下一次的比较。
请注意,DTR指令与SQI指令比较结果的逻辑关系是相反的,SQI指令是比较结果相同,梯级条件成立,还有不同之处在比较结果不同时要修改参考数组,常常用来检测数据是否发生了变化。梯级逻辑编写如图12-11所示。
图12-11 编写的梯级逻辑
指令执行比较的结果有两种情况,相同或不同,如图12-12所示。可以看出比较结果相同时,参考值不会修改;比较结果不同时,参考值被修改成跟源参数一样。
该指令适合用于监视一个数据的变化,并在变化时有执行动作,这个动作就是DTR指令提供梯级条件的输出指令。请注意,在线运行时编写这条指令存在一定风险,可能会导致输出指令的执行。
我们试着解决一个监视现场数据变化的需求,当这个数据变化时,记录当时的日期时间,并装入一个记录文档,这个记录文档始终保持最后的50个日期时间数据。编写的梯级逻辑如图12-13所示。
DTR指令的Test_Value标签是监视对象,每当梯级被扫描时,通过屏蔽字与参考量Reference_Value标签进行比较,屏蔽字设置为只有两个低字节参加比较,当监视数据发生变化,梯级条件为真,并修改参考量,令其与监视量相同,因此梯级条件只存在一个扫描周期,这足以让GSV指令执行获取系统日期时间和FFL指令的梯级条件跳变执行。
(www.xing528.com)
图12-12 指令执行结果的对比
图12-13 记录数据变化的日期时间并存档
当DTR指令给出的梯级条件为真时,GSV从系统中获取当前日期和时间,同时FFL指令装载了这个数据,将其存放在堆栈数组Array_Record_DateTime中,管理堆栈数组的控制结构数据标签的完成位Control_DatrTime.DN使得FFU执行,卸载最旧的日期时间数据,腾出最后一个数据单元来装载最新日期时间数据记录。
装载指令FFL和卸载指令FFU的配合操作和我们在前面第10章中讨论过的相似,不同的是此处的操作对象不是单纯的双整字数组,而是一个结构数据数组,一个用户自定义的日期时间结构数据数组。如图12-14所示是此段梯级逻辑运行之后,记录在这个结构数据标签中的部分数据,截取了前面两个元素显示。
图12-14 记录在结构数据标签中的部分数据
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。