30路串口接收数据,开始每一个串口已经绑定串口事件,那接收端怎么用一个Datarecived事件区分哪个串口的啊

问题描述

30路串口接收数据,开始每一个串口已经绑定串口事件,另外定义了一个类用来处理接收到的串口数据。程序启动时new了30个串口数据处理类的对象。问题:1)那接收端怎么用一个Datarecived事件区分哪个串口的啊?2)每个串口都绑定接收事件,这种情况下是不是相当于在程序开始就已经给每一个串口开辟了自己的内存数据处理空间,在开始阶段就实现了每一个串口的分流形式。因此接收时,每个口只是处理自己的,跟其他口的处理过程间无任何关系,完全独立?

解决方案

解决方案二:
在线等,希望哥哥姐姐们指点迷津
解决方案三:
Quote: 引用楼主zomyla的回复:

1)那接收端怎么用一个Datarecived事件区分哪个串口的啊?/quote]完全不知道你所谓“用一个Datarecived事件”是指什么具体意思。事件就是一个概念而已,要落实到你的事件处理程序方法上,还是要说明是一个还是多个的。你可以在你的所谓“串口数据处理类”上定义一个处理方法,例如publicclass串口数据处理方法{public串口数据处理方法(stringPort,intBaudRate,intStopBits,....){this.Port=Port,this.BaudRate=BaudRate;......}publicstringPort{get;privateset;}publicintBaudRate{get;privateset;}.......publicvoidDatarecived(objectsender,SerialDataReceivedEventArgse){.........}.....

那么,你向每一个串口“绑定串口事件处理方法”时,自然就是使用30个不同的对象实例的Datarecived方法。这个方法内部当然知道自己的环境。
解决方案四:
引用楼主zomyla的回复:

2)每个串口都绑定接收事件,这种情况下是不是相当于在程序开始就已经给每一个串口开辟了自己的内存数据处理空间,在开始阶段就实现了每一个串口的分流形式。因此接收时,每个口只是处理自己的,跟其他口的处理过程间无任何关系,完全独立?

所以面向对象地设计你的“串口数据处理类”,使得与特定(单个)串口有直接关系的操作、缓存、空间等等任何需要封装在一起的设计独立出来,然后用到程序各种地方、其它工程中,不论是操作1个串口还是20个串口都是简单地使用这个类,这就是很好的事情。
解决方案五:
所以面向对象地设计你的“串口数据处理类”,使得与特定(单个)串口有直接关系的操作、缓存、空间等等任何需要封装在一起的设计独立出来,然后用到程序各种地方、其它工程中,不论是操作1个串口还是20个串口都是简单地使用这个类,这就是很好的事情。

使得与特定(单个)串口有直接关系的操作、缓存、空间等等任何需要封装在一起的设计独立出来,,意思就是说每一个串口都有自己的操作、缓存、空间等,这样的话多串口同时处理时不是很耗内存吗?
解决方案六:
还有一个问题是,30个串口,应该有30个接收线程吧?然后接收线程里有:1)断帧数据处理线程,2)异步调用写文件线程写文件(“串口数据处理类”中包含了写文件的操作)3)解析线程这样的话,30个串口同时打开处理数据,这里面不是有上百个线程了吗?
解决方案七:
请老师继续指点
解决方案八:
接收数据的函数的sender就是各自的SerialPort对象,强制转换一下就好.
解决方案九:
引用7楼tcmakebest的回复:

接收数据的函数的sender就是各自的SerialPort对象,强制转换一下就好.

那对于这几个问题的解决方案呢?还有一个问题是,30个串口,应该有30个接收线程吧?然后接收线程里有:1)断帧数据处理线程,2)异步调用写文件线程写文件(“串口数据处理类”中包含了写文件的操作)3)解析线程这样的话,30个串口同时打开处理数据,这里面不是有上百个线程了吗?
解决方案十:
在线等,对于下面的那几个问题正在迷惑中,继续解答
解决方案十一:
不知道是不是用哪个Objectsender来判断
解决方案十二:
怎么没人结贴了呢,上面那几个问题很迷惑呢

时间: 2024-10-27 06:15:41

30路串口接收数据,开始每一个串口已经绑定串口事件,那接收端怎么用一个Datarecived事件区分哪个串口的啊的相关文章

串口通信-VC串口接收数据编程,帮忙指导下

问题描述 VC串口接收数据编程,帮忙指导下 我是VC初学者,领导让做一个简单的串口通讯接收程序.不知道怎么做.具体要求如下:希望大神帮忙指导从何入手,该怎么写,谢谢 要求:要两个标志位的数a5.b6和四个实际数()()()()还有一个是00(以后用来显示温度的)[]帧计数(目标加1,最大255然后再返回0~255)最后一个数组就是前边除下a5所有的校验和. 标志位a5.b6 [][][][] 温度00 () () 上边就是所有的要求了 解决方案 http://blog.csdn.net/vela

保存数据-MSComm控件串口接收数据存到txt中出现乱码

问题描述 MSComm控件串口接收数据存到txt中出现乱码 我在用C++做一个串口程序,用了MSComm控件,新手遇见了点问题,我用串口助手试了试我的程序,如果十六进制发送那么我接收的数据和串口助手发送的数据不一致,出现了乱码.我还想把我接收到的数据存储在txt文件中,可能是我数据类型没有转换对,txt文件里的接收数据也是乱码,不知道哪位能指点一下. void CSendcomDlg::OnComm() { // TODO: Add your control notification handl

缓存-关于串口接收数据缓冲问题

问题描述 关于串口接收数据缓冲问题 我用串口测试实时接收一个2k采样率的正弦波并显示波形,不管是我自己写的程序还是Labview 都出现了同一个问题,就是一开始波形的频率是对的,然后我进入中断一会,回来继续接收数据 感觉波形被压缩了一样,突然来了一大堆数据,过一会就会恢复正常.这是缓存区哪里的问题呢?接收缓冲,传输缓冲? 解决方案 接收缓冲吧,数据没被处理. 解决方案二: 在中断时,串口设备还在不断的发送数据: 中断结束,恢复正常时:接收缓存区有一大堆数据,这时你有两种处理方式: 1.把这些数据

qt-QT第三串口接收数据后对数据进行解析

问题描述 QT第三串口接收数据后对数据进行解析 运用第三方串口类进行接收数据后 将数据存在temp中 ,然后再对temp进行解析判断进行不同的操作,但在编译时候会报错,如何解决? 解决方案 temp=='A'改成temp==""A""

怎么用c#编程不断的从串口接收数据并显示在textbox上,新手求帮助

问题描述 怎么用c#编程不断的从串口接收数据并显示在textbox上,新手求帮助 如题,怎么用c#编程不断的从串口接收数据并显示在textbox上,新手求帮助 解决方案 用个Timer每隔一段时间去读取数据,然后用textbox的textbox.text=""就行了,如果是要逐行的话就APPText就行了,不过建议你可以用richtextbox,那个有滚动条用着爽.

vb-VB串口接收数据重复怎么办????

问题描述 VB串口接收数据重复怎么办???? Private Sub HScrollBar1_Scroll(ByVal sender As System.Object ByVal e As System.Windows.Forms.ScrollEventArgs) Handles HScrollBar1.Scroll TextBox2.Text = HScrollBar1.Value SerialPort1.Write(TextBox2.Text) ' TextBox7.Text = Seria

串口通信-android蓝牙串口接收数据

问题描述 android蓝牙串口接收数据 最近在做android手机蓝牙和单片机通信,一直被接收数据完整性这个问题困扰. 为了使一次通信的包保持完整,我就构思了发送12位的包,包头(1)+数据(8)+校验(2)+包尾(1),校验为求和校验.单片机发送数据的函数如下 void SendString(uchar *dat) //发送12位的包 包头(1)+数据(8)+校验(2)+包尾(1) { uchar i,j; uint check=0; //求和校验 SendChar(0x01); //0x0

串口接收数据调用类的方法跟直接在主程序里写方法有什么区别?求大神指教,刚用这个提问,没分了。

问题描述 串口接收数据调用类的方法跟直接在主程序里写方法有什么区别?求大神指教,刚用这个提问,没分了. 为什么我直接在主程序里写的时候没问题,调用类里的方法就获取不到数据 解决方案 要看你的代码,比如有没有用到全局变量之类的. 解决方案二: 我分步调试的时候是能拿到数据的,但是直接运行的时候就获取不到. 解决方案三: 分布调试用的时间多,调用接受类的时候数据已经过来了.直接运行数据没过来,估计是数据同步的问题

如何关闭Form2,保留Form1, 以及串口接收数据的判断

问题描述 本人菜鸟.自学C#.现在遇到两个问题,第一个问题.在form1中,有个按钮,点击之后弹出已经做好的固定的界面form2.比如说当form2打开5秒之后,需要关掉Form2.不知道该如何关闭,因为总是提示使用了未引用的对象.privatevoidbtnStartSend_Click(objectsender,EventArgse)//按下按钮{FormForm2=newForm2();//新窗口Form2.ShowDialog();//显示新窗口,可以正常显示}private5s时间到{