s7-200 我的仪表上来的是VB204 VB205 VB206三个字节是16进制的流量,那么我怎么能够转成10进制?谢谢
问题补充:
我的仪表就是16#的,PLC当然显示16#
图片说明:
最佳答案
你所说的数制问题,都要回到计算机的存储上来。例如,数10,若按BCD码存储(通常所说的10进制存储),则需以位序列2#00010000等同于16#10存在计算机,若不申明以BCD码存储,计算机上就是16#0A。换句话说,计算机上存储的都是二进制0、1组成的位序列。这一串位序列,代表什么意思是依靠人来定义的,它有可能是浮点数、整数、还有可能是字符的ASCAI码。16#80赋值给无符号变量,这个变量的值就是+128,若将其赋值给有符号数他就是-128。
从你的附图来看:VB205=16#0A,A的出现说明你的仪表是以16进制存储,而非BCD码。
要正确理解通信过来的数据(VB204VB205VB206),必须要弄清楚仪表上的地址空间高位在前,还是低位在前。仪表与S7-200PLC通信若是Modbus RTU通信,通常是以字为单位传递数据,那你可看说明书规定的映射关系4xxxx地址,数大的代表流量的高位(小端存储),还是数小的代表高位(大端存储)。若是自由口通信,也同样要观察是大端存储还是小端存储。
若是大端存储(高位值存在低地址内存空间),你可编程:VB100=0,VB101=VB204
VB102=VB205,VB103=VB206,然后引用VD100就可以了。你用STEP7 MicroWin观察时让它显示为10进制即可。至于你让它在PLC程序中参与计算,更是不用关注数制问题,而是应该关注赋值给什么类型变量(整数,还是实数)。
若是小端存储(高位值存在高地址内存空间),你可编程:VB100=0,VB101=VB206
VB102=VB205,VB103=VB204,然后引用VD100就可以了。
对流量仪表,常常是有小数的,通信时,往往是将实际流量除以某个单位流量得到整数存储再传送。例如:2.56L/min,在仪表上可能存储的时321=16#0100,默认有个单位是0.01L/min。若是这样,上述的VD100则需要用DI_R指令转换为实数,然后用DIV_R除以100.0才能得到真正的流量大小。
提问者对于答案的评价:
谢谢你,想的很全面,并且写的很清楚,包括高低的调换
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc361303.html