2012-12-21 162 views
0

我有一個讀取稱重機的串口應用程序。串口讀取字符串

public void Read() 
    { 
     while (Puerto.BytesToRead > 0) 
     { 
      try 
      { 
       string inputData = Puerto.ReadExisting(); 
       dataReceived = inputData; 
      } 
      catch (TimeoutException) { } 
     } 
    } 

則返回的字符串就是這樣

Data returned by weighing machine

它有它的其他交流中心字符,我該怎麼做才能解析或從它那裏得到一個乾淨的數據?所有我需要的是0.52lb

回答

1

我不知道什麼稱重機和它的串口規格,但是,如果它也是黑匣子,那麼請檢查以下內容: - 檢查是否有技術規格說明什麼來解釋從RS232端口出來 - 用一個樣本重量做幾個(10?)樣本,看看是否每次發送的字節數爲 - 如果您看到字節數恆定(禁止0.52lb文本中的差異更改爲0.5磅偶爾),很可能跟隨重量的垃圾是額外的二進制數據。如果沒有,你會看到每次精確偏移的權重(文本),你只需要刮掉輸出

這是一個完整的逆向工程,我建議遵循技術規範並做更有見地的數據處理。

+0

你說得對,其他數據是二進制數據,現在我的問題是如何處理它。我不是串口通信的專家。在那個數據中有一個狀態標誌,我怎樣才能提取這些字節,然後每一口? –

+0

提取字節很簡單。從端口讀取流作爲二進制文件並解析它的有趣部分。關鍵是你要確定數據的結構。如果您決定進行逆向工程,則必須觀察所有可能的重量樣本,並觀察其大小和格式。就這些字節的含義而言,猜測可能不是最好的方法,因此沒有推薦的方法。按照你的直覺看樣本數據 - 在其上使用二進制和文本可視化器。 –

+0

TKS爲您的興趣提供幫助。現在已經有結構了,現在我用最後的3個字節去掉了,它們是這樣的10000001這樣的標記,我該如何從一個字節中提取這些叮咬? –

1

這可能是任何東西 - 稱重機器中的錯誤,某種硬件問題,或如何配置串口問題。我會懷疑配置問題。確保所有設置都正確(BaudRate,Handshake,Parity,StopBits)。另外,嘗試使用其他程序連接到相同的串行端口設備(例如,請參閱http://helpdeskgeek.com/windows-7/windows-7-hyperterminal/)並查看是否看到相同的垃圾數據。