打开串口时,如何设置超时保护?
连接设备,打开设备串口,用下面的代码没有问题,,前提是操作正常的情况
但是遇到如下情况,程序就挂了,想超时保护
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就不进行了。