手里有个台达温控器MOUBUS ASCLL,借来一个224PLC学习通讯。参照论坛里大侠们发的自由口程序,更准确的说照写了程序。
1.当SMB87=16#9C时,即使从站断电,PLC也可以正常发送数据。
2.当SMB87=16#EC时,从站不断电,PLC正常发送数据,从站正常响应。一旦从站断电,PLC就卡住了。
从站断电时,PLC拨到RUN,中断程序XMT1首次执行,VB0加1,PLC能够发出一段正确的数据,产生了一个传输完成中断9,中断程序RCV1执行一次,定时到中断程序XMT1执行第二次,但是没能发送数据。(VB0又1了,说明中断程序XMT1又执行了,但是没有发送出数据来。)每次重新拨到RUN,VB0加2,但数据只发出一条。
SMB87:接收讯息控制字节 它怎么会影响XMT发送指令?
只好用16#FC代替EC了。
不知道200smart是不是这样,有兴趣的,有实物的试验下,结果发出来。
ORGANIZATION_BLOCK 主程序:OB1
TITLE=程序注释
BEGIN
Network 1 // 网络标题
// 网络注释
LD SM0.1
MOVB 16#09, SMB30
MOVB 16#9C, SMB87
MOVB 16#3A, SMB88
MOVB 16#0A, SMB89
MOVW +200, SMW92
MOVB 80, SMB94
ENI
Network 2
LD SM0.1
ATCH INT1, 9
MOVB 150, SMB34
ATCH INT0, 10
END_ORGANIZATION_BLOCK
INTERRUPT_BLOCK XMT1:INT0
TITLE=中断程序注释
BEGIN
Network 1 // 网络标题
// 网络注释
LD SM0.0
DTCH 10
Network 2
LD SM0.0
INCB VB0
AB> VB0, 6
MOVB 1, VB0
Network 3
LDB= VB0, 1
XMT VB200, 0
Network 4
LDB= VB0, 2
XMT VB250, 0
Network 5
LDB= VB0, 3
XMT VB300, 0
Network 6
LDB= VB0, 4
XMT VB350, 0
Network 7
LDB= VB0, 5
XMT VB400, 0
Network 8
LDB= VB0, 6
XMT VB450, 0
Network 9
LDB= VB0, 1
= Q0.1
Network 10
LDB= VB0, 2
= Q0.2
Network 11
LDB= VB0, 3
= Q0.3
Network 12
LDB= VB0, 4
= Q0.4
Network 13
LDB= VB0, 5
= Q0.5
Network 14
LDB= VB0, 6
= Q0.6
END_INTERRUPT_BLOCK
INTERRUPT_BLOCK RCV1:INT1
TITLE=
BEGIN
Network 1
LD SM0.0
RCV VB2000, 0
MOVB 250, SMB34
ATCH INT0, 10
Network 2
LD SM0.0
INCB VB1
AB> VB1, 100
MOVB 0, VB1
Network 3
LD V1.0
= Q1.0
Network 4
LDN V1.0
= Q1.1
END_INTERRUPT_BLOCK