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#串行端口连接,不连接';不要读或写

在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)硬件握手。

这两个参数一起处理串行端口通信的握手,而无需在主设备和从设备之间进行定义。