2014-10-29 129 views
2

我使用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 =假
+1

有兩件事你可以嘗試。首先,由於你沒有握手,你需要修改這兩個值:'this.Port.DtrEnable = true;'和'this.Port.RtsEnable = true;'。其次,您可以將波特率降至9600等更標準的數量,以查看連接是否可行。 – Ckrempp 2014-10-29 17:59:11

+1

我將硬件上的波特率轉換爲115200(大多數串行端口上的最高標準),與Putty連接以驗證它的工作原理,然後從C#嘗試。不行。 但是,你的建議,使DTR和RTS工作。 :-D謝謝,我一直在這個問題上打了幾個小時。 – 2014-10-29 18:24:50

+0

不客氣,我知道我有一個類似的串口問題,它歸結爲這兩種解決方案之一。 – Ckrempp 2014-10-29 18:25:39

回答

3

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

這兩個參數一起處理串口通信的握手,而不必在主控制器和從屬控制器之間進行定義。

相關問題