Последовательное соединение выпадает из синхронизации c. Ардунио и C# связь - PullRequest
2 голосов
/ 30 апреля 2020

Я пишу простое приложение, в котором Ardunio отправляет прочитанные данные в программу C#, используя простой serial.write (). Я отправляю данные из Ardunio со специальным синтаксисом, и программа c# считывает и интерпретирует их, и в конечном итоге отображает данные.

Например, программа Ardunio отправляет данные

Serial.write("DATA 1 3 90;");

, что означает: значения X и Y на графике 1 равны 3 и 90 соответственно. И программа c# читает ее, используя

private async void Serialport_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    await serialport.BaseStream.ReadAsync(buffer, 0, 1024);

    await Task.Run(() => Graph()); // Graph function graphs the data


}

. В функции graph() я конвертирую буфер в строку с Encode.ASCII.GetString(buffer); и интерпретирую данные с помощью синтаксиса и прочее. Но по какой-то причине либо программа c# не читает ее достаточно быстро, либо Arduino не отправляет ее достаточно быстро, а сообщения иногда прерываются. Например, полученный мной пакет:

DATA 2 5 90; ДАННЫЕ 5 90 10; ДАННЫЕ 1 1 <| -------- Я не могу получить последнее значение Y </p>

И следующий модуль данных начинается с

75; ДАННЫЕ 5 4 60; ДАННЫЕ 14 5 6; ДАННЫЕ
/ \

|

+ =================== Это здесь

Кстати, все пакеты по 32 байта.

Так что мне нужно либо получать данные построчно, но я не могу этого сделать, потому что ardunio отправляет их слишком быстро

 Serial.write("DATA 1 3 90;");
 Serial.write("DATA 2 4 40;");

Приходит к C# как ДАННЫЕ 1 3 90; ДАННЫЕ 2 4 40; в целом блок. Или мне нужно получить все сразу?

(я предпочитаю получать это построчно)

ОБНОВЛЕНИЕ:

Когда задержка (1000); добавляется между отправками. Данные обрабатываются правильно. Без задержек Arduino отправляет данные слишком быстро, а данные сбиваются и прерываются. Как я могу убедиться, что данные не задерживаются, но данные надежны и без перебоев?

ОБНОВЛЕНИЕ 2:

Когда размер буфера также увеличен до 100 *1024* 1024 Что касается метода readCount в методе ReadAsyn c, то сообщение о прочтении становится еще больше с перерывами.

Я могу дать вам любую дополнительную информацию.

PS. Я не дал весь код, потому что это большой блок. Но я могу дать его по частям, если вы скажете мне, где вы хотите.

Любая помощь приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...