2012-09-25 52 views
1

我通過串口發送數據..發送部分是確定的,我收到的數據在另一端,但我沒辦法去完成確認部分...這是我在做什麼...沒有得到確認通過使用C#的WinForm中的串行端口發送數據?

mySerialPort.Open(); 
     mySerialPort.Write(databuffer, 0, 19); 
     System.Threading.Thread.Sleep(2000); 
     if (mySerialPort.BytesToRead > 0)  // this condition not working 
     { 
      string rdata = mySerialPort.ReadExisting(); 
      if (rdata.ToUpper().Trim() == "OK") 
      { 
       lblmsg.Text = "OK"; 
      } 
      else 
      { 
       lblmsg.Text = "FL"; 
      } 
     } 

     mySerialPort.Close(); 

,並繼續我的串行端口的設置是這樣的....

public void SettingRS232(string port) 
    { 
     try 
     { 
      SerialPort mySerialPort = new SerialPort(port); 
      mySerialPort.PortName = port; 
      mySerialPort.BaudRate = 9600; 
      mySerialPort.Parity = Parity.None; 
      mySerialPort.StopBits = StopBits.One; 
      mySerialPort.DataBits = 8; 
      mySerialPort.Handshake = Handshake.None; 
      mySerialPort.ReadTimeout = 2000; 
      mySerialPort.WriteTimeout = 500; 

      mySerialPort.DtrEnable = true; 
      mySerialPort.RtsEnable = true; 
     } 
     catch (Exception ex) 
     { 
      lblmsg.Text = ex.Message; 
     } 
    } 

回答

1

這是很少去了。首先使用另一個程序來測試連接,像超級終端或膩子的東西。這讓你非常熟悉基礎知識,正確的電氣連接以及正確的波特率,奇偶校驗,停止位和數據位設置。並檢查設備是否在您選擇的魔法數字內返回響應2秒。

到目前爲止,最常見的錯誤是沒有采取正確的握手的照顧。如果你把它留在無,那麼你必須必須自己打開握手信號。將RtsEnable和DtrEnable屬性設置爲true。設備在看到這些信號關閉時不會發送任何內容,它假定您沒有上電(DTR)並且沒有準備好接收數據(RTS)。

避免混合二進制數據和字符串進一步完善你的代碼,擺脫了可怕的睡眠()。調用Read()方法來接收字節,注意返回值來知道你有多少。繼續調用Read()直到獲得所有您期望獲得的結果。


編輯:您SettingRS232()方法有一個缺陷:

SerialPort mySerialPort = new SerialPort(port); 

,創建一個局部變量名爲mySerialPort。您正在初始化該局部變量,而不是您的其他代碼正在使用的mySerialPort變量。通過這樣寫它修復bug:

mySerialPort = new SerialPort(port); 
+0

我檢查我在另一端得到數據..這不是一個擔心現在..我不能承認它 – Drone

+0

您的評論已無關,與我的答案。重點是*你*沒有獲得任何數據。避免在DataReceived中迷路,直到您掌握了基礎知識。 –

+0

主席先生,我編輯了我的問題,並添加了設置,只需檢查設置並糾正我,如果我失去了一些東西? – Drone

1

您需要連接到DataReceived事件的串行端口。有很多很好的資源可以幫助你入門。從本質上說,掛鉤事件處理程序和事件處理程序內,從端口只要讀出有數據(BytesToRead> 0)

+0

我已經這樣做了'mySerialPort.DataReceived + =新SerialDataReceivedEventHandler(port_rec);'但它給我在這條線 – Drone

+0

請更精確的錯誤。 「一個錯誤」是不夠的信息。 – jeroenh

相關問題