主程序
设置16#0A为结束字符,开启空闲线超时时间为5ms,最大接收100个字符;连接P0口消息完成接收中断事件与发送完成中断事件,分别转去执行中断0与中断2;开中断。
中程0
P0口接收消息完成时,跳入中断0中去执行:20为SMB86中的第5位为1,表示完成接收的消息中,含有结束字符16#0A。设置循环定时中断0时间间隔10ms,将定时中断0与中断程序1关联。如果没接收到结束字符,则一直接收下去。
中断1
接收到结束字符16#0A后,每隔10ms执行一次定时中断分离,并每10ms发送一个字符。为什么每隔10ms执行一次中断分离?
中断2
P0口发送完成时,跳入中断2:执行读消息指令
请教:整个程序是用自由口干什么呢?中断名,即然是用自由口通讯,每隔10ms发送一次数据是必要的。但为什么设置成接收到结束字符后,每隔10ms中断分离一次?是接到结束字符后,等10ms并发送出去后,再等从机响应消息么?
图片说明:
最佳答案
如果没理解错的话,SMB86==20 应该是SMB86==16#20 SMB86为消息接收状态字节
SM86.5:接收到指定的结束字符时,该位置1,否则为0;如果其他位是0,此时SMB86刚好是16#20。
程序流程大致如下:
1,上电运行,指定结束符,空闲检测时间,接收字符长度,
接收完成中断--INT0,发送完成中断----INT2
启动接收 接收信息存放到VB100
2,接收完成,如果收到接收符,启动定时中断 定时时间为10ms,否则保持接收状态
3,定时中断到,将VB100的消息串 发送出去,
4,发送完成,启动接收 接收信息存放到VB100
提问者对于答案的评价:
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc347363.html