最近遇到一個需求,利用樹莓派去採集一個串口設備的所有數據,設備會主動上報數據,但是呢這個設備是一個集合設備,會上報的報文頭都不一樣,比如燈亮度或者開關會上報21 12 ·········,風速會上報71 23 ······。等等10多種數據格式。 剛好net core 支持跨平臺串口通信。所以記錄如 ...
最近遇到一個需求,利用樹莓派去採集一個串口設備的所有數據,設備會主動上報數據,但是呢這個設備是一個集合設備,會上報的報文頭都不一樣,比如燈亮度或者開關會上報21 12 ·········,風速會上報71 23 ······。等等10多種數據格式。
剛好net core 支持跨平臺串口通信。所以記錄如下,主要是數據處理這部分;
1. 收到的數據立馬轉移到深度緩存中,在開啟線程處理數據
private List<byte> tempBuffer = new List<byte>();//深度緩存數據 private void SP_ReadData_DataReceived(object sender, SerialDataReceivedEventArgs e) { try { int count = sP_ReadData.BytesToRead; byte[] buf = new byte[count]; sP_ReadData.Read(buf, 0, count);//讀取緩衝數據 tempBuffer.AddRange(buf);//把數據放入深度緩存區域 //提高數據處理速度 ThreadPool.QueueUserWorkItem(new WaitCallback(DealData), null); } catch (Exception ex) { } }
1. 數據處理部分,利用了檢測報文頭和校驗位的做法,把不對的數據剔除
文筆不行,做個記錄,酌情參考。