您现在所在的是:

PLC论坛

回帖:15个,阅读:8056 [上一页] [1] [2] [下一页]
1864
fdd110fdd
文章数:170
年度积分:50
历史总积分:1864
注册时间:2006/12/29
发站内信
西门子PLC体验(二)
发表于:2012/10/22 8:18:04
#0楼
实例:读取设备地址为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
1476
shengpulin
文章数:117
年度积分:50
历史总积分:1476
注册时间:2008/2/29
发站内信
IdeaBox体验一等奖
发表于:2012/10/22 10:32:16
#1楼
请用指令:API 118(二进制浮点数转十进制浮点数);可以达到你的目的。
1864
fdd110fdd
文章数:170
年度积分:50
历史总积分:1864
注册时间:2006/12/29
发站内信
西门子PLC体验(二)
发表于:2012/10/22 10:56:38
#2楼
关键仪表返回来的数据是16进制的ASCII码42F6CCCD,我该如何转换成二进制浮点数呀
1864
fdd110fdd
文章数:170
年度积分:50
历史总积分:1864
注册时间:2006/12/29
发站内信
西门子PLC体验(二)
发表于:2012/10/22 10:59:01
#3楼
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
1476
shengpulin
文章数:117
年度积分:50
历史总积分:1476
注册时间:2008/2/29
发站内信
IdeaBox体验一等奖
发表于:2012/10/22 11:43:15
#4楼
API 118指令使用说明,和5.3节上有详细的运用方法,你看过了吗?
1476
shengpulin
文章数:117
年度积分:50
历史总积分:1476
注册时间:2008/2/29
发站内信
IdeaBox体验一等奖
发表于:2012/10/22 11:55:20
#5楼
以下是引用fdd110fdd2012/10/22 10:56:38的发言:
关键仪表返回来的数据是16进制的ASCII码42F6CCCD,我该如何转换成二进制浮点数呀

用指令API 83 ASCII转为HEX指令,可以实现。
1864
fdd110fdd
文章数:170
年度积分:50
历史总积分:1864
注册时间:2006/12/29
发站内信
西门子PLC体验(二)
发表于:2012/10/22 13:45:27
#6楼
附件
附件
谢谢你了,再问你个问题,如何在PLC中让他显示小数点的数呀
1864
fdd110fdd
文章数:170
年度积分:50
历史总积分:1864
注册时间:2006/12/29
发站内信
西门子PLC体验(二)
发表于:2012/10/22 13:47:58
#7楼
我先直接写了个程序模拟了一下,123.4 十进制浮点数 D40=1233 D41=-1 我想问一下,如何显示小数点后的数呀。我直接除,没有小数点后面的数字呀
1476
shengpulin
文章数:117
年度积分:50
历史总积分:1476
注册时间:2008/2/29
发站内信
IdeaBox体验一等奖
发表于:2012/10/22 16:34:17
#8楼
用指令API 23 BIN除法
D40 BIN 10^ABS(D41)
结果存于D0
则:小数点后的数在D1里面。
1864
fdd110fdd
文章数:170
年度积分:50
历史总积分:1864
注册时间:2006/12/29
发站内信
西门子PLC体验(二)
发表于:2012/10/22 21:53:43
#9楼
非常谢谢你的回复,如果D41=1   D41=2 D41=3 D41=-2 D41=-3 有专门换算10的D41方的指令吗

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2025 Gkong.com, All Rights Reserved

62.4004