|
0 / 0 / 0
Регистрация: 07.10.2011
Сообщений: 10
|
|
SerialPort в C#12.10.2011, 08:18. Показов 41320. Ответов 40
Метки нет (Все метки)
Ребята помогите с несколькими примерами обработки входящих данных на COM port. просмотрел кучу разных примеров в гугле и так не понял не чего. Меня интересует как можно обработать массив данных поступающих на порт используя WinForm b serialport.read(byte), serialport.read(char), На порт приходят данные в таком формате с0 23 45 65 78 23 56 с1
0
|
|
| 12.10.2011, 08:18 | |
|
Ответы с готовыми решениями:
40
Serialport.write и serialport.basestream.write - в чем разница Работа с SerialPort SerialPort и GPS |
|
|
||
| 13.01.2016, 14:14 | ||
|
gurvinok, посмотрите мой код выше, а именно как организовано чтение. При каждом вызове метода чтения в него передается параметр - количество ожидаемых байт (мы же знаем протокол, и значит это число должно быть известно). А внутри метода крутим цикл с проверкой количества доступных байт в буфере порта. Как только буфер заполнился - читаем все байты.
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||||||
| 13.01.2016, 14:16 | |||||||
|
Ожидаемый ответ ровно 20 байтов? Попробуйте так:
0
|
|||||||
|
|
|||||||
| 13.01.2016, 14:23 | |||||||
Read() передать массив и сразу все считать.Типа того.
0
|
|||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 13.01.2016, 14:40 | ||
|
Тут зависит от подхода: если делать как вы — крутить ожидание пока BytesToRead не получит нужно значение и потом махом считать — да, такой подход оправдан. А если начинать считывать ответ сразу после отправки сообщения, как это сделано у ТС, то Read считает то, что лежит в буфере на момент вызова и вернет количество считанных байт/символов. Если сообщение пришло еще не все, то на выходе вы получите его кусок. Возможно, вкусовщина, но лично я не люблю активный опрос порта на наличие всех данных — мне это напоминает нетерпеливых детей на заднем сиденье автомобиля: "Ну что, приехали? А сейчас приехали? Ну когдаааа уже?!" ![]() Предпочитаю блокировать поток ровно настолько, насколько это нужно.
0
|
||
|
0 / 0 / 0
Регистрация: 19.08.2009
Сообщений: 43
|
||||||
| 13.01.2016, 14:49 | ||||||
|
Так у меня с самого начало так и было сделано.
Добавлено через 6 минут И еще вопрос, insite2012 как такое возможно byte[] data = new byte[readCount]; ?
0
|
||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 13.01.2016, 14:50 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 19.08.2009
Сообщений: 43
|
|
| 13.01.2016, 14:58 | |
|
Не должно такого быть. Данная функция не закончит работу пока все не заберет в буфер, либо не закончится таймаут. Вот выписка из определения самой студии.
// Сводка: // Считывает из входного буфера System.IO.Ports.SerialPort определенное число // байтов и записывает их в байтовый массив, начиная с указанной позиции. // // Параметры: // buffer: // Массив байтов, в который записываются входные данные. // // offset: // Смещение в буферном массиве, с которого начинается запись. // // count: // Количество байтов, чтение которых необходимо выполнить. // // Возвращает: // Число прочитанных байтов. Должна все прочитать.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||
| 13.01.2016, 15:05 | |||
|
Документация того же метода, но в оригинале:
Попробуйте сделать как я предложил — что вам мешает? Вирус вы не подхватите, комп не отформатируется.
0
|
|||
|
0 / 0 / 0
Регистрация: 19.08.2009
Сообщений: 43
|
|
| 13.01.2016, 15:10 | |
|
Ну у меня всегда размер буфера больше чем принимаемые данные. Вашим методом пробовал, вообще ничего не приходит.
0
|
|
|
|
|
| 13.01.2016, 15:13 | |
|
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 13.01.2016, 15:17 | ||
|
Только если у вас размер буфера больше, то нужно считывать не пока read < b.Length, а пока он меньше размера ожидаемого ответа. Я у вас об этом спрашивал, но вы не ответили.
0
|
||
|
0 / 0 / 0
Регистрация: 19.08.2009
Сообщений: 43
|
|
| 13.01.2016, 15:18 | |
|
Как это известного размера? readCount передается функции как аргумент. А откуда компилятор тогда узнает что и сколько передастся функции.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|||||||
| 13.01.2016, 15:21 | |||||||
|
Если вы с сей на шарп пересели, то new byte[readCount] аналогичен этому:
0
|
|||||||
|
0 / 0 / 0
Регистрация: 19.08.2009
Сообщений: 43
|
|||||||
| 13.01.2016, 15:24 | |||||||
|
Я даже data.Length заменил на числа, так как я точно знаю что мне придет 3 байта. Ничего не принимает, а вот так
Добавлено через 2 минуты
0
|
|||||||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 13.01.2016, 15:26 | ||
|
gurvinok, повторюсь, а то вдруг среди других ответов затерялось:
0
|
||
|
0 / 0 / 0
Регистрация: 19.08.2009
Сообщений: 43
|
|
| 13.01.2016, 15:35 | |
|
Именно этот протокол. Вот мое вольное описание его.
Протокол AVR109 фирмы Atmel.docx
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
|
| 13.01.2016, 15:38 | |
|
gurvinok, спасибо, сейчас ознакомлюсь.
0
|
|
|
0 / 0 / 0
Регистрация: 19.08.2009
Сообщений: 43
|
|
| 13.01.2016, 22:56 | |
|
Веселье продолжается. Заставил порт принимать от МК данные, но теперь возникла следующая проблема. Если МК передает 1 байт, то ПК принимает его как надо, а если больше 1 байта, то ПК принимает со второго байта, а первого как-будто и не было. Вот накидал простой проектик. Открывает порт и посылает команду, а МК шлет ответ. Посмотрите если не лень.
0
|
|
|
0 / 0 / 1
Регистрация: 29.05.2015
Сообщений: 23
|
||||||
| 03.04.2018, 14:58 | ||||||
|
Добрый день!
хочу отправить массив через SerialPort C# написал программку , как рекомендуют по этой теме но данные из порта не выходят вопрос - почему? ........................................ ...............
0
|
||||||
|
0 / 0 / 1
Регистрация: 29.05.2015
Сообщений: 23
|
|
| 04.04.2018, 10:00 | |
|
мимоходом-мимолетом создал
работающую форму, которая исправно посылает и принимает то, что записал в поле на экране но как ее превратить в .EXE -файл ?
0
|
|
| 04.04.2018, 10:00 | |
|
Serialport - Readline
Считывание SerialPort
serialPort, форма и потоки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|