西门子200SMART 十六进制怎么转换为实数

问题是这样的:
使用串口通讯从传感器读取回来的实时浓度。存放在VB100. VB101 VB102 内。
例如实时浓度为500 则VB100=16#00 ;VB101=16#05;VB103=16#00
我怎么把这三个VB里的实时浓度变成一个实数呢?

问题补充:
图片是我接收到的报文。
报文中的VB112  VB113 显示的是传感器的实时数据。如图就是实数52.
我现在尝试了用S_R的指令 但是报错这又是为什么呢。
谢谢大神们指教。

图片说明:

西门子200SMART 十六进制怎么转换为实数   

最佳答案

原始数据格式是BCD,不是十六进制。
原始数据的VB100是最低字节. VB101是中间字节 VB102高字节,最高字节没有使用。
根据字节地址重新排列,以适应S7-200SMART,最高字节写0.
使用的指令:字节交换指令SWAP,BCD转换成整数指令BCD_I,双整数转换成实数指令DI_R.

提问者对于答案的评价:
问题已经解决了!
我在报文中用到的是 VB112 和VB113  所以占用的V就是W112
直接把VW112的数值用BCD_I 就得出了实际数据。
困扰了一天。
我相信别的方法应该还有很多。但这应该是最快的一种了/

最佳答案作者回复:
你最后的解决方法简单,但是只是转换成了整数,严格来说并没有完成你的“转换为实数”。

对问题补充的回复:
原始数据是BCD码,你也没有将它转换成为字符串(没有必要),使用字符串转换浮点数指令是用错了。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc285894.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年10月30日 下午11:16
下一篇 2020年10月30日 下午11:16

相关推荐