怎么实现两个串口同时接收下位机发送的bmp数据

qq_22905051 2018-01-06 10:02:21
两个指纹模组,需要同时将采集的数据通过串口传到上位机里,为什么要等一个模组数据传输完成后,采开始传输第二个模组的数据,我两个模组是同时发送的数据。定义2个接受函数
//添加接收函数
serialPort1.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived_1);
serialPort2.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived_2);
为什么必须要等第一个完成,才会触发第二个串口的接受事件??
//接收事件
private void port_DataReceived_1(object sender, SerialDataReceivedEventArgs e)
private void port_DataReceived_2(object sender, SerialDataReceivedEventArgs e)

可以实现同步传送吗?,不要一先一后,这样很浪费时间,哪位帅哥美女指导一下,不胜感激!
...全文
615 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_22905051 2018-01-11
  • 打赏
  • 举报
回复
引用 14 楼 a295281315 的回复:
因为这2个串口的接收都是在主线程执行的,传输的字节也多,当一个设备传输bmp数据时 另一个接收事件就被阻塞了。 用多线程解决 ~~~
可以说一下具体要怎么实现吗?我试了一下,写的不通,可以给个实例或者代码吗?谢谢
xinbada1985 2018-01-10
  • 打赏
  • 举报
回复
另外最好别用灰度图这样8位的小图片!因为速度太快!你根本看不出来是否同步
xinbada1985 2018-01-10
  • 打赏
  • 举报
回复
1.其实打断点是判断不出来先后的,目测代码是没有问题的,除非加锁了,你最好是打输出,看一下方法开始的时间和结束时间是否有重合,如果有就说明是同时在传输 2.因为指纹文件太小,所以传输是一瞬间可能就完成了!及时是同时上传,也可能因为网速等原因造成一个先传输完成一个后传输完成
xinbada1985 2018-01-10
  • 打赏
  • 举报
回复
多跑几遍,确保一下是一个先执行一个是后执行的
绿领巾童鞋 2018-01-10
  • 打赏
  • 举报
回复
DataReceived 本来就是一个委托,你接受收到串口的响应然后在DataReceived 里面执行的全部都是在 额外的线程里面跑的 而不是 UI线程 , “为什么必须要等第一个完成,才会触发第二个串口的接受事件??” 完完全全是你自己理解的。 “可以实现同步传送吗?,不要一先一后,这样很浪费时间” 首先 你的下位机能做到精准的同时对着两个串口发数据吗?我理解的单片机程序也是单线程一个周期做一样东西,串口数据发送也毫无意外的也是有先后顺序的,既然你的硬件已经是这样的操作,你要求功能更强的PC怎样怎样你觉得合理?而且在上位机做数据同步太简单了。
  • 打赏
  • 举报
回复
DataReceived 事件是在 I/O 子线程触发的,不是什么 UI 主线程 触发的。你设计“调试断点、日志”要仔细从这个方面考虑,从这里开始显示。
Mr Dang 2018-01-10
  • 打赏
  • 举报
回复
因为这2个串口的接收都是在主线程执行的,传输的字节也多,当一个设备传输bmp数据时 另一个接收事件就被阻塞了。 用多线程解决 ~~~
qq_22905051 2018-01-09
  • 打赏
  • 举报
回复
引用 10 楼 sp1234 的回复:
[quote=引用 7 楼 qq_22905051 的回复:]
[quote=引用 3 楼 wanghui0380 的回复:]
关键是你从何得知他们不是同时的,下断点?写日志?


不能做到完全的同时,模组检测到手指放上就会将采集的数据往上传,就算有先后时差,怎么会必须第一个传完后才开始传第二个的?[/quote]

人家的意思是,你的代码自己阻塞了自己,所以你自己始终是反反复复只说表面现象,而从来不深入到调试画面来说明。[/quote]

贴两站图
第二幅图的16代表先触发的串口,18代表后触发的串口,16的触发后,数据全部接收完成后,才第一次触发第二个串口(18)的接受事件。第一幅图是定义的接受事件,
qq_22905051 2018-01-09
  • 打赏
  • 举报
回复
引用 11 楼 sp1234 的回复:
人家问你有没有设置断点或者日志来查看 DataReceived 第一条语句触发的时机。而你仍然是反复强调标题上的话,并不深入。
打断点看的,必须要等到先触发接受事件的串口,接收完200多包数据后,也就是在触发200多次后,才会触发第二个串口的接受事件,接受第二个串口的数据
  • 打赏
  • 举报
回复
引用 7 楼 qq_22905051 的回复:
[quote=引用 3 楼 wanghui0380 的回复:] 关键是你从何得知他们不是同时的,下断点?写日志?
不能做到完全的同时,模组检测到手指放上就会将采集的数据往上传,就算有先后时差,怎么会必须第一个传完后才开始传第二个的?[/quote] 人家的意思是,你的代码自己阻塞了自己,所以你自己始终是反反复复只说表面现象,而从来不深入到调试画面来说明。
  • 打赏
  • 举报
回复
人家问你有没有设置断点或者日志来查看 DataReceived 第一条语句触发的时机。而你仍然是反复强调标题上的话,并不深入。
xuzuning 2018-01-08
  • 打赏
  • 举报
回复
两个串口接收? 那你是如何连线的?应该是各自连线至对应设备上的
正怒月神 2018-01-08
  • 打赏
  • 举报
回复
这个看起来更多的是异步传输和接收。 这和绑定事件的先后应该没关系。
wanghui0380 2018-01-08
  • 打赏
  • 举报
回复
关键是你从何得知他们不是同时的,下断点?写日志?
qq_22905051 2018-01-08
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
两个串口接收? 那你是如何连线的?应该是各自连线至对应设备上的
是的,两个设备连接到两个不同的串口
qq_22905051 2018-01-08
  • 打赏
  • 举报
回复
引用 4 楼 hanjun0612 的回复:
这个看起来更多的是异步传输和接收。 这和绑定事件的先后应该没关系。
我的两个模组,在有手指放上时就会往上传数据,为什么总是先放手指的模组串口的接受事件触发后,数据接受完成,第二个串口的接受事件才触发,虽说手指放上有时间差,但是为什么要等第一个传完,才开始第二个,不能在传第一个的时候,第二个串口的事件也触发,开始接受数据吗?
qq_22905051 2018-01-08
  • 打赏
  • 举报
回复
引用 3 楼 wanghui0380 的回复:
关键是你从何得知他们不是同时的,下断点?写日志?
不能做到完全的同时,模组检测到手指放上就会将采集的数据往上传,就算有先后时差,怎么会必须第一个传完后才开始传第二个的?
  • 打赏
  • 举报
回复
DataReceived 是在 I/O 子线程上触发的。你要条是你自己的代码,看看为什么会阻塞。
EIT王子 2018-01-07
  • 打赏
  • 举报
回复
应该是你的端口不是同时发送数据的。而且系统的消息响应也是看起来并行,其实也是串行的。没有绝对的同时,都还是时间分片的。
qq_22905051 2018-01-07
  • 打赏
  • 举报
回复
没有回复吗,顶一下

110,534

社区成员

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

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

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