【发布时间】:2014-12-25 13:46:59
【问题描述】:
我正在使用 C# 和 .NET 4.5,以及 Visual Studio 2012 编译器/IDE 来打开串行端口并与之交互。我的代码旨在连接到 US Digital 的 QSB 正交至 USB 转换器。
这是我用来打开端口和连接的代码。
this.Port = new SerialPort();
this.Port.BaudRate = 230400;
this.Port.PortName = "COM9";
this.Port.Parity = Parity.None;
this.Port.Handshake = Handshake.None;
this.Port.DataBits = 8;
this.Port.StopBits = StopBits.One;
this.Port.Open();
在 this.Port.Open() 之后立即设置断点允许我验证串行端口是否确实已连接。在另一段代码中,响应按钮按下调用了以下代码:
this.Port.WriteLine("W168");
这个命令 * 应该会导致我的硬件旋转电机,事实上,如果我使用 Putty 发送命令,或者使用我编写的 Python 脚本(两者都使用与 C# 代码完全相同的设置)发送命令,就会发生这种情况。然而什么也没发生。我可以在 Putty 或 Python 中打开端口并执行具有预期结果的命令,然后运行我的 C# 代码,但没有任何反应。
我是否遗漏了一些特定于 C# 的东西来阻止它工作?
不管怎样,这是我的工作 Python 代码:
ser = serial.Serial("COM9", 230400, timeout=1)
ser.write(b"W168\n")
pySerial 文档链接:http://pyserial.sourceforge.net/pyserial_api.html#classes
在 C# 代码中提到但在上面的 python 调用中没有提到的字段的默认值是:
- 字节大小 = 8
- 奇偶校验 = 无
- 停止位 = 一
- xonxoff = 假
- rtscts = 假
- dsrdtr = 假
【问题讨论】:
-
您可以尝试两件事。首先,由于您没有握手,您需要修改这两个值:
this.Port.DtrEnable = true;和this.Port.RtsEnable = true;。其次,您可以将波特率降低到更标准的值,例如 9600,以查看是否可以连接。 -
我将硬件上的波特率切换为 115200(大多数串行端口上的最高标准),与 Putty 连接以验证它是否有效,然后从 C# 尝试。不去。但是,您启用 Dtr 和 Rts 的建议奏效了。 :-D 谢谢,我一直在努力解决这个问题好几个小时了。
-
不客气,我知道我遇到了类似的串行端口问题,归结为这两种解决方案之一。
标签: c# python .net serial-port