SerialPort ,高速收发数据一段时间后,不响应DataReceived事件

.Net技术 码拜 10年前 (2015-07-11) 2399次浏览 0个评论

SerialPort ,高速收发数据一段时间后,不在响应DataReceived事件
代码如下,在高频率收发数据 几小时后,不在进入接收事件。

 public CommPort()
        {
            Com = new SerialPort();

            sftpCommandFilePath = ConfigurationManager.AppSettings["sftpCommandFilePath"];

            dal = new tsomvDAL();
        }

        /// <summary>
        /// 串口打开事件
        /// </summary>
        /// <returns></returns>
        public bool CommOpen(string port, string baudrate)
        {
            try
            {
                Com.PortName = port;
                Com.Parity = Parity.None;
                Com.BaudRate = 2400; //端口默认2400
                Com.ReceivedBytesThreshold = 1;
                Com.Open();
                Com.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived);

                return true;
            }
            catch (Exception ex)
            {
                LogHelper.LogError(string.Format("打开串口出错:{0}",ex.Message));
                return false;
            }

        }
        /// <summary>
        /// 串口接受事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Com_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
                LogHelper.LogInfo(string.Format("{0}:进入DataReceived,Closing is {1}", Com.PortName, Closing.ToString()));
         }

这是最后一次进入事件打印的日志

2014-11-24 15:25:50 Info COM7:进入DataReceived,Closing is False
2014-11-24 15:25:50 Info COM7接收长度:48
2014-11-24 15:25:50 Info COM7进入while,bufferLst长度48
2014-11-24 15:25:50 Info 接收 COM7 串口数据:1010030341030044
2014-11-24 15:25:50 Info COM7进入while,bufferLst长度40
2014-11-24 15:25:50 Info 接收 COM7 串口数据:10100303414F0090
2014-11-24 15:25:50 Info COM7进入while,bufferLst长度32
2014-11-24 15:25:50 Info 接收 COM7 串口数据:1010030341500091
2014-11-24 15:25:50 Info COM7进入while,bufferLst长度24
2014-11-24 15:25:50 Info 接收 COM7 串口数据:1010030341070048
2014-11-24 15:25:50 Info COM7进入while,bufferLst长度16
2014-11-24 15:25:50 Info 接收 COM7 串口数据:1010030341510092
2014-11-24 15:25:51 Info COM7进入while,bufferLst长度8
2014-11-24 15:25:51 Info 接收 COM7 串口数据:1010030341520093
2014-11-24 15:25:51 Info COM7:退出DataReceived

 
看看能不能捕捉到什么异常??没有显示的Close()掉SerialPort应该不会因为高速收发数据而自动Close的吧。
坐等高手解答
 
什么控件有SerialPort属性啊!
 
求解答~~~~~~
 
DataReceived事件在辅助线程引发,有没有做UI界面操作?
停止时间出现有规律还是随机?
波特位、停止位什么设置一致吗?

10分

有可能是发送端有问题呢?

建议先缩小范围:

1、你用你的上位软件发送数据,com口另一端接上 串口助手,设置自动回复 看看是否正常。
2、或者把com连接线里面的收发线交叉一下,com1出去,com2 回来 。相当于自己发送给自己,自己接受数据。

先排除其他问题

 

你既然记录了日志 ,就应该定位问题出在哪,2014-11-24 15:25:51 Info COM7:退出DataReceived
是哪里的?

 
加上RECIVED 之后清缓存试下
 
你记录的这些都没有用
正常的数据,你爱直接显示还是存数据库,都行,这样一条条记到文件里没有意义
反而是程序出错的时候,错误信息你没有记录

20分

如果你仅仅是想知道到底什么时候没有数据了
可以做个全局int变量,在DataReceived里让它++,在timer里判断几秒都不变化了,就记录一下
文件里存了那么多无用的东西,有用的反而找不到在哪里
 
谢谢大家的回答,不是串口的问题
开始我还以为是串口的问题,以为那个地方参数没设对,照着msdn的例子写了下初始化
有测试还是不行。

今天才发现是用Renci.SshNet第三方库有问题,用的一个老版本,在sftp的服务端假死的情况下,这个库connect就会一直卡住了,我每隔半个小时会连接下sftp服务器,这样开了1天,他自己开启了很多子线程,导致程序里面除了主线程别的子线程都无法执行的情况。 我去Renci.SshNet官网上下了个最新版的 就解决了这个问题

 
Renci.SshNet,这个ftp上传

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明SerialPort ,高速收发数据一段时间后,不响应DataReceived事件
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!