请教各位高手:
我需要和一个自制的板子做通讯,我plc做主,plc发数据过去,板子自动回相应数据,协议如下:无校验,8位数据位,9600波特率;plc阀帧头0XFE,即16进制FE,后面为五个字节数据,在后面是一个字节的校验,校验为五个字节的和取反;板子回帧头0XFE,即16进制FE,后面跟65个字节的数据,在后面是一个字节的校验(为前面65个字节的和取反),plc发数据过去,板子才会回数据,我是这样考虑的:我plc为主,plc上电允许时间中断1,发送中断,接收中断,那么上电后,时间中断1到达后执行时间中断1,(时间中断1中,分离时间中断1,发送数据),发送中断中允许时间中断0,(在这我这样想:避免发送后立即接收出现问题,因此发送后调用时间中断0),时间中断0中进行分离时间中断0,并接收,在接收中断中再次调用时间中断1(在这我想避免接收完立即发送出现问题),在主程序中如果出现接收超时SM86.2置位则调用时间中断1,如下:
main
LD 上电脉冲:SM0.1
MOVB 9, 端口0寄存器:SMB30
MOVB 30, SMB34
MOVB 30, SMB35
ATCH 接收完成中断:INT3, 23
ATCH 发送完成中断:INT1, 9
ATCH 定时中断1:INT2, 11
ENI
LD SM0.0
MOVB 7, 发送缓冲区:VB100
MOVB 16#FE, 接收起始字符:SMB88
ITB 屏设桥地址:VW500, 桥地址:VB102
MOVB 16#FE, 帧头:VB101
LD SM0.0
BTI 桥地址:VB102, 校验和一:VW400
BTI 零至七号站是否清零:VB103, 校验和二:VW402
BTI 八至十五号站是否清零:VB104, 校验和三:VW404
BTI 十六至二三号站是否清零:VB105, 校验和四:VW406
BTI 二四至三一号站是否清零:VB106, 校验和五:VW408
LD SM0.0
MOVW 校验和一:VW400, 校验和计算一:VW410
+I 校验和二:VW402, 校验和计算一:VW410
MOVW 校验和计算一:VW410, 校验和计算二:VW412
+I 校验和三:VW404, 校验和计算二:VW412
MOVW 校验和计算二:VW412, 校验和计算三:VW414
+I 校验和四:VW406, 校验和计算三:VW414
MOVW 校验和计算三:VW414, 校验和计算四:VW416
+I 校验和五:VW408, 校验和计算四:VW416
MOVW 校验和计算四:VW416, 校验和取反:VW418
INVW 校验和取反:VW418
MOVB VB419, 校验字节:VB107
LD SM86.2
EU
ATCH 定时中断1:INT2, 11
LD SM0.0
END
定时中断0:int0
LD SM0.0
S Q0.0, 1
DTCH 10
MOVB 2#10010100, 允许接收:SMB87
MOVW 5, SMW90
MOVW 50, SMW92
MOVB 67, SMB94
RCV 接收缓冲区:VB200, 0
发送中断:int1
LD SM0.0
ATCH 定时中断0:INT0, 10
定时中断1:int2
LD SM0.0
DTCH 11
XMT 发送缓冲区:VB100, 0
接收中断:int3
LD SM0.0
S Q0.3, 1
MOVB 0, 允许接收:SMB87
RCV 接收缓冲区:VB200, 0
LD SM0.0
ATCH 定时中断1:INT2, 11
这个中断中我做了两个指示灯,q0.0和q0.3;q0.0灯能亮,表明程序执行了发送,可是Q0.3并没有亮,表明接收不成功,而且板子上关于发送和接收两个指示灯,只有接收的灯闪了一下,表明plc确实发送了,即使接收不成功,按照我的想法应该不停的发送才是,可是并没有,我不知道问题出在哪?是不是我对于SMB86\SMB87理解上有问题,要实现这个功能我应该怎么改进?
请各位给予诚恳的解答