C#.NET串行端口连接、不连接和#x27;不读不写

C#.NET串行端口连接、不连接和#x27;不读不写,c#,python,.net,serial-port,C#,Python,.net,Serial Port,我正在使用C#和.NET 4.5以及Visual Studio 2012编译器/IDE来打开串行端口并与之交互。我的代码设计用于连接美国数字公司的QSB正交USB转换器 下面是我用来打开端口并连接的代码 this.Port = new SerialPort(); this.Port.BaudRate = 230400; this.Port.PortName = "COM9"; this.Port.Parity = Parity.None; this.Port.Handshake = Hands

我正在使用C#和.NET 4.5以及Visual Studio 2012编译器/IDE来打开串行端口并与之交互。我的代码设计用于连接美国数字公司的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文档:

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

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

在C#中使用串行端口时,在建立连接时有一件事要始终记住。如果将握手值设置为“无”,如下所示:

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


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

有两件事可以尝试。首先,由于没有握手,因此需要修改这两个值:
this.Port.DtrEnable=true
this.Port.RtsEnable=true。其次,您可以将波特率降低到更标准的值,如9600,以查看是否可以连接。我将硬件上的波特率切换到115200(大多数串行端口上的最高标准),使用Putty连接以验证其是否工作,然后从C#尝试。不行。但是,您关于启用Dtr和Rts的建议奏效了:-D谢谢,我已经为这个问题绞尽脑汁好几个小时了。不用客气,我知道我的串行端口也有类似的问题,它归结为这两种解决方案之一。