一、需求
在项目中遇到Smart S7-200PLC读取某厂家的涡街流量计的数据,通过ModbudsRTU协议得知,接收的流量计数据为:
32单精度浮点数SINGLE格式为IEEE754,折合4字节,排列顺序为3-4-1-2
因此PLC无法直接对数据字节的对调处理,求得流量计浮点数数据,而需要对接收的4字节数据进行解析处理,才能求得32位单精度浮点数。
二、IEEE754浮点数的表示方法
![](https://i-blog.csdnimg.cn/blog_migrate/b3e6714acb2f9c8fba7f75a9b3302b24.png)
上述计算公式也可写为:
,其中S为最高位第31位,E为30-23位,M为22-0位;
在程序中特别需要注意的是要判断E是否大于127,根据比较结果分别计算。
三、PLC程序
根据上述公式,编写例子程序如下:
![](https://i-blog.csdnimg.cn/blog_migrate/b5dca5c47c3cac5d91e315e30120a34d.png)
将485通讯的ModbusRTU协议读取的数据0x38 0x1D 0x42 0x26放到VD2000寄存器中,再进行高低位互换,由于modbus发送的数据是先低位、后高位,而PLC数据在寄存器中存放是先高位,后低位,所以进行字节的互换,保证PLC寄存器中存放的顺序就先是高位数据,后是低位数据。
![](https://i-blog.csdnimg.cn/blog_migrate/caf8ce34a0ef1ebe0d098b53b9be9288.png)
按照上述公式计算,特别注意判断E是否大于等于127,根据比较结果分别计算。
![](https://i-blog.csdnimg.cn/blog_migrate/2c9280ea4e38775e645e55c2a03c0f65.png)
四、结果验证
1)验证0x4226381D=41.5548
![](https://i-blog.csdnimg.cn/blog_migrate/4a1cd61a506e621280b25fcc89796c9f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/de3077949b3de1aed9628eb13c3acdaa.png)
2)验证0x3ED89375=0.423
![](https://i-blog.csdnimg.cn/blog_migrate/e5dc0e79fbced2cfd0bf5b1ef465ceeb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3dc62621fcfc0c0c435e92239de67ceb.png)
通过PLC在线监视程序,运行结果与转换工具软件计算结果完全一致。