Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 升级软件中选择错误串口的处理_C#_Validation_Serialization_Input_Serial Port - Fatal编程技术网

C# 升级软件中选择错误串口的处理

C# 升级软件中选择错误串口的处理,c#,validation,serialization,input,serial-port,C#,Validation,Serialization,Input,Serial Port,我有固件升级程序,通过串行连接更新设备上的软件。这将发送给将执行升级的客户端。在测试中,我发现可以选择COM1,即使没有连接串行电缆,它也会打开。 有代码可以检查连接是否打开,也可以捕获异常,但由于COM1正在打开,尽管没有连接到设备,程序仍将继续 如何处理选择了错误COM端口的客户端? 将提供说明,但我觉得由应用程序处理此问题更安全 这是我的串行端口打开代码: // Create a new SerialPort object. SerialPort _serialPort;

我有固件升级程序,通过串行连接更新设备上的软件。这将发送给将执行升级的客户端。在测试中,我发现可以选择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);

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

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


希望这能有所帮助。

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

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


希望这能有所帮助。

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