我用MODBUS主站指令库来实现PLC与DSP的通信.我按照西门子的例程序编写了我的通信程序,即先读从站的数据,再往从站写数据,所有的MBUS_MSG指令都是用前一个的完成位作为下一个的触发位.我把这个通信模块作为一个子程序,在主程序中用了一个接通延时定时器来定时,每隔0.5S来调用一次通信子程序.在调试的过程中,发现其实不是按照我想要的定时来调用通信子程序的,而且通信的时间间隔似乎也不固定.我不知道是我的定时器用的不对,还是我调用库的时候出了问题.
程序如下:
主程序:
LD SM0.1
R M2.0, 8
R M4.0, 8
R M0.0, 2
LDN M14.0
AN T38
TON T37, 5
LD T37
TON T38, 2
CALL SBR_0:SBR0
子程序:
LD M0.0
EU
S M0.1, 1
LD SM0.0
= L60.0
LD SM0.0
= L63.7
LD L60.0
CALL MBUS_CTRL:SBR1, L63.7, 9600, 0, 1000, M0.0, MB1
LD M0.1
O M2.5
= L60.0
LD M0.1
EU
LD M2.5
EU
OLD
= L63.7
LD L60.0
CALL MBUS_MSG:SBR2, L63.7, 1, 0, 40002, 16, &VB600, M2.1, MB3
LD M2.1
R M0.1, 1
R M2.5, 1
LD M2.1
= L60.0
LD M2.1
EU
= L63.7
LD L60.0
CALL MBUS_MSG:SBR2, L63.7, 1, 0, 40003, 16, &VB632, M2.2, MB5
LD M2.2
R M2.1, 1
LD M2.2
= L60.0
LD M2.2
EU
= L63.7
LD L60.0
CALL MBUS_MSG:SBR2, L63.7, 1, 0, 40004, 16, &VB664, M2.3, MB6
LD M2.3
R M2.2, 1
LD M2.3
= L60.0
LD M2.3
EU
= L63.7
LD L60.0
CALL MBUS_MSG:SBR2, L63.7, 1, 0, 40005, 16, &VB696, M2.4, MB7
LD M2.4
R M2.3, 1
LD M2.4
= L60.0
LD M2.4
EU
= L63.7
LD L60.0
CALL MBUS_MSG:SBR2, L63.7, 1, 1, 40017, 1, &VB52, M2.5, MB8
LD M2.5
R M2.4, 1