C#串行端口连接,不连接';不要读或写
本文关键字:连接 串行端口 不连接 | 更新日期: 2023-09-27 18:28:23
我使用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();
在此之后立即设置断点。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=错误
在C#中使用串行端口时,在建立连接时需要始终记住一件事。如果将握手值设置为none,则如下所示:
this.Port.Handshake = Handshake.None;
然后,您还需要设置更多的参数来完成连接,它们是:
this.Port.DtrEnable = true;
this.Port.RtsEnable = true;
原因是因为Dtrenable的意思是:
数据终端就绪(DTR)信号
MSDN解释了DTR的含义:
数据终端就绪(DTR)通常在XON/XOFF软件握手和请求发送/清除发送(RTS/CTS)硬件握手以及调制解调器通信期间启用。
Rsenable的意思是:
请求发送(RTS)信号
MSDN解释了RTS的含义:
请求发送(RTS)信号通常用于请求发送/清除发送(RTS/CTS)硬件握手。
这两个参数一起处理串行端口通信的握手,而无需在主设备和从设备之间进行定义。