我使用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 =假
有兩件事你可以嘗試。首先,由於你沒有握手,你需要修改這兩個值:'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