c# - 等待串口的响应,然后发送下一个数据

beat365手机下载 📅 2026-02-06 05:29:15 👤 admin 👁️ 9153 ❤️ 263
c# - 等待串口的响应,然后发送下一个数据

我正在从.bin文件中以字节为单位读取数据并将整个字节数据拆分为16-16字节帧,因此我想一个接一个地读取 16 个字节帧并等待第一帧完成其周期。

SerialPort 类的回调方法:

private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)

{

// Read data from serial port:

byte[] buffer = new byte[serialPort.BytesToRead];

serialPort.Read(buffer, 0, buffer.Length);

StringBuilder sb = new StringBuilder();

List response = new List();

for (int i = 0; i < buffer.Length; i++)

{

string currentByte = string.Format("{0:X2}", buffer[i]);

response.Add(currentByte);

sb.AppendFormat("{0:X2}", buffer[i]);

}

string responesCode = response[1].ToString();

if (responesCode == "44")

{

// Wait until the first response is not received

foreach (var packet in packetList.Skip(1))

{

// This method which sending the the data

this.ReadByteDataFromFile(packet);

}

}

}

FdBrowseFile_Click按钮点击:

private void FdBrowseFile_Click(object sender, RoutedEventArgs e)

{

Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();

Nullable result = dlg.ShowDialog();

if (result == true)

{

byte[] fileBytes = File.ReadAllBytes(filename);

foreach (byte[] copySlice in fileBytes.Slices(16))

{

var splitedByteArray = copySlice;

if (splitedByteArray.Length != 16)

{

byte[] padd = new byte[16];

var startAt = 0;

Array.Copy(splitedByteArray, 0, padd, startAt, splitedByteArray.Length);

packetList.Add(padd);

}

else

{

packetList.Add(splitedByteArray);

}

}

ReadByteDataFromFile(packetList[0]);

}

}

ReadByteDataFromFile 方法:

public void ReadByteDataFromFile(byte[] packet) {

try {

byte[] mBuffer = new byte[24];

byte[] payload = new byte[16];

int i = 0;

foreach(var bytes in packet) {

payload[i++] = bytes;

}

CheckSumHelper checkSumHelper = new CheckSumHelper();

var ckSum = checkSumHelper.GetCheckSum(payload);

mBuffer[0] = 0x02;

mBuffer[1] = 0x10;

mBuffer[2] = CheckSumHelper.GetBytesFromDecimal(packet[0]);

mBuffer[3] = CheckSumHelper.GetBytesFromDecimal(packet[1]);

mBuffer[4] = CheckSumHelper.GetBytesFromDecimal(packet[2]);

mBuffer[5] = CheckSumHelper.GetBytesFromDecimal(packet[3]);

mBuffer[6] = CheckSumHelper.GetBytesFromDecimal(packet[4]);

mBuffer[7] = CheckSumHelper.GetBytesFromDecimal(packet[5]);

mBuffer[8] = CheckSumHelper.GetBytesFromDecimal(packet[6]);

mBuffer[9] = CheckSumHelper.GetBytesFromDecimal(packet[7]);

mBuffer[10] = CheckSumHelper.GetBytesFromDecimal(packet[8]);

mBuffer[11] = CheckSumHelper.GetBytesFromDecimal(packet[9]);

mBuffer[12] = CheckSumHelper.GetBytesFromDecimal(packet[10]);

mBuffer[13] = CheckSumHelper.GetBytesFromDecimal(packet[11]);

mBuffer[14] = CheckSumHelper.GetBytesFromDecimal(packet[12]);

mBuffer[15] = CheckSumHelper.GetBytesFromDecimal(packet[13]);

mBuffer[16] = CheckSumHelper.GetBytesFromDecimal(packet[14]);

mBuffer[17] = CheckSumHelper.GetBytesFromDecimal(packet[15]);

mBuffer[18] = 0x17;

mBuffer[19] = 0x00;

mBuffer[20] = 0x00;

mBuffer[21] = 0x00;

mBuffer[22] = Convert.ToByte(int.Parse(ckSum, System.Globalization.NumberStyles.HexNumber));

mBuffer[23] = 0x03;

serialPort.Write(mBuffer, 0, mBuffer.Length);

} catch (Exception ex) {

ExceptionHandler exceptionHandler = new ExceptionHandler();

exceptionHandler.HandleException(ex);

}

}

如何为ReadByteDataFromFile方法添加延迟?

相关养生推荐

机构介绍
国际体育365

机构介绍

📅 08-02 👁️ 3809
首页>在线词典>資的意思
国际体育365

首页>在线词典>資的意思

📅 09-29 👁️ 4718
八字测什么时候有男朋友 八字怎么看什么时候有女朋友
365bet体育官网平台

八字测什么时候有男朋友 八字怎么看什么时候有女朋友

📅 11-28 👁️ 6855
香奈儿纹身
国际体育365

香奈儿纹身

📅 11-29 👁️ 1298