SerialPortReceived串口接收事件代碼:
int count = PGPort.BytesToRead;
byte[] buff = new byte[count];
PGPort.Read(buff, 0, count);
string re = (BitConverter.ToString(buff)).Replace("-", " ");
do
{
//業務代碼
}
第一次觸發接收到的是正確的資料,第二次是"",也就是count = 0;
有沒有大佬遇到過這樣的問題,我收發用的都是16進制
uj5u.com熱心網友回復:
資料粘包上位機程式一般是這樣實作
1.串口/網路收到資料制作一件事:存入快取
2.資料拆包,檢測:包頭、長度.....校驗,檢查確保一個完整包收到,將一個完整包的資料放入另一個快取
3.對快取好的資料包拆包
4.通過多執行緒或執行緒池啟動業務邏輯
uj5u.com熱心網友回復:
https://docs.microsoft.com/zh-cn/dotnet/api/system.io.ports.serialport.datareceived?view=dotnet-plat-ext-5.0看注解
微軟說的很清楚,我什么都不保證,只保證如果有資料,我會根據ReceivedBytesThreshold進行判定觸發(如果有Eof除外,當有Eof時候,無論ReceivedBytesThreshold怎么設定我都觸發)
ps:這里沒有第一次收到正確資料的說法,因為微軟根本就不知道你們雙方怎么訂立的協議,所以他根本不會考慮什么正確的資料,他只是按上面的標紅加粗的固定規則處理
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/264981.html
標籤:C#
