尽管当今的人机界面都是智能的人机界面,如PanelView Plus,所有的数据都是通过网络通信,并直接设置数据,可以选择任何基本数据类型作为操作数。但是涉及TOD/FRD指令的讨论,不得不了解早期的人机界面。
可用来传递数字的,跟PLC结合的最早的人机界面,恐怕要算BCD码(即8421码)的数字组件了。这些数字组件是硬件,直接跟离散量模块连接,通过信号的输入/输出转换为数字代码,这是数字组件信号级别的人机界面。
早期的信号人机界面通常是离散量输出模块用4位输出组合对应数字组件的7段数码显示来表达一个数字;离散量输入模块用数字组件拨盘位置对应4个输入点的组合来表达一个数字。16点的I/O模块可以表示4位数的BCD码,其数据范围可表达0~9999,通过对离散量模块的I/O扫描获取BCD码或传送BCD码,放置在处理器数据表中的BCD码则参与了数据的处理。
了解早期工控产品的工程师都知道,内存数据的表达形式分为几种,如图8-24所示。数制的数据处理是当今开发人员较为熟悉的形式,码制的处理由于智能人机界面的快速发展而变得较为生疏了。
数制和码制最大的区别是数字可以运算,码制不可以运算。来自BCD的码制是用来表达十进制的数字,很容易被人疏忽当做数字,不加思索地拿去运算,系统是不会提示这个错误的,并且会完成这个运算,其隐含的陷阱是把这个数字当做十六进制来处理,进位和借位遵循其规则,结果自然是失之千里。不要去责怪控制系统不能识别数制或码制,这原本就是人们的主观认识,机器只会客观地识别0或1状态,并把0或1状态换作它要处理的数据类型。
切记!所有的码制都要转换为数制才能进行运算。
TOD和FRD就是解决换算问题的转换指令,TOD是将十进制数转换为BCD码;FRD是将BCD码转为十进制数。如图8-25所示编写的两个梯级把来自拨盘开关的BCD数据转换为待处理的十进制数据;把已处理好的十进制数据转换后送到外接的LED部件上显示数字。
图8-24 内存数据的表达形式
图8-25 BCD码转换的梯级逻辑
指令非常简单,但是一些细节不可忽视,我们已经习惯在指令的标签底下(蓝色箭头所指)读到相应的数据,这两条指令的From_TW和To_LED标签下读到的数据是没有意义的,因为系统总是按照二进制的权位换算成十进制数来表达,此处仅仅是BCD码的寄存器状态,按二进制权位换算出来的用十进制数的形式所显示的数字与所要表达的BCD码的数字毫不相干。在Logix控制器的数据表中,已经没有BCD码的数据形式,所以不可能在数据表中改为相应的数据形式,并在指令参数上获得相应的显示。
这种情形不止一次地出现在其他指令中,千万不要把指令标签地址中所表达的数据想当然地看成跟指令有关联的数据,那不过是计算机机械呆板的一种表现而已,虽然很多情况下是正确的,但还是要酌情接受,不能一概而论。当你发现数据不是你想要的那个,不要武断地认为程序编写有误,盲目地去查程序而白费时间,而是要仔细考虑,系统将怎样来表达,或者去细读指令参数的含义或规定。
现在新配置的系统中这样的数字部件几乎消失,所以Logix控制器在数据库中取消了BCD码的表达形式,但保留了这两条转换指令。如果升级改造的控制系统仍有这样的数据采集进来,我们是无法在数据表中直接读到的。我建议你将这个数据改为二进制的表达形式,然后每4位分段地译读出来。同样的道理,如果我们需要将数据以BCD码的形式送出,最好改为二进制表达后再来分段进行设置。(www.xing528.com)
TOD指令还有一个用处就是可以用来设置初始值,如果这个初始值恰恰是要求用BCD码设置的话,正好我们在数据表里面直接设置甚为不便,当然也有考虑可靠性的因素。PLC5模拟量模块1771-IFE的组态数据块,关于通道的定标数据要求用BCD码设置,在为组态数据块设置的37个字中,关于通道定标值的设置部分可以编写梯级逻辑如图8-26所示,这里只截取了通道0和通道1的设置。这跟使用MOV指令预设值是一样的做法,不过设置的是BCD码罢了。
图8-26 通道定标值BCD码的设定
TOD指令和FRD指令跟MOV指令相似,也是立即数的传送,不过是将立即数从十进制转换为BCD码并传送到目标地址。
可以观察一下这几个梯级执行后的显示结果,如图8-27所示,指令目标参数表面所读到的数据16533对于我们想要的BCD码的4095是匪夷所思的,但是不必担忧,BCD的数据已经被准确地送入了数据单元中。
图8-27 BCD码设定后的显示
TOD指令和FRD指令单一的转化操作也可以在表达式中直接引用,比如说对CPT指令和FAL指令表达式的运算结果进行转换,后续实例中我们将看到这种应用。
Logix控制器在数据库中取消了BCD的数据表达形式,告别了渐渐远去的人机界面硬件数字组件方式。我们庆幸免去了难堪的BCD码的纠缠,却又陷入了ASCII码的处理。显然,Logix控制器更为重视ASCII码的数字信息处理,在一组ASCII码信息处理指令中增加了几条有关数字和ASCII码相互转换的指令。
弧度转角度指令DEG和角度转弧度指令RAD也是一组转换指令,对编码器数据采集的处理有时会用到弧度和角度之间的转换。这里我们看一个实例,将数据转为弧度数值,作为提供给正弦指令SIN的源数据,梯级逻辑编写如图8-28所示,这是我们在三角函数的计算中曾经用过的。
图8-28 为正弦计算提供弧度值
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。