簡體   English   中英

在C#中從串行端口讀取數據

[英]Reading Data from serial port in c#

我正在嘗試從串行端口讀取數據。 數據超出規模。 我首先發送命令開始讀取秤。

_serialPort.Write("P");

然后等待一段時間后,我嘗試使用

temp2 = _serialPort.ReadLine();

應用程序掛在這行代碼上。 我也嘗試過讀取功能,但得到相同的結果。 ReadExisting()函數返回一個空字符串。

由於ReadLine()不會超時或引發任何異常,因此我無法調試此問題,因為我沒有更多信息。 由於WriteLine()ReadExisting()正在工作,因此端口不能有缺陷。

任何幫助,將不勝感激。

謝謝

在“接收”按鈕后面嘗試以下操作:

string msg = serialObj.ReadExisting();
MessageBox.Show(msg);

對於通訊,請從終端程序開始。 該程序可以讓您鍵入從串行端口發送到設備的命令,並顯示從設備返回的所有文本。 這將使您可以嘗試描述的協議,並查看設備發送回的內容。 得到正確的答復后,您將知道:

  • 設備正在運行
  • 串行電纜已正確接線並且可以正常工作
  • 您使用的端口設置正確(波特率,停止位,奇偶校驗等)
  • 您了解協議是什么(您發送的是“ P”還是“ P”后跟換行符?)

然后,您可以在知道是否運行不正常的情況下運行代碼,這是代碼中的某些錯誤,而不是其他任何因素使您感到困惑。

發送初始命令后,您可以立即讀取串行端口以獲取響應-您正在使用的呼叫將只等到收到一些數據即可。 如果沒有收到數據,它將永遠等待(因此程序掛起)。 以上任何錯誤均會導致未接收到任何數據的相同症狀。 並且更改讀取數據的方式(例如,異步讀取等)不會更改沒有數據被接收的事實。

要注意的另一件事是端口設置。 通常,從大多數設備的默認設置開始(因為大多數設備以相當標准的方式使用RS232)-一個典型的初學者錯誤是顯式設置諸如握手方法之類的選項,但是如果弄錯了,它將破壞通訊科。 通常,您需要指定一個波特率和8N1(8位,無奇偶校驗,1個停止位),然后不理會其他設置,直到發現需要對其進行設置才能使其正常工作,或者您知道 (如其手動狀態) (黑色和白色)表示您的設備需要使用其他內容。

將您的Write函數更改為WriteLine。 這可能有所幫助。 此外,請查看MSDN上此鏈接的樣本。 這很有幫助。

您可以使用該部分將數據從c#發送到串行端口:

int MyInt3 = Convert.ToInt32(textBox3.Text);
byte[] p = BitConverter.GetBytes(MyInt3);
serialPort1.Write(p, 0, 1);

之后,您可以使用Read()方法。

檢查是否正確設置了SerialPort.NewLine屬性。 如果僅收到一個CR字符,並且ReadLine應為例如。 CRLF,您的應用程序將掛起。

秤是否響應發送給它的每個“ P”,還是“ P”是一個告訴其開始發送連續數據流的命令? 要使用終端程序,請將其波特率和協議設置為與標尺(和您的程序)相同的值,並使用它向標尺發送“ P”,以代替對您的程序執行此操作。 秤的任何響應應顯示在終端窗口中。 我更喜歡白蟻或白蟻(均可下載)超級終端,這是非常糟糕的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM