程序如下:
LD SM0.1
MOVB 2, SMB30 // PPI主站模式
FILL +0, VW100, 10 // 清空接收缓冲区和发送缓冲区
LD V100.7 // 若网络读操作完成
MOVB VB107, QB0 // 将读取的3号站的IB0送给QB0
LDN SM0.1
AN V100.6 // 若NETR未被激活
AN V100.5 // 且没有错误
MOVB 3, VB101 // 送远程站的站地址
MOVD &IB0, VD102 // 送远程站的数据区指针值IB0
MOVB 1, VB106 // 送要读取的数据字节数
NETR VB100, 0 // 从端口0读3号站的IB0,缓冲区的起始地址为VB100
LDN SM0.1
AN V110.6 // 若NETW未被激活
AN V110.5 // 且没有错误
MOVB 3, NETW2_Status // 送远程站的站地址
MOVD &QB0, VD112 // 送远程站的数据区指针值QB0
MOVB 1, VB116 // 送要写入的数据字节数
MOVB IB0, VB117 // 将本机的IB0的值写入发送数据缓冲区的数据区
NETW VB110, 0 // 从端口0写3号站的QB0,缓冲区的起始地址为VB110
程序正确,但是当从站因某原因死机,而后恢复正常(从站),这时主站只能从从站读数据,而主站不能向从站写数据,因为V110.5置位报故障了即NETW指令无法执行,主站重启后才能恢复正常通讯。(当主站死机而后恢复正常时,通讯也马上恢复正常)
感觉这样不太好,请问如果在从站恢复后,主从站之间能马上重建通讯该怎么改程序
程序修改:
TITLE=程序注释
Network 1
// 网络注释
LD SM0.1
MOVB 2, SMB30 // PPI主站模式
FILL +0, VW100, 10 // 清空接收缓冲区和发送缓冲区
Network 2
LD V100.7 // 若网络读操作完成
MOVB VB107, QB0 // 将读取的3号站的IB0送给QB0
Network 3
LDN SM0.1
AN V100.6 // 若NETR未被激活
AN V100.5 // 且没有错误
MOVB 3, VB101 // 送远程站的站地址
MOVD &IB0, VD102 // 送远程站的数据区指针值IB0
MOVB 1, VB106 // 送要读取的数据字节数
NETR VB100, 0 // 从端口0读3号站的IB0,缓冲区的起始地址为VB100
Network 4
LDN SM0.1
A V100.7 // 若NETW未被激活
MOVB 3, VB111 // 且没有错误
// 送远程站的站地址
MOVD &QB0, VD112 // 送远程站的数据区指针值QB0
MOVB 1, VB116 // 送要写入的数据字节数
MOVB IB0, VB117 // 将本机的IB0的值写入发送数据缓冲区的数据区
NETW VB110, 0 // 从端口0写3号站的QB0,缓冲区的起始地址为VB110