如何读取通过modebus传的V0.0~V0.7

PLC通过modebus传的数据是V0.0~V0.7的开关量,modbus地址是40001,如何将各开关量分离出来?

程序如下,如何读取V0.7~V0.7?M0.0~M0.7?MW12?


Network 1 
LD     SM0.1
O      I0.3
CALL   SBR1, 1, VB10, 9600, 0, 0, 128, 32, 1000, &VB0, V110.1, VB101
Network 2 
LD     SM0.0
CALL   SBR2, V110.0, VB100
Network 3 
LD     I0.1
=      V0.0
=      Q0.1
Network 4 
LD     I0.2
=      M0.2
=      Q0.2
=      V0.2
Network 5 
LD     SM0.0
MOVR   33.33, VD4
Network 6 
LD     SM0.0
MOVW   55, VW8
Network 7 
LD     SM0.0
MOVB   2, VB10
Network 8 
LD     SM0.0
MOVW   12, MW12

问题补充:
我用modscan测得V0.0~V0.7为40001,但是一个16进制的数值,如何得出Bool的开关量?
MW2和M0.2能读取吗?如何读取?

最佳答案

1V区这样计算的 

从站对应的V区地址为:2*(Addr-40001)+Holdstart.。若这里的Addr=40100,而从站中的Holdstart=&VB0,则从站中对应的地址为2*(40100-40001)+&VB0=VB198
2注:写从站实际Q值时,Count值=1或8n(n=1、2、3…….) 当Count为1时,Addr可以为任何离散输出,
当Count为8n时,Addr=8m+1(m=0、1、2…..)
31001 .. 10128 = 数字量输入 I0.0 .. Q15.7
30001 .. 30092 = 模拟量输入 AIW0 .. AIW62
40001 .. 49999 = 保持寄存器 2 Count 位或字的个数 (0xxxx, 1xxxx) / words (3xxxx, 4xxxx)


问题补充
40001读出来传送到某个储存器如MW0
把MW0分解MB0 MB1再分解
M0.0  到M0.7就是对应的V
M读取也是一样,整体读,然后对应分解。

提问者对于答案的评价:
谢谢回答,但
40001读出来传送到某个储存器如MW0
把MW0分解MB0 MB1再分解
M0.0  到M0.7就是对应的V
M读取也是一样,整体读,然后对应分解
不知实际该如何做?

专家置评

已阅,最佳答案正确。

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年6月3日
下一篇 2017年6月3日

相关推荐