本帖最后由 hwpga 于 2018-12-29 12:44 编辑
我用单主单从的轮询来给你讲讲
一主多从,假设有3个从机地址分别为,01,02
主机超时20MS,带3次重发机制
主机发送第一帧数据地址号为01
正常下01号从机接收到数据解析,在20MS内解析上报给主机,则ERROR1=0;
非正常下01号从机没上报给主机,主机在超时20MS后,没接收到数据,则ERROR1++
主机依次发送第二帧数据地址号为02
正常下02号从机接收到数据解析,在20MS内解析上报给主机,则ERROR2=0;
非正常下02号从机没上报给主机,主机在超时20MS后,没接收到数据,则ERROR2++;
主机依次发送第三帧数据地址号为01
正常下01号从机接收到数据解析,在20MS内解析上报给主机,则ERROR1=0;
非正常下01号从机没上报给主机,主机在超时20MS后,没接收到数据,则ERROR1++;
主机依次发送第四帧数据地址号为02
正常下02号从机接收到数据解析,在20MS内解析上报给主机,则ERROR2=0;
非正常下02号从机没上报给主机,主机在超时20MS后,没接收到数据,则ERROR2++;
当EEROR1或ERROR2>=3次时,主机就知道从机故障了,主机还是不停的轮询发送地址1和2,等待从机上线
单主单从也一样
从机的任务只是在有接收到帧数据的情况下,解析上报数据给主机
主机如果在超时20MS后没接收到返回数据,就要重新发送帧数据给从机
从机的串口程序我习惯会在串口的中断里直接用状态机处理掉,接一个处理一个
如果你能保证串口程序在主函数里在主机规定的时间20MS内处理并且上报,那么你可以放主程序
你的从机如果是20MS超时,你的主机起码得是从机的1.5-2倍超时时间
如果是上位机->主机->从机这种可以不用ERROR,无论有无数据都要上报给上位机
我会用无效的数据类型帧+出错地址代替
|