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

主题:求助一段计算算法

点击:400 回复:8

附件 1723777707559.jpg
如图
是一台电阻仪的通讯数据,提取的是ASCII码的十六进制数据,通讯方式是RS232,结果值是当前电阻
PLC是信捷的XD5-48T-E,支持C函数
24-08-16 11:14
先用HEX指令把对应数字的寄存器转换成数字,然后乘以相应倍数后再加在一起
正负的判断,负号的十进制是45,可以用比较指令,如果D600等于45,就用0减去
如果有小数点的,可以把相加的结果转换成浮点后再除以倍率
比如12.345,先把12345转成单个数字,然后1*10000+2*1000+3*100+4*10+5=12345
转成浮点后再除以1000,就是12.345了
如果需要更详细的解答,请上传通讯协议,或者告知实际测量的数值与PLC监控到得ASCII数据(就是你截图的内容)
附件 微信截图_20240816120237.jpg
24-08-16 12:07
D602处的小数点是不变的,主要问题在于2个正负和10的次方,不考虑10的﹣次方的话我写了,C函数我也是初学所以写的比较烂
附件 1723783199164.jpg
附件 1723783243798.jpg
最后修改:2024/8/16 12:42:50
24-08-16 12:38
附件:
[本地下载]
至于具体的协议是
附件 1723783671443.jpg
最后修改:2024/8/16 12:54:47
24-08-16 12:49
提到函数,我就靠边了
不知道用死办法行不行,先把D601-D608整理出来成小数
然后再算次方那里,比如次方那里是3,你就乘以1000,如果是-2就除以100
最后再根据D600判断整个数据的正负
我只鞥想出这个办法了,不知行不行
期待高手解答
24-08-16 15:17
感谢大佬,我回来教作业了。
附件 1.jpg
附件 2.jpg
附件 3.jpg
附件 4.jpg
24-08-17 13:26

附件 微信图片_20240817150800.jpg
最后修改:2024/8/17 20:07:08
24-08-17 15:06
这些是16进制的数据,每位除了0至9以外,还有A至F
你的程序直接减H30还原的数据会不会出错?
24-08-18 18:39
这段程序只是为了处理提取电阻通讯后的参数,我只针对数字位进行提取的16进制转换成10进制,用肯定没问题啊,但是通用肯定不行。
24-08-20 10:25

工控新闻

更多新闻资讯