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