【问题标题】:Serial communication串行通信
【发布时间】:2010-11-05 23:36:45
【问题描述】:

我正在用 C# 开发一个需要通过串行通信与矩阵开关通信的应用程序。

string value = "abc";
serialPort1.Open();
serialPort1.WriteTimeout = 500;
serialPort1.WriteLine(value);
serialPort1.Close();

矩阵框的状态应该会随着WriteLine(value) 而改变。

这是我的问题。当我发送字符串值时,矩阵框的状态不会改变。但是,当我通过 Putty(通过串行通信)发送相同的字符串时,矩阵框会正确响应。所有串行属性都是相同的(BaudRate、DataBits、PortName 等)。

我应该尝试哪些可能的解决方案?

【问题讨论】:

  • 仅供参考:WriteLine() 方法确实将回车符(十六进制 0x0D)附加到在线发送的数据中。我们使用 SerialPort.Write 并在发送前转换为十六进制值,但如果您的命令/回复保证为 ascci、unicode 或其他编码,这可能会更复杂。

标签: c# serial-port


【解决方案1】:

您可以在设置SerialPort 的位置发布您的代码吗?您必须确保 所有 属性与您的矩阵开关所期望的一样。例如:

// Setup port
SerialPort serialPort = new SerialPort();
serialPort.PortName = portName; //eg. COM1
serialPort.BaudRate = 9600;
serialPort.StopBits = StopBits.One;
serialPort.Parity = Parity.None;
serialPort.DataBits = 8;
serialPort.Handshake = Handshake.None;
serialPort.NewLine = "\r\n";
serialPort.ReadTimeout = 2000;
serialPort.WriteTimeout = 1000;

在您在端口上调用Open() 后,您可以使用serialPort.IsOpen 属性检查打开或关闭状态。

【讨论】:

    【解决方案2】:

    下载 PortMon http://technet.microsoft.com/en-us/sysinternals/bb896644.aspx 并使用 Putty 运行成功的串行通信,嗅探 PC 和设备之间的所有数据交换。然后执行你的程序并比较交换日志。这应该会给你答案,你的程序中做错了什么。

    【讨论】:

      【解决方案3】:

      我会检查串行端口上的编码属性。看起来默认是ASCII。也许您的设备需要 Unicode?​​p>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多