我使用 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 http://pyserial.sourceforge.net/pyserial_api.html#classes
C# 代码中提到但上面的 python 调用中未提及的字段的默认值是:
- 字节大小 = 8
- 奇偶校验 = 无
- 停止位 = 1
- xonxoff = 假
- rtscts = 假
- dsrdtr = 假
在 C# 中使用串行端口时,建立连接时要始终记住一件事。如果将握手值设置为 none,如下所示:
this.Port.Handshake = Handshake.None;
然后还需要设置一些参数才能完成连接,它们是:
this.Port.DtrEnable = true;
this.Port.RtsEnable = true;
原因是因为 Dtrenable 的意思是这样的:
数据终端就绪 (DTR) 信号
MSDN 对 DTR 的含义是这样解释的:
数据终端就绪 (DTR) 通常在 XON/XOFF 软件握手、请求发送/清除发送 (RTS/CTS) 硬件握手和调制解调器通信期间启用。
Rtsenable 的意思是:
请求发送 (RTS) 信号
MSDN 对 RTS 的含义是这样解释的:
请求发送 (RTS) 信号通常用于请求发送/清除发送 (RTS/CTS) 硬件握手。
这两个参数一起处理串行端口通信的握手,而无需在主设备和从设备之间定义它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)