我在做一個串口掃描槍的專案 掃描槍掃碼 條碼資料結束符0D0A 然后將資料存入ListBox中呼叫列印 再清除
有一個問題是 現在收到的資料是不完整的 總是斷開顯示 不在同一行 或者資料亂拼接。 加延時可以解決 只是效率太慢 還是有問題 請教各位 如何通過結束符判斷資料完整 再做處理

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// System.Threading.Thread.Sleep(300);
string str = serialPort1.ReadExisting();
if (str != string.Empty)
{
byte
return;
}
else
{
MessageBox.Show(str);
}
listBox1.Items.Add(str.Trim()); //讀到的資料添加-ListBox1
}
求各位大佬指點指點 應該怎么寫
uj5u.com熱心網友回復:

這是我用串口助手HEX接收的資料
uj5u.com熱心網友回復:
你這個二維碼或條形碼,不是由數字組成?是的話,你給個輸入框,掃碼槍直接數字掃入輸入框的。uj5u.com熱心網友回復:
string _data; //存盤剩余資料
string _splitStr; //分隔符
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
// System.Threading.Thread.Sleep(300);
string str = serialPort1.ReadExisting();
if (str != string.Empty)
{
_data += str;
string[] sSplit = _data.Split(new string[] { _splitStr }, StringSplitOptions.None);
if (sSplit.Length > 1)
{
for (int i = 0; i < sSplit.Length; i++)
{
if (i == sSplit.Length - 1)
{
if (!string.IsNullOrEmpty(sSplit[i]))
{
_data = sSplit[i];
break;
}
}
listBox1.Items.Add(sSplit[i].Trim()); //讀到的資料添加-ListBox1
}
}
return;
}
else
{
MessageBox.Show(str);
}
}
uj5u.com熱心網友回復:
問題可能在于你的硬體設備上,看能不能調大一下波特率,加快傳輸率,或許能有幫助。那種根據結束符來校對資料完整性可能做不到,在我接觸的大部分掃描槍,以0D0A(帶換行)作為結束符還真沒聽過,
一般以 Enter (回車) 來判斷的要多一些,如果可以的話,建議你試試在掃描槍和你的程式中都調整為 Enter 作為判斷看看。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/79106.html
標籤:C#
上一篇:求帶
