2013-05-16 85 views
3

我想知道是否有辦法獲得Baud Rate當它連接到RS232 port
BEFORE您初始化SerialPort類並設置它的值。讓我試着解釋其中的原因......如何獲取設備的波特率?

今天,我有兩個不同的RFID Reader設備工作時,每一件作品在不同的BaudRate,所以如果我設置了錯誤的baudrate當我創建了SerialPort類,它會讀取卡號全部錯誤,取而代之的是真正的卡號,它會得到類似於????|W2???的東西。
此外,有一種可能性,該設備有一個USB端口。

這就是爲什麼我想在實例化SerialPort類之前知道設備的baud rate

+1

你知道你的程序支持哪些波特率和設備。你希望當你請求某些信息時你期待着。邏輯解決方案是使用一個波特率連接到設備,檢查請求的數據是否正確,以及它是否斷開連接並嘗試另一個波特率。無法從串行設備「請求」頻段速率。 –

+0

@Rhhound你可以發佈這個答案。 –

+0

@Ramhound嗯......我有2個不同的設備,一個工作在'9600'上,另一個工作在'19200'上,但是我不能創建一個應用程序,我必須根據用戶設備的配置改變它的值... 你懂 ? 但我怎麼能這樣做?據我所知,當讀取「RFID卡」時,我將能夠測試數據。你能給我一些理想的解決辦法嗎?謝謝 ! – PlayHardGoPro

回答

4

我試過我的串行USB設備。不斷更改波特率並檢查。 ComboBox包含一系列可能的波特率。

public void initConfig(SerialPort serialPort) 
    { 
     // you can assign these values in a combo box 
     string[] ports= "{COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8"}; 

     //you can assign these values in a combo box in a string format 
     int[] baudRate = { 4800, 9600, 19200, 38400, 57600, 115200, 230400 }; 

     serialPort.PortName = ports[0]; //else get from combobox : portCombobox.SelectedItem 
     serialPort.BaudRate = baudRate[0]; 
     //serialPort.BaudRate = Int32.Parse(speedComboBox.SelectedItem.ToString()); 

     //you can have controls to store and change these values if required 
     serialPort.Handshake = System.IO.Ports.Handshake.None; 
     serialPort.Parity = System.IO.Ports.Parity.None; 
     serialPort.DataBits = 8; 
     serialPort.StopBits = System.IO.Ports.StopBits.One; 
     serialPort.ReadTimeout = 200; 
     serialPort.WriteTimeout = 50; 
    } 

將字符串更改爲相應的類型並調用打開。

最後:

public void callingMethod() //or your connect event attached control 
    { 
     SerialPort serialPort = new SerialPort(); 

     initConfig(serialPort); 

     try 
     { 
      serialPort.Open(); 
     } 
     catch 
     { 
      MessageBox.Show("Error: Unable to Open the serial interface !"); 
      return; 
     } 
    } 
+0

感謝您的回答。我會創建它像一個class.cs?將其稱爲我的winform配置中的一個對象,然後分配值。對 ? = X – PlayHardGoPro

+1

是的,你可以!爲了更清晰起見,我簡化了並編輯了上述答案。我可能無法迴應,因爲我正要離開這一天。運氣最好! – KbManu

+0

謝謝。我只需要弄清楚如何將配置保存在我的Form2上,然後使用Form2上的配置調用我的Form1上的SerialPort類... – PlayHardGoPro

2

取決於你連接什麼等等。你可以通過一個波特率列表循環,嘗試連接,然後執行回聲測試的細節。如果你以錯誤的速度連接,你的回聲將作爲垃圾返回,而不是你發送的字符串。這種方法適用於我。

+0

您可以詳細說明如何執行回波測試嗎?這聽起來像是針對我的特定場景的合理解決方案。 – thedouglenz

+0

一個'echo'命令在基本上每個終端程序都可用 - dos/batch,linux/bash,uboot等等。它是完全安全的。如果你能以編程方式發送命令到終端並取回結果,那麼執行'echo my-test-string'之類的東西應該返回'my-test-string'。如果波特率是正確的,那將起作用。如果不是,則該值將回來,即輸出不等於輸入。 – BuvinJ