【问题标题】:Handling choosing the wrong serial port in upgrade software升级软件选错串口的处理
【发布时间】:2018-02-09 18:31:31
【问题描述】:

我有固件升级程序,可通过串行连接更新设备上的软件。这将发送给将执行升级的客户端。在测试中,我发现COM1可以选择,即使没有连接串口线也会打开。 有代码可以检查连接是否打开,也可以捕获异常,但是由于 COM1 正在打开,程序只是继续,尽管没有连接到设备。

如何处理客户端选择错误的 COM 端口?

会提供说明,但让应用处理此问题会让我感觉更安全。

这是我的串口打开代码:

// Create a new SerialPort object.
        SerialPort _serialPort;
        _serialPort = new SerialPort(comPort, 115200, Parity.Even, 8, StopBits.One);

        // for state machine
        bool _continue = true;

        do
        {
            try
            {
                _serialPort.Open();

                if (_serialPort.IsOpen)
                {
                    Console.WriteLine("");
                    Console.WriteLine("Serial Port is Open");
                    Console.WriteLine("");
                }
                else
                {
                    MessageBox.Show("Serial Port is not open. Choose another port.");
                }
            }
            catch (UnauthorizedAccessException ex)
            {
                MessageBox.Show(ex.Message);
            }
            catch (ArgumentOutOfRangeException ex)
            {
                MessageBox.Show(ex.Message);
            }
            catch (ArgumentException ex)
            {
                MessageBox.Show(ex.Message);
            }
            catch (IOException ex)
            {
                MessageBox.Show(ex.Message);
            }
            catch (InvalidOperationException ex)
            {
                MessageBox.Show(ex.Message);
            }

        } while (!_serialPort.IsOpen);

【问题讨论】:

  • 不要循环,你会没事的,只要尝试打开端口,如果它抛出异常通知用户并让他选择另一个。
  • 另外,我想你有某种形式的协议和某种形式的握手,所以你可以设置一个超时,如果设备在 X 时间内没有响应关闭端口并通知用户。
  • IsOpen 测试永远不会失败,您在此之前调用了 Open。您没有对此进行测试,它根本行不通。串行端口太粗糙,无法进行可靠的“已连接”测试。 DsrHolding 属性可以提供帮助,但不能保证。确保有一个选项菜单允许用户选择正确的端口号。

标签: c# validation serialization input serial-port


【解决方案1】:

在 2000 年代中期,我在一家为 GPS 设备编程的公司工作。我们通过 USB 到串行通信对其进行了编程,因为我们必须一次对大量设备进行编程。设备本身具有发送请求/响应类型消息的方法,因此我们可以看到哪些端口连接到设备。我会看看你正在编程的设备,看看它是否有这个概念。如果是这样,您可以迭代机器上的任何串行端口,以告知用户哪些设备上有设备。

如果用户可以使用 USB 转串口设备,那就有点棘手了,因为 USB 设备在每次启动时都不会以相同的顺序发现。我们的解决方案是检查连接到 USB 端口的设备,以寻找 USB 转串行设备。这有点粗糙,因为您检查设备信息以确定它是 USB 转串口,然后迭代串口。我们使用了多个连接到 USB 的 8 端口设备,后来是 16 端口设备。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 2013-01-08
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多