时间:2023-07-13 14:58
人气:
作者:admin
我们的S7-200SMART PLC不支持doublefloat数据类型,需要转换成float型才能计算使用。

在编写转换程序之前,我们需要先了解IEEE浮点数的定义:
浮点数的二进制信息包括了符号(sign),指数(exponent),尾数(fraction)这三类信息

通过二进制值按规则解析出浮点数

64位浮点数

32位浮点数

当指数位不全为0或不全为1时,m=1+M
m的计算规则如下图:


不论是32位浮点数还是64位浮点数,都是按照上面的规则进行计算解析出浮点数的实际值。
流量计读取到的负累计流量,64位浮点数实际值如下

利用在线计算器输入十六进制,得到转换出的Float64十进制实际值。

需要将64位浮点数转换成32为浮点数,在计算器中输入十进制数值,得到转换后的十六进制数值。

逆向思考,要想得到同样的结果
符号位功能相同可直接对应过来
指数E需解析出同样的e(由于32位浮点数指数只有8个位,表示的最大无符号整数为255,如果将64位浮点数指数对应过来超过255,就会发生溢出错误)
尾数直接截取(仅影响精度)。
变量表







主程序调用子程序

转换结果以双整型显示(SReal在变量表中类型定义为DWORD)

VD2700十六进制内容与上文计算器转换出的十六进制数值一致

VD2700十进制32位浮点数显示内容与64位浮点数的整数及小数点后5位相同,程序正确。

输入一个较大的64位浮点数

将计算器中的十六进制输入进PLC中64位浮点数对应的地址中,

输入的64位浮点数超出了32位浮点数所能表示的范围,输出为0并且错误位M0.0被置位。

以上是一种实现64位浮点数转换为32位浮点数的一种PLC编程方法供大家参考。
让我们总结一下编写64位浮点数转32位浮点数用到的PLC知识


下一篇:关于I2C协议介绍
从profibusDP转ModbusTCP,一网打尽转换技巧!