C#.NET串行端口连接,无法读取或写入

Cal*_*ain 2 .net c# python serial-port

我正在将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();
Run Code Online (Sandbox Code Playgroud)

在this.Port.Open()之后立即设置断点,使我可以验证串行端口是否确实已连接。在另一部分代码中,响应于按钮按下而调用以下内容:

this.Port.WriteLine("W168");
Run Code Online (Sandbox Code Playgroud)

该命令*应该使我的硬件旋转电动机,实际上,如果我使用Putty或使用我编写的Python脚本(两者使用与C#代码完全相同的设置)发送该命令,则它确实会旋转。然而什么也没发生。我可以在Putty或Python中打开端口,并以预期的结果执行命令,然后运行C#代码,但没有任何反应。

我是否缺少某些特定于C#的东西来阻止其工作?

对于它的价值,这是我可以使用的Python代码:

ser = serial.Serial("COM9", 230400, timeout=1)
ser.write(b"W168\n")
Run Code Online (Sandbox Code Playgroud)

链接到pySerial文档:http ://pyserial.sourceforge.net/pyserial_api.html#classes

C#代码中提及但上述python调用中未提及的字段的默认值为:

  • 字节大小= 8
  • 奇偶校验=无
  • 停止位= 1
  • xonxoff =假
  • rtscts =假
  • dsrdtr =假

小智 5

在C#中使用串行端口时,建立连接时要牢记一件事。如果您将握手值设置为none,例如:

this.Port.Handshake = Handshake.None;
Run Code Online (Sandbox Code Playgroud)

然后,您还需要设置一些其他参数来完成连接,它们是:

this.Port.DtrEnable = true;
this.Port.RtsEnable = true;
Run Code Online (Sandbox Code Playgroud)

原因是,Dtrenable的意思是:

数据终端就绪(DTR)信号

MSDN解释DTR的含义是:

通常在XON / XOFF软件握手和请求发送/清除发送(RTS / CTS)硬件握手以及调制解调器通信期间启用数据终端就绪(DTR)。

Rtsenable的意思是:

请求发送(RTS)信号

MSDN解释了RTS的含义:

发送请求(RTS)信号通常用于请求发送/清除发送(RTS / CTS)硬件握手中。

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