上面说的只是下位机能获取到异常 更完整的是双向的通讯。比如(还是比如哈) 上位机每隔一段时间发送一个心跳给下位机,下位机接收到以后除了自己内部进行时钟调整以外,还要给上位机一个反馈信息。如果上位机给了心跳指令,隔一段时间内没有收到下位机的反馈(反馈超时)就可以认为是网络或者下位机完蛋了,发起警报提醒人来处理。 结合上面就实现了,上位机完蛋了下位机收不到心跳会停机,下位机完蛋了上位机收不到回报会报警 如果仅仅是网络断了,那么下位机收不到心跳会停机同时上位机收不到回报会报警。
[quote=引用 2 楼 脆皮大雪糕 的回复:] 通讯协议里增加一个心跳协议。 上位机每隔一段时间,比如10秒向下位机发一个心跳消息。 下位机每隔一段时间(比如一秒)将一个寄存器减1,只要收到心跳消息或者其他命令,这个寄存器就设置为一个值(比如30)。当这个寄存器被减到0电机停止。 这样,不管是你的程序进程异常被杀,还是上位机异常关机,或者网络断掉,最多30秒,最少20秒后电机就会停
通讯协议里增加一个心跳协议。 上位机每隔一段时间,比如10秒向下位机发一个心跳消息。 下位机每隔一段时间(比如一秒)将一个寄存器减1,只要收到心跳消息或者其他命令,这个寄存器就设置为一个值(比如30)。当这个寄存器被减到0电机停止。 这样,不管是你的程序进程异常被杀,还是上位机异常关机,或者网络断掉,最多30秒,最少20秒后电机就会停
在“断电关机”时,各进程都不能被执行了,它如何去“发指令”? 在“网络断开”时,网络已经“不通”了,你又如何能通过网络传递数据? 楼主,难道你不觉得你的“逻辑”有问题吗! 我觉得有个变通方式,就是“心跳检测”(这频率就看你允许它们“失联”多久了), 当心跳检测“无响应”时,下位机就“自己停机”吧。
7,759
社区成员
197,606
社区内容
加载中
试试用AI创作助手写篇文章吧