так что я новичок в программировании на C #. Я запрограммировал приложение C # Forms в Visual Studio для связи / инициализации устройства через последовательный порт. Связь между устройством кодируется COBS, поэтому нет байтов 0x00, кроме как в конце каждого сообщения. Отправленные и полученные сообщения имеют разную длину.
В данный момент моя проблема в том, что полученные мной сообщения не завершены или начинаются с середины сообщения, поэтому я не могу инициировать отправленные сообщения с определенным значением в полученных сообщениях. Вы можете определить конец сообщения с полученным 0x00 (0x00 означает конец сообщения в кодированных данных COBS)
Так что мне нужно что-то, чтобы обработать полное сообщение и поместить его в байтовый массив, чтобы проанализировать, например, байт [11] на предмет конкретного значения.
Вот что я сделал до сих пор:
private bool b_portopen = false;
private byte[] b_rcv_buffer = new byte[256];
private void button1_Click(object sender, EventArgs e) {
//InitTimer();
if (b_portopen == false)
{
serialPort1.PortName = comboBox1.SelectedItem.ToString();
serialPort1.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
serialPort1.Open();
b_portopen = true;
button1.Text = "Close";
button2.Enabled = true;
Console.WriteLine("Serial Port Opened");
}
else if (b_portopen == true)
{
serialPort1.Close();
b_portopen = false;
button1.Text = "Open";
button2.Enabled = false;
Console.WriteLine("Serial Port Closed");
}
}
private async void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
serialPort1.Read(b_rcv_buffer, 0, 256);
//serialPort1.Read(b_rcv_buffer1, 11, 2);
richTextBox1_receive.Invoke(new Action(() =>
{
richTextBox1_receive.AppendText(BitConverter.ToString(b_rcv_buffer) + "\n");
richTextBox1_receive.ScrollToCaret();
}));
switch (b_rcv_buffer[10])
{
case b_state_startup:
do something
case b_state_be_start_conf:
do something
case b_state_keepalive_conf:
do something
case b_state_unprepare_conf:
do something
case b_state_prepare_conf:
do something
}
}