代码之家  ›  专栏  ›  技术社区  ›  Maurizio Reginelli

C应用程序中的serialport问题

  •  2
  • Maurizio Reginelli  · 技术社区  · 15 年前

    我用C做了一个应用程序,它使用以下方法将11字节的数据发送到串行端口:

                port = new SerialPort("COM1");
                port.BaudRate = 9600;
                port.DataBits = 8;
                port.Parity = Parity.None;
                port.StopBits = StopBits.One;
                port.ReadTimeout = 1000;
                port.WriteTimeout = 1000;
                port.Open();
    
                byte[] buffer = new byte[11];
                buffer[0] = 0;
                buffer[1] = 0;
                buffer[2] = 0;
                buffer[3] = 3;
                buffer[4] = 2;
                buffer[5] = 4;
                buffer[6] = 1;
                buffer[7] = 20;
                buffer[8] = 50;
                buffer[9] = 0;
                buffer[10] = 120;
                port.Write(buffer, 0, 11);
    

    然后我编写了另一个应用程序来测试前一个应用程序。我想检查11个字节是否正确发送。在此应用程序中,我使用:

            using (SerialPort port = new SerialPort("COM1"))
            {
                // configure serial port
                port.BaudRate = 9600;
                port.DataBits = 8;
                port.Parity = Parity.None;
                port.StopBits = StopBits.One;
                port.Open();
    
                for (; ; )
                {
                    byte[] b = new byte[11];
                    port.Read(b, 0, 11);
                    StringBuilder sb = new StringBuilder();
                    for (int i = 0; i < 11; ++i)
                    {
                        sb.Append(b[i]);
                        sb.Append(" ");
                    }
                    Console.WriteLine(sb.ToString());
                }
            }
    

    接收字节。问题是,在发送类似以下内容之后:

    0 0 0 3 2 4 1 20 50 0 120
    

    我收到:

    0 0 0 0 0 0 0 0 0 0 0
    0 0 3 2 1 4 20 50 0 120 0
    

    为什么会这样?我的代码中有什么错误? 谢谢你

    2 回复  |  直到 15 年前
        1
  •  3
  •   devstuff    15 年前

    你没有检查结果 port.Read() . 它返回字节数 阅读 ,不是字节数 请求 . 然后输出循环需要使用这个结果作为上限。

    虽然您在发送端设置了超时,但在读卡器上也需要它们。

        2
  •  1
  •   Oliver    15 年前

    要检查PC上的串行连接上发生的情况,我使用两个工具:

    • com0com :在一台PC上创建两个串行端口的仿真器,可以彼此通信。我遇到的唯一缺点是,应该将两个COM端口的值都设置为10以下。

    • Free Serial Port Monitor :它在一个COM端口上嗅探,并可以显示在线路上运行的每个字节。我遇到的唯一缺点是,它有时会出现断开连接的问题,并且只会在整个PC重新启动后重新启动。因此,如果开始与它的会话,请确保在关闭测试应用程序中的连接之前,不要断开或意外地关闭应用程序。