FX系列的二进制浮点数用于浮点数运算,十进制浮点数用于监控。
1.二进制浮点数
二进制浮点数又称为实数(REAL),它由相邻的两个数据寄存器字(例如D11和D10)组成,D10中的数是低16位。浮点数可以表示为1.m×2E,1.m为尾数,尾数的小数部分m和指数E均为二进制数,E可能是正数,也可能是负数。FX采用的32位实数的格式为1.m×2e,式中指数e=E+127(1≤e≤254),e为8位正整数。
浮点数的格式如图4-58所示,共占用32位,需要使用编号连续的一对数据寄存器。最高位(第31位)为浮点数的符号位,最高位为0时为正数,为1时为负数;8位指数占第23~30位;因为规定尾数的整数部分总是为1,只保留了尾数的小数部分m(第0~22位),第22位对应于2-1,第0位对应于2-23。浮点数的范围为±1.175 495×10-38~±3.402823×1038。浮点数与6位有效数字的十进制数的精度相当。
图4-58 浮点数的结构
浮点数的优点是用很小的存储空间可以表示非常大和非常小的数。PLC输入和输出的数值大多是整数,例如模拟量输入模块输出的转换值和送给模拟量输出模块的都是整数。用浮点数来处理这些数据需要进行整数和浮点数之间的相互转换,浮点数的运算速度比整数的运算速度慢一些。
实际上用户不会直接使用图4-58所示的浮点数的二进制格式,对它有一般性的了解就行了。编程软件GX Developer支持浮点数显示,用十进制小数显示和输入浮点数。
使用指令FLT和INT可以实现整数与二进制浮点数之间的相互转换。
2.十进制浮点数
在不支持浮点数显示的编程工具中,将二进制浮点数转换成十进制浮点数后再进行监控,但是内部的处理仍然采用二进制浮点数。
一个十进制浮点数占用相邻的两个数据寄存器字,例如D0和D1,D0中是尾数,D1中是指数,数据格式为尾数×10指数,其尾数是4位BCD整数,范围为0、1000~9999和−1000~−9999,指数的范围为−41~+35。例如小数24.567可以表示为2456×10-2。
在PLC内部,尾数和指数都按2的补码处理,它们的最高位为符号位。
使用应用指令EBCD和EBIN,可以实现十进制浮点数与二进制浮点数之间的相互转换。
3.BIN整数→二进制浮点数转换指令
FLT(FNC 49,见图4-59)指令将存放在源操作数中的16位或32位的二进制(BIN)整数转换为二进制浮点数,并将结果存放在目标寄存器中。32位源操作数(S·)和目标操作数(D·)均为数据寄存器D。本实训中的程序见随书光盘中的例程“浮点数转换”。
4.二进制浮点数→BIN整数转换指令
INT(FNC 129)指令将源操作数(S·)指定的二进制浮点数舍去小数部分后,转换为二进制(BIN)整数,并存入目标地址(D·)。
源操作数和目标操作数均为数据寄存器D,16位或32位运算时目标操作数分别为16位或32位。该指令是FLT指令(FNC 49)的逆运算,运算结果为0时,零标志M8020为ON;因转换结果不足1而舍掉时,借位标志M8021为ON;如果运算结果超出目标操作数的范围,则出现了溢出,进位标志M8022为ON,此时目标操作数中的值无效。
5.二进制浮点数→十进制浮点数转换指令
图4-59中的DEBCD(FNC 118)指令将(D20,D21)中的二进制浮点数转换为十进制浮点数后,存入D22(尾数)和D23(指数),指令之前的“D”表示双字指令。尾数的绝对值在1000~9999之间,或等于0。例如在源操作数为3.4567×10-5时,转换后D50=3456,D51=-8。
图4-59 梯形图(www.xing528.com)
6.十进制浮点数→二进制浮点数转换指令
DEBIN(FNC 119)指令将源操作数指定的数据寄存器中的十进制浮点数转换为二进制浮点数,并存入目标地址。为了保证浮点数的精度,十进制浮点数的尾数的绝对值应在1000~9999之间,或等于0。
7.整数与浮点数相互转换的仿真实验
图4-59中的DFLT指令将(D0,D1)中的32位整数转换为浮点数,并用(D2,D3)保存。DINT指令将(D2,D3)中的浮点数转换为32位整数,并用(D4,D5)保存。
单击工具条上的按钮,打开软元件批量监视视图。设置监视形式为多点字,显示格式为32位整数。单击监视开始按钮 ,各32位整数的值均为0。双击其中的(D0,D1),用出现的“软元件测试”对话框设置(D0,D1)的值为35765384(见图4-60),其中的浮点数(D2,D3)用整数方式显示没有什么意义。
打开“软元件内存监视”对话框,生成X窗口。双击其中的X1,它的常开触点接通,执行DFLT指令后,双字(D2,D3)中是转换后得到的浮点数。在梯形图状态监控中显示的十进制格式的浮点数为3.577E+007(即3.577×107)。将软元件批量监视视图的显示格式改为“实数(单精度)”,(D2,D3)中的浮点数为3.57654E+007(见图4-61),它实际上是二进制浮点数的值。图中的32位整数(D0,D1)和(D4,D5)的值用浮点数方式显示没有什么意义。
图4-60 32位整数格式的软元件批量监视
图4-61 浮点数格式的软元件批量监视
梯形图监控用十进制浮点数格式显示浮点数,有效数字只有十进制的4位。PLC中和软元件批量监视中使用的是二进制浮点数,其精度相当于6位有效数字的十进制数。
8.用浮点数运算求圆的面积
整数格式的半径r在D10中,用浮点数运算求圆的面积(πr2),运算结果转换为32位整数,用(D16,D17)保存。
取圆周率π的近似值为3.142,FX2N等系列不能直接输入二进制浮点数常数,用MOV指令将π对应的十进制浮点数的尾数和指数分别输入到D6和D7,然后用DEBIN指令将它转换为二进制浮点数(见图4-62)。用FLT指令将D10中整数格式的半径转换为二进制浮点数。完成上述操作后,才能执行浮点数运算指令。
FX3G、FX3U和FX3UC的浮点数运算指令可以直接使用浮点数常数(见4.9节)。
图4-62 梯形图程序
将程序下载到仿真PLC,打开软元件批量监视视图(见图4-63左边的图),设置从D0开始监视,监视形式为多点字,显示格式为16位整数。单击监视开始按钮 ,显示各字的值均为0。双击其中的D10,用出现的“软元件测试”对话框设置D10的值为1 000见图4-63右边的图)。
在位软元件区输入X2,单击“强制ON”按钮,X2被强制为ON。其常开触点接通,图4-62中的指令被执行。将软元件批量监视视图中的显示格式改为“实数(单精度)”,从图4-63可以看出,(D8,D9)中的浮点数为3.142 000,(D12,D13)中转换得到的浮点数半径值为1 000.000 000,(D14,D15)中第2条浮点数乘法指令的运算结果为3.142 00E+006(即3142000.0)。将显示格式切换为32位整数,可以看到(D16,D17)中的整数为3142 000。
图4-63 软元件批量监视视图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。