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

主题:【话题】求大神指点,台达PLC16进制数转浮点数不对!(20201217)

点击:4329 回复:19

求大神指点,我的台达PLC的寄存器D156是读取仪表内部数据得到的ASCll码转换成16进制得到的数据,我想把这个16进制数缩小10倍,我用FLT和DFLT指令来转浮点数后出来了的数据都不是我想要数据,求大神帮忙;谢谢!
附件 11.jpg
附件 22.jpg
最后修改:2020/12/18 9:00:52
20-12-16 15:59
你想要的数据是什么?
H2553十进制是9555,你看看D164的十进制是不是955.5。
20-12-16 16:39
看到你最后的除法指令用到K10,是不是错了
首先声明三菱用的少
20-12-16 16:58
是的,但是我想要的是D160里面的数值也是2553,请问这样处理
20-12-16 17:01
D156是16进制的H2553,仪表显示的数值255.3
20-12-16 17:05
首先要确定,仪表读的数D156=2553,是16进制还是10进制
如果是16进,那么程序没错H2553浮点后是H46154C00,F9555.000 在你提供的表上有显示
如果是10进,就要先转成bin,在浮点,再除K10,就可以得到你需要的F255.3000
我认为仪表上显示的255.3是10进制
你是不是要在组态或触摸屏显示?
如果这样没必要在PLC里做这个工作,直接在屏的软件上做
前边说到K10,是因为不熟悉台达,包括三菱,对浮点运算要不要注意进制。
欧姆龙的必须注意进制,而且必须先将常数转成浮点。
20-12-16 20:14

引用 ynylwwz 在 2020/12/16 17:05:21 发言【内容省略】

我的感觉你这个仪表应该是无协议通讯的,PLC用了RS指令,如果是这样的话PLC读回来的数据应该用HEX指令把ASCII码转成HEX并且M1161=On,M1161=On表示是8位模式,然后再进行计算。
比如仪表上的显示是255.3,PLC读取出来的ASCII码是 2 5 5 . 3,占用了5个寄存器,假设是D11-D15
用HEX指令转换后变成十六进制的 2 5 5 3,假设是D21-D24 ,“.”不用转换
然后再相乘相加,就是用D21*1000+D22*100+D23*10+D24
也就是2*1000+5*100+5*10+3=2553,再把2553转成浮点,再除以10就等于255.3。
20-12-17 07:42
“也就是2*1000+5*100+5*10+3=2553,再把2553转成浮点,再除以10就等于255.3。”
台达软件未能模拟
这个2553FLT后可能得到的还是9555.000
(参见楼主提供的图片中,D156,D160,D164=446EE000)
用三菱软件模拟过,将2553选为10进得2553.000
选16进得9555.000
附件 image.jpg
附件 image.jpg
附件 image.jpg
这个显示是不是很像楼主提供的
用欧姆龙软件模拟,2553得9555.000
2553bin后为09F9,再FLT得2553.000
附件 image.jpg
按10进运算
附件 image.jpg
按16进运算,注意D64内容=446EE000
所以我认为这个2553是BCD
20-12-17 10:16
非常感谢你的帮助,我按照你的方法试了,果然成功了!表情表情
20-12-17 11:41
谢谢你的帮助,按照你的方法试了,PLC读取回来的数据还是ASCLL码,一样需要转换的,不能直接乘!表情
20-12-17 11:44

上一页下一页

工控新闻

更多新闻资讯