我和一个电子称做串口485的自由口通讯, 通讯上了,。 接收的数字,在PLC状态表那监视,用ASCII码监控的数据和电子称上显示的一模一样。然而这对我没有什么用。我需要换成10进制数才有用处。。。 我初步转换过程
1。把有效数据从VB转换成VW,然后再减去16#30 ,就得到了 10进制数据而且和表上显示的ASCII数值是一样的阿拉伯数。 (这上规律我是无意中发现的,ASCII的“1"等于”16#31“ 如果我减去16#30刚好得到我想要的10#1) 不知我想的是不是对的。
2.把换好后的10进制数,乘以各自的倍数后再相加,再除以小数点的倍数。。
我的问题是, 小数点”.' (16#2E)这个点出现在位置不一样,程序 中不好做乘法再相加怎么办。
问题补充:
我目前是这样做的,把接收缓冲区的数据区每个字节的数据单独处理。 1. 比如VB205中ACSII“1”=16#31 通过B-I转换成字VW305
2.VW305-16#30继续放入VW305 再转换成VD405
3.陆续把VB205到VB209各数据字节一一相同方法处理。
4.用比较的方法,看VB205和VB209哪个字节等于16#2E(ACS码的小数点是16#2E)。
5.查找到了小数点的具体位置后,调用对应用的(事先程序写好的工式,假如VB206这个字节是小数点,我就调用VB205处理后的数据*1000加VB207处理好的数据*100加VB208处理后的数据*10加VB209处理后的数据*1的总和除以1000.
这样做对吗? 菜鸟,见谅
图片说明:
最佳答案
不是你这样想的。
这个有现成的指令的,调用S_I指令处理的
这个指令用起来有一些规则。我明天再说明吧。
补充问题回复:
你自己处理很可能犯错,因为数据是随机性的,很多数据你也无法想象,这个本身就是有对应的处理指令应用,你熟悉一下指令就可以了。
提问者对于答案的评价:
谢谢你的回答。
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc367308.html