c#串口通讯优化的方法

liantongbi11 2016-11-22 01:15:37
程序与通过串口与下位机通讯过程中出现一些问题,想进行优化下,请大神给点建议

1,上位,发送的命令频率较高,需要以一定的时间对状态进行轮询(比如说150毫秒)
2,在轮询的同时,需要发送对下位机的操作命令。

基于上面的因素,偶尔会出现接收的指令不完整的问题导致应答失败。

在这种情况下,是不是需要用队列分别进行数据的收和发?
刚刚接触这方面,请大神给些这方面的参考资料或者提供些建议,感激不尽
...全文
305 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liantongbi11 2016-11-22
  • 打赏
  • 举报
回复
引用 6 楼 sp1234 的回复:
[quote=引用 3 楼 liantongbi11 的回复:] [quote=引用 1 楼 sp1234 的回复:] 什么叫做”用队列分别进行数据的收和发“?你说明你的设计。
我的想法是先定义一个请求队列Queue<Request> requests和一个应答List<byte> responses,将命令和应答分别添加到线程池, ThreadPool.QueueUserWorkItem(new WaitCallback(Send));//发送 ThreadPool.QueueUserWorkItem(new WaitCallback(Received));//接收 通过DataReceived接收数据并缓存到应答responses里面,再对数据进行分析处理 [/quote] 所谓“接收的指令不完整”,你的指令不完整,纠结那两个队列就能接收指令完整了吗? 你的两个队列跟上述问题无关。至于说什么线程、线程池,那更是与此无关。[/quote] 这只是我的一个想法,如果思路有问题,请指正
  • 打赏
  • 举报
回复
引用 3 楼 liantongbi11 的回复:
[quote=引用 1 楼 sp1234 的回复:] 什么叫做”用队列分别进行数据的收和发“?你说明你的设计。
我的想法是先定义一个请求队列Queue<Request> requests和一个应答List<byte> responses,将命令和应答分别添加到线程池, ThreadPool.QueueUserWorkItem(new WaitCallback(Send));//发送 ThreadPool.QueueUserWorkItem(new WaitCallback(Received));//接收 通过DataReceived接收数据并缓存到应答responses里面,再对数据进行分析处理 [/quote] 所谓“接收的指令不完整”,你的指令不完整,纠结那两个队列就能接收指令完整了吗? 你的两个队列跟上述问题无关。至于说什么线程、线程池,那更是与此无关。
那城 2016-11-22
  • 打赏
  • 举报
回复
协议定好,定义一个收发机制,比如说下位机收到你的指令后,给个回复,不给回复就继续发,发指令前要先关闭串口,同时串口也不能长时间占用cpu.
liantongbi11 2016-11-22
  • 打赏
  • 举报
回复
引用 2 楼 diaodiaop 的回复:
既然报错 为什么不优化你的"设备"..
优化“设备”比较麻烦,优先考虑通过程序把问题解决了
liantongbi11 2016-11-22
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
什么叫做”用队列分别进行数据的收和发“?你说明你的设计。
我的想法是先定义一个请求队列Queue<Request> requests和一个应答List<byte> responses,将命令和应答分别添加到线程池, ThreadPool.QueueUserWorkItem(new WaitCallback(Send));//发送 ThreadPool.QueueUserWorkItem(new WaitCallback(Received));//接收 通过DataReceived接收数据并缓存到应答responses里面,再对数据进行分析处理
by_封爱 版主 2016-11-22
  • 打赏
  • 举报
回复
既然报错 为什么不优化你的"设备"..
  • 打赏
  • 举报
回复
什么叫做”用队列分别进行数据的收和发“?你说明你的设计。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧