日期:2014-05-17  浏览次数:20807 次

打开串口时,如何设置超时保护?
连接设备,打开设备串口,用下面的代码没有问题,,前提是操作正常的情况

但是遇到如下情况,程序就挂了,想超时保护

 1 ,设备没上电
 2, 设备上电了,但是没有连接串口
 等等...

 加个超时保护是不是就可了,,不加超时保护,其他方法还有否?

另外还有一种情况,,,就是不知道设备当前通信波特率的情况下,如何在程序中做到自适应呢?

 比如,设备通信范围是:38400,57600 或 115200

  在不知道波特率的情况下,分别用上面几个连接,并发测试命令码,能正常通信,应该就是当前匹配的波特率吧, 这个估计又牵扯到,交互数据时的超时保护了吧

 

private void openSerial()
        {
            sl.PortName(comboPortName.Text);
            sl.BaudRate(int.Parse(comboBaudrate.Text));
            sl.openSerial();
            
        }       


 public bool openSerial()
        {
            try
            {
                if(!comm.IsOpen)
                comm.Open();
                return true;
            }
            catch {
                return false;
            }
        }

------解决方案--------------------
你是不是想判断你读的那个端口设备是否正常?以下仅供参考:
1、设置一个固定端口,比如com1口。
2、每次读正式数据前先读一次设置的端口,如果返回值正常(当然这里需要自己根据需求确定哪些是正常的),则该端口连接了设备,就读该端口。如果不正常,则遍历电脑所有端口,每个端口读一次,读到正常的端口了,将设置的端口改为当前端口。
3、根据端口读数据。

其中步骤2就包含了,设备是不是准备好,是不是连接了,如果没有则读不到正确数据,那么步骤3就不进行了。