串口Modbus通信,下位机不定时的给我发送指令,上位机数据接受这,怎么用线程循环去读这个数有没有发送
貌似有个一模一样的问题也是你的把。
如果你要连续发两贴,还依然要纠结如何解析完整验证发送。个人觉着你还是直接nuget一个Nmodbus库做把。
至于你这个问题,上贴已经说了,原本就不存在有没有发送。
串口有BaseStream,有事件。你直接Stream.RaedAsync 就OK(有数据就读,没数据就等待)。你直接 用接收事件也OK(一样的,有数据他自己会用事件通知你,没数据自然没事件---------所以其实不存在你说非要有个啥线程检查人家发没发,没发没数据你read不到,没发没数据同样没事件)。
至于某些人一定告诉你有个啥缓存,有个啥线程,我只能说带偏了,那条路坑多,新人趴窝的多。还不如 事件+PipeLine。(如果你不相信NModbus,非要自己写的就事件+pipeline)
当然最后我还得说先用Nmodbus把项目做了,然后你在去研究别的方式(pipeline这种呢其实已经包含环形缓冲,异步task处理,有消息就触发,没消息就等着的所有过程,所以其实也就不存在某些人跟你说的那条路了,因为那条破山路现在已经被休整成了pipeline这种标准水泥高速路了,有高速路了用高速路,还走那条动不动掉坑里的破山路干啥)
项目上先用Nmodbus做了先。
https://www.nuget.org/packages/NModbus
https://github.com/NModbus/NModbus
Nmodbus是15年前的项目了,你可以相信他。不过么因为是15年前的项目,虽然作者也在不停维护发新版本,但是因为兼容关系,他只能在那条破山路上努力维持着。
所以呢其实现在也有人另开新项目,直接走高速路的,比如:
这样子是可以实现的,由于串口速度慢,上位机可以实现该功能而不丢数据