首页 理论教育 实训十九:数据转换指令的仿真实验优化

实训十九:数据转换指令的仿真实验优化

时间:2023-06-26 理论教育 版权反馈
【摘要】:数据转换指令见表3-9。DTR指令将32位双整数转换为32位浮点数。有4条将浮点数转换为32位双整数的指令,使用得最多的是四舍五入的ROUND指令,向上取整和向下取整指令极少使用。需要用数据转换指令,将PLC中的整数转换为BCD码,然后分别送给各个译码驱动芯片。二进制数的最高4位均为l,表示该数是负数。

实训十九:数据转换指令的仿真实验优化

数据转换指令见表3-9。语句表中的数据转换指令将累加器1中的数据进行数据类型的转换,转换的结果仍然在累加器1。

DTR指令将32位双整数转换为32位浮点数。有4条将浮点数转换为32位双整数的指令,使用得最多的是四舍五入的ROUND指令,向上取整和向下取整指令极少使用。

表3-9 数据转换指令

978-7-111-53804-2-Chapter03-115.jpg

1.BCD码

BCD码是二进制编码的十进制数的英语缩写,用4位二进制数表示一位十进制数(见表3-5),每一位BCD码的数值范围为2#0000~2#1001,对应于十进制数0~9。

BCD码的最高4位二进制数用来表示符号,负数的最高位为1,正数为0,其余3位一般与符号位相同。BCD码字(16位二进制数)的范围为–999~+999。BCD码双字(32位二进制数)的范围为–9999999~+9999999。BCD码相邻两位之间的关系是逢十进一,图3-75 中的BCD码为−829,图3-76是7位BCD码的格式。

978-7-111-53804-2-Chapter03-116.jpg

图3-75 3位BCD码的格式

978-7-111-53804-2-Chapter03-117.jpg

图3-76 7位BCD码的格式

拨码开关(见图3-77)的圆盘圆周面上有0~9这10个数字,用按钮来增、减各位要输入的数字。它用内部的硬件将显示的数字转换为4位二进制数。PLC用数字量输入点读取的多位拨码开关的输出值就是BCD码,需要用数据转换指令将它转换为整数或双整数。

用PLC的4个输出点给一片译码驱动芯片4547提供输入信号(见图3-78),可以用LED七段显示器显示一位十进制数。需要用数据转换指令,将PLC中的整数转换为BCD码,然后分别送给各个译码驱动芯片。

978-7-111-53804-2-Chapter03-118.jpg

图3-77 拨码开关

978-7-111-53804-2-Chapter03-119.jpg

图3-78 LED七段显示器电路

BCD码主要用于PLC的输入和输出,定时器的剩余时间值、计数器的当前计数值和日期、时间值都使用BCD码。

BCD码的表示方式与十六进制数相同,例如用数字量输入模块读取的图3-77中的拨码开关的数值为16#829。到底是BCD码还是十六进制数,取决于数据的来源或用途。

2.BCD码与整数相互转换的仿真实验

打开OB1,执行菜单命令“视图”→“LAD”,切换到梯形图语言,输入图3-79和图3-80中的梯形图程序。

978-7-111-53804-2-Chapter03-120.jpg

图3-79 BCD码转换为整数

978-7-111-53804-2-Chapter03-121.jpg(www.xing528.com)

图3-80 整数转换为BCD码

用鼠标右键单击SIMATIC管理器左边窗口中的“块”,执行出现的快捷菜单中的命令“插入新对象”→“变量表”,生成变量表VAT_1(见图3-81)。显示格式HEX和DEC分别是十六进制数和十进制数。

打开PLCSIM,将OB1下载到仿真PLC,将仿真PLC切换到RUN-P模式。打开OB1,单击工具栏上的 978-7-111-53804-2-Chapter03-122.jpg 按钮,启动程序状态监控功能。

在变量表第1行的“修改数值”列输入十六进制数W#16#8123(低12位二进制数是从拨码开关读取的BCD码),二进制数的最高位(符号位)为1,表示负数。单击工具栏上的按钮 978-7-111-53804-2-Chapter03-123.jpg ,“修改数值”被写入PLC内的MW2,并在“状态值”列显示出来。图3-79中的指令将它转换为十进制数-123。

978-7-111-53804-2-Chapter03-124.jpg

图3-81 变量表

将MW2中的数分别修改为W#16#F123(最高4位二进制数均为1)和W#16#0123,观察转换后的MW4中的十进制数。

在变量表第3行的“修改数值”列输入十进制数-456,单击工具栏上的“激活修改数值”按钮 978-7-111-53804-2-Chapter03-125.jpg ,“修改数值”被写入PLC内的MW6。图3-80中的指令将它转换为MW8中的BCD码W#16#F456。二进制数的最高4位均为l,表示该数是负数。将MW6中的数修改为456,观察转换后的MW8中的BCD码。

执行菜单命令“视图”→“STL”,切换到语句表语言,观察图3-79和图3-80对应的语句表程序。

3.BCD码转换的仿真练习

将图3-79和图3-80中的程序改为BCD码与双字的转换指令,修改变量表中的地址

打开PLCSIM,将修改后的程序下载到仿真PLC,将仿真PLC切换到RUN-P模式。用变量表设置指令的输入值,观察转换后的结果是否正确。

4.压力计算程序中的数据转换

压力变送器量程为0~l0MPa,输出的4~20mA电流被AI模块转换为数字0~27648。设AI模块的输出值为N,压力计算公式为

P=(10000×N)/27648=0.36169×N (kPa) (3-1)

米自AI模块的PIW320的原始数据Ⅳ为16位整数,首先用l_DI指令将整数转换为双整数(见图3-82),然后用DI_R指令转换为实数(Real),再用实数乘法指令MUL_R完成式(3-1)的运算。最后用四舍五入的ROUND指令,将运算结果转换为以kPa为单位的整数。图中的程序在随书光盘的例程“数据处理”中。

978-7-111-53804-2-Chapter03-126.jpg

图3-82 使用浮点数运算指令的压力测量值计算程序

打开PLCSIM,将程序下载到仿真PLC,将仿真PLC切换到RUN-P模式。将0和27648分别输入PIW320,观察MD24中的计算结果是否是0和10000kPa。将0~27648之间的任意数值输入PIW320,观察计算结果是否与计算器计算的相同。

指令ROUND的运算结果为双字,但是由式(3-1)可知最终的运算结果实际上不会超过一个字,保存运算结果的MD24的高位字MW24的值为0,运算结果的有效部分在低位字MW26中。观察MW24和MW26的值,验证上述结论是否正确。

5.数据转换指令的仿真练习

半径(小于10000的整数)在MW10中,圆周率为3.1416,用浮点数运算指令计算圆的周长,将运算结果转换为整数,存放在MD14中。将程序输入到OB1后下载到仿真PLC,调试程序直到满足要求。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈