C#.NET串行端口连接,不读取或写入
我使用C#和.NET 4.5,使用Visual Studio 2012编译器/ IDE打开并与串行端口交互。我的代码被设计为连接到美国数字的QSB正交转USB转换器。C#.NET串行端口连接,不读取或写入
这里是我用来打开端口和连接的代码。
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");
此命令*应引起我的硬件旋转电机,而事实上它,如果我用腻子发送命令,或使用我编写的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#代码中提到的字段的默认值,但在上面的蟒蛇呼叫未提及有:
- bytesize = 8
- 奇偶=无 个
- 停止位=一个
- XONXOFF =假
- rtscts =假
- dsrdtr =假
在C#中的串行端口的工作有一两件事是建立连接时要永远记住。如果您握手值设置为none这样的:
this.Port.Handshake = Handshake.None;
然后,你需要设置几个参数,以及对要完成的连接,它们是:
this.Port.DtrEnable = true;
this.Port.RtsEnable = true;
的reaso是因为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等更标准的数量,以查看连接是否可行。 – Ckrempp 2014-10-29 17:59:11
我将硬件上的波特率转换为115200(大多数串行端口上的最高标准),与Putty连接以验证它的工作原理,然后从C#尝试。不行。 但是,你的建议,使DTR和RTS工作。 :-D谢谢,我一直在这个问题上打了几个小时。 – 2014-10-29 18:24:50
不客气,我知道我有一个类似的串口问题,它归结为这两种解决方案之一。 – Ckrempp 2014-10-29 18:25:39