簡體   English   中英

.NET:從串口讀取數據

[英].NET: Reading data from serial port

我正在使用以下代碼讀取發送到串行端口(即COM3)的數據:

_serialPort.PortName = "COM3";
_serialPort.BaudRate = 9600;
_serialPort.Parity = Parity.None;
_serialPort.DataBits = 8;
_serialPort.StopBits = StopBits.One;
_serialPort.ReadTimeout = 500;
_serialPort.WriteTimeout = 500;
_serialPort.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);
_serialPort.Open();

來自該串行端口的數據是命令,可以是以'\\ 0'結尾的任何長度的字符串。 我正在尋找有關如何有效讀取此類數據的最佳實踐。 我認為生產者/消費者模式可能是最好的,其中:

  1. 每次DataReceived事件觸發時,我都會從端口讀取字符串並附加到stringbuffer或其他一些結構
  2. 然后我有另一個線程不斷檢查字符串緩沖區或char'\\ 0'結構,如果找到,解析並刪除命令字符串。

這是處理這個問題最有效的方法嗎? 是否有任何類型的阻塞串行讀取功能不依賴於dataReceived事件?

我發現dataReceieved事件可能會頻繁觸發,並在代碼在事件中運行時阻塞SerialPort 您說您可能需要此功能,但這里有更多可能有用或可能沒用的信息。

我使用Timer ,通常為10 Hz Timer ,我檢查SerialPort.BytesToRead > 0 然后我使用SerialPort.ReadLine讀取一行文本並保存大量代碼來處理入站緩沖區。

如果Loop直到BytesToRead == 0BytesToRead == 0每行讀入緩沖區以供稍后處理或在讀取后直接處理。

如果您知道Arduino構造一行文本需要多長時間,並且如果在ReadTimeout只接收到一部分行將導致Exception則示例中的ReadTimeout屬性很有用。

暫無
暫無

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

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