C#窗体应用程序中调用串口1进行扫描,将串口扫描的数据进行处理发给串口2,串口1由定时器触发,为什

C#窗体应用程序中调用串口1进行扫描,将串口扫描的数据进行处理发给串口2,串口1由定时器触发,为什么将数据发给串口2,不再进行串口1的扫描,望回复为盼。... C#窗体应用程序中调用串口1进行扫描,将串口扫描的数据进行处理发给串口2,串口1由定时器触发,为什么将数据发给串口2,不再进行串口1的扫描,望回复为盼。 展开
 我来答
dengjun9452005
推荐于2016-11-08 · TA获得超过655个赞
知道小有建树答主
回答量:144
采纳率:0%
帮助的人:185万
展开全部

没有看到你的源代码。


1,C#串口通讯,首先要确保与com1和com2的通讯正常,也就是都已经建立通讯。

2,通过定时器去接收数据不是一个合理的办法。因为c#有个SerialPort对象,是专门用来做串口通讯的,串口发送的数据不是通过你扫描获得的,而是设备不定时发送的,你需要去捕捉这个数据发送事件后 去处理这个事件才是正确方法。


参考以下代码


启动监听
private void StartLission()
{
 SerialPort SerialPort CurrentPort = new SerialPort();
                CurrentPort.ReadBufferSize = 128;
                CurrentPort.PortName = comName;  //端口号 
                CurrentPort.BaudRate = bandRate; //比特率 
                CurrentPort.Parity =parity;//奇偶校验 
                CurrentPort.StopBits = stop;//停止位 
                CurrentPort.DataBits = databit;//数据位
                CurrentPort.ReadTimeout = 1000; //读超时,即在1000内未读到数据就引起超时异常 
                //数据发送时 触发Sp_DataReceived函数
                CurrentPort.DataReceived += Sp_DataReceived;
                CurrentPort.Open();
                }
                
              获取设备的数据发送事件后的处理函数
               private static void Sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            SerialPort sp = sender as SerialPort;
            if (sp == null)
                return;
            try
            {
                byte[] readBuffer = new byte[sp.ReadBufferSize];//扩大接收数据量
                sp.Read(readBuffer, 0, readBuffer.Length);
                
                //重新构造一个com2的通讯代码,并将readBuffer数据发送到com2 
                
                最重要通讯结束后一定要记得关闭通讯。
              }
              catch{}
              }
更多追问追答
追问
串口1的打开调用了一个外部类,串口2数据写入以字节数组形式,读取亦然。问题在于需要对串口1进行扫描,扫描的数据此时应有一个暂停,开始往串口2发送,当串口1扫描到数据问题出现在扫描中断了。
追答
如果你的扫描代码没问题,那么 可能问题是你的线程阻塞造成的,,之所以 我给你谢了上述代码 是因为上述代代码不需要你去扫描端口,扫描是低效的,而通过com!接收的数据直接通过事件的方式才最合理,

你可以将 com1的扫描代码 放在一个独立的线程中。而发送数据的代码放在另一个线程中,这样线程1扫描到数据引发事件 ,将事件抛给线程2,这样一来 线程1只需要不断扫描,引发事件即可。可以是个死循环,不需要管给com2发送数据的逻辑。

而线程2 只需要被动的等待线程1中引发事件,并在事件处理中将数据转发给com2即可。两个操作互相关联又互补干扰。
查晓筠0i5
2015-03-10 · TA获得超过2752个赞
知道大有可为答主
回答量:2.1万
采纳率:1%
帮助的人:4975万
展开全部
关注这个问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式