登录
首页 PLC论坛 PLC论坛
回帖 发帖
正文

主题:我有一个台达ES主机要与仪表通讯,可是仪表读取来的是浮点数格式,如何转换呀

点击:8202 回复:15

实例:读取设备地址为01的仪表的主测量值。该仪表当前主测量值为+123.4(16进制42F6CCCD)。问题补充:
我就是要弄清如何把16进制的ASCII码42F6CCCD这样转成10进制数,关键他是个浮点数,在PLC中如何转换?
Modbus协议返回的测量值(data)是一个32位的浮点数,该浮点数采用IEEE-754标准格式。我用的是台达的RS指令,小弟在谢谢各位了
发送
ASCII
ASCII码
:010400000002F9(CRLF)
十六进制
3A 30 31 30 34 30 30 30 30 30 30 30 32 46 39 0D 0A
应答
ASCII
ASCII码
:01040442F6CCCD26(CRLF)
十六进制
3A 30 31 30 34 30 34 34 32 46 36 43 43 43 44 32 36 0D 0A
12-10-22 08:18
请用指令:API 118(二进制浮点数转十进制浮点数);可以达到你的目的。
12-10-22 10:32
关键仪表返回来的数据是16进制的ASCII码42F6CCCD,我该如何转换成二进制浮点数呀
12-10-22 10:56
IEEE754标准的一个规格化 32位浮点数x的真值可表示为
x=(-1)^S*(1.M)*2^(E-127) e=E-127
31   30                   23                       0
|S |            E      |              M    |
[例1]若浮点数x的754标准存储格式为(41360000)16,求其浮点数的十进制数值。
解:将16进制展开后,可得二进制数格式为
0     100,0001,0       011,0110,0000,0000,0000,0000
S             E                                            M
指数e=100,0001,0-01111111=00000011=(3)10
包含隐藏位1的尾数1.M=1.011,0110,0000,0000,0000,0000
于是有 x=(-1)^0*(1.M)*2^(E-127)
               =+(1.011011)2*2^3
      =(11.375)10
12-10-22 10:59
API 118指令使用说明,和5.3节上有详细的运用方法,你看过了吗?
12-10-22 11:43

引用 fdd110fdd 在 2012/10/22 10:56:38 发言【内容省略】

用指令API 83 ASCII转为HEX指令,可以实现。
12-10-22 11:55
附件
附件
谢谢你了,再问你个问题,如何在PLC中让他显示小数点的数呀
12-10-22 13:45
我先直接写了个程序模拟了一下,123.4 十进制浮点数 D40=1233 D41=-1 我想问一下,如何显示小数点后的数呀。我直接除,没有小数点后面的数字呀
12-10-22 13:47
用指令API 23 BIN除法
D40 BIN 10^ABS(D41)
结果存于D0
则:小数点后的数在D1里面。
12-10-22 16:34
非常谢谢你的回复,如果D41=1   D41=2 D41=3 D41=-2 D41=-3 有专门换算10的D41方的指令吗
12-10-22 21:53

上一页下一页

工控新闻

更多新闻资讯