Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.58/26: Рейтинг темы: голосов - 26, средняя оценка - 4.58
2 / 2 / 6
Регистрация: 23.05.2012
Сообщений: 267

Как через serialport принять неизвестное количество байт

23.05.2012, 14:26. Показов 5019. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как через serialport принять неизвестное количество байт
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.05.2012, 14:26
Ответы с готовыми решениями:

Как инициализировать заранее неизвестное количество компонентов?
Всем привет. Собственно возник вопрос: как, используя WindowsForms создать на форме заранее не известное количество компонентов (по типу...

Узнать длину букв (не байт) буфера SerialPort'а
Здраствуйте, поскажите пожалуйста, как узнать длинну букв (не байт) буфера SerialPort'а, в arduino есть функция serial.avaliable —...

Чтение и проверка троек байт с последовательного порта, serialPort.Read()
Доброго времени суток! Буду рад Вашему совету о дальнейшем направлении разработки. Читаю данные с порта. Нужные данные...

23
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
23.05.2012, 17:10
Как только скажете, по какому условию определяется, что неизвестное количество байт было передано полностью, так я сразу же отвечу на ваш вопрос.
0
2 / 2 / 6
Регистрация: 23.05.2012
Сообщений: 267
23.05.2012, 17:41  [ТС]
вот как раз в этом и проблема я не знаю сколько байт он мне пришлет, и ждать долго нельзя по времени
0
 Аватар для ksk
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
23.05.2012, 20:59
Анализировать присланное, пока не будет получено что-то, похожее на конец.
То есть что-то одно должно быть известно: количество или признак конца блока данных.

Иначе это задача для отдельного потока с циклическим чтением строк или байтов (от задачи зависит) и вызовом соответствующего делегата при получении чего либо.
0
 Аватар для Yukikaze
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
23.05.2012, 21:01
Я конечно не силен в данном вопросе, но по идее устройство должно обладать некой документацией. Проверьте, может устройство конец передачи отмечает каким то образом, может нуль символом?
0
2 / 2 / 6
Регистрация: 23.05.2012
Сообщений: 267
24.05.2012, 06:36  [ТС]
инструкция есть но там только таблица адресов в памяти по которым находятся необходимые мне значения, протокол обмена с устройством modbus
0
 Аватар для Yukikaze
352 / 331 / 49
Регистрация: 12.12.2011
Сообщений: 563
24.05.2012, 13:14
skemuze, на википедии написано
Перед данными передается один байт, значение которого равно количеству байт данных.
1
2 / 2 / 6
Регистрация: 23.05.2012
Сообщений: 267
25.05.2012, 09:09  [ТС]
да только этот байт идет после адреса устройства и функции

Добавлено через 19 часов 47 минут
нашел хороший пример который и взял за основу http://www.codeproject.com/scr... ?aid=20929, все понятно и хорошо написано
0
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 7
14.08.2012, 15:17
Всем привет! Необходима помощь знающих людей: через программу загрузки (написана не мной и нет исходников) на контроллер температуры отправлял файл конфигурации, но версия не совпала и при запуске меню перестало отображаться. Протокол обмена Modbus через COM порт. Необходимо скачать этот файл с еще не тронутого контроллера и залить в этот...возможно ли это? Отправленные данные во вложении
Вложения
Тип файла: zip Отправлено в устройство.zip (197.8 Кб, 16 просмотров)
0
2 / 2 / 6
Регистрация: 23.05.2012
Сообщений: 267
14.08.2012, 15:41  [ТС]
куда он записывает эти данные в контроллере, там операционка своя есть
0
0 / 0 / 0
Регистрация: 14.08.2012
Сообщений: 7
14.08.2012, 17:40
Процессор ColdFIre MC5307, внутренняя ОС вроде на базе unix
0
2 / 2 / 6
Регистрация: 23.05.2012
Сообщений: 267
15.08.2012, 09:29  [ТС]
тогда не должно быть проблем со скачиванием данных с нового контролера и запись их на новый, надо сервисную программу от фирмы производителя контролера
0
2 / 2 / 2
Регистрация: 12.10.2011
Сообщений: 44
08.04.2014, 21:59
Доброго времени суток, уважаемые форумчане, прошу помочь с одним вопросом по работе с последовательным портом. Устройство на мой запрос посылает ответ вида:
0х10 - DLE
0хХХ - ХХ - номер ответного пакета
... - данные
0х10 - DLE
0х03 - ETX конец пакета
Естественно, согласно протоколу, я знаю сколько каждый пакет содержит байт. Читаю заголовки, а затем читаю известное количество байт. Все бы хорошо, но устройство очень часто присылает лишние байты в пакете, правда это касается больших пакетов, с маленькими все более менее хорошо. Допустим, нужный мне пакет состоит из 484 байт, но на деле он приходит такой 1 из 10, остальные по 485, 486 и т.д. байт.
Подскажите, пожалуйста, как принять пакет он начала и до конца, не зная, сколько байт придет
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
08.04.2014, 22:15
...читать, накапливать данные, анализировать наличие DLE и ETX, при обнаружении ETX считать пакет принятым.
0
2 / 2 / 2
Регистрация: 12.10.2011
Сообщений: 44
09.04.2014, 00:33
Значит ничего экстраординарного. Просто игрался с одной программкой ComPort Toolkit, и она мне всегда выдавала пакет целиком, начиная от 0х10 и заканчивая 0х10, 0х03, всегда пришедший пакет на новой строке, хотя вряд ли она знала протокол.
Вчера я наткнулся на одну тему тут в просторах форума, где увидел,что как-то можно использовать свойство serialPort.NewLine, чтобы получать пакет полностью. В том примере был serialPort.NewLine = "\r\n", а в моем случае это 0х10 и 0х03, это ведь тоже символы. Только вот, как их правильно использовать, я не имею понятия.
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
09.04.2014, 07:46
Говорим о сферическом коне в вакууме... во-первых - дамп, снятый portmon в режиме отображения HEX в экспорте в txt в тему, дабы убедиться в ваших словах, во-вторых - ничего неизвестно о настройке таймаутов и размере буфера в вашей программе.
0
2 / 2 / 2
Регистрация: 12.10.2011
Сообщений: 44
09.04.2014, 10:12
Первый файл из ComPort Toolkit, именно в ней посылал запрос и получал ответ, а следил через Portmon. Не ругайтесь, если в Portmon не хватает байт, я поставил буфер на 800, но они почему-то все не отображались. Если понадобится, я еще сделаю.
Вложения
Тип файла: log Pormon.LOG (10.1 Кб, 5 просмотров)
Тип файла: txt Com Port Toolkit.txt (17.4 Кб, 3 просмотров)
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
09.04.2014, 20:51
Судя по логу из портмон сначала идет 4-х байтный запрос:
IRP_MJ_WRITE VCP0 SUCCESS Length 4: 10 39 10 03
В ответ всегда разной длины несколько пакетов:
IRP_MJ_READ VCP0 SUCCESS Length 20: 10 87 01 09 03 00 01 00 9D 62 B8 24 03 C9 EF 3F 46 08 03 C4

IRP_MJ_READ VCP0 SUCCESS Length 625: 00 00 02 06 00 00 00 00 00 00 00 00 00 00 00 00 0D B6 9C C4 00 00 02 05 00 00 00 00 00 00 00 00 00 00 00 00 63 D7 01 C4 00 00 02 FB 00 00 00 00 00 00 00 00 00 00 00 00 34 B0 57 C4 00 00 02 F9 00 00 00 00 00 00 00 00 00 00 00 00 C4 CD 55 C4 00 00 02 FA 00 00 00 00 00 00 00 00 00 00 00 00 CB 1D 8F C4 00 00 02 02 00 00 00 00 00 00 00 00 00 00 00 00 34 EA 86 C3 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 2D FF 79 C4 00 00 02 FF 03 00 01 00 CE 0D F2 99 0B 02 D5 3F 4D A3 3D C4 00 00 02 03 00 00 00 00 00 00 00 00 00 00 00 00 2A FF 61 C4 00 00 02 FE 11 00 01 00 C8 71 68 66 C6 FB D1 3F AE 30 BA C4 00 00 02 FD 01 00 01 00 C8 B2 FB DC F8 6E EB 3F 15 89 7D C4 00 00 02 04 00 00 00 00 00 00 00 00 00 00 00 00 45 9B 35 C4 00 00 02 01 00 00 00 00 00 00 00 00 00 00 00 00 E5 D5 B3 C4 00 00 01 0C 00 00 00
и никогда они не заканчиваются на 0x10 0x03 То, что вы видите в тулките говорит о вашем недопонимании работы утилиты, что даже видно по тому как вы дамп с нее сняли, там в окне есть указание направления передачи и приема.

Запрос (в тулките):
000041 09:57:18.484 43 00 00 10 03 C....
Ответ (в тулките):
000042 09:57:19.578 10 87 01 04 01 00 00 00 DB 3A F2 BF 13 F9 C9 3F .З......█:Є┐.∙╔?
000043 09:57:19.578 0E 79 87 C4 00 00 02 06 00 00 00 00 00 00 00 00 .yЗ─............
000044 09:57:19.578 00 00 00 00 0D B6 9C C4 00 00 02 05 00 00 00 00 .....╢Ь─........
000045 09:57:19.578 00 00 00 00 00 00 00 00 63 D7 01 C4 00 00 02 FB ........c╫.─...√
000046 09:57:19.578 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000047 09:57:19.578 00 00 02 F9 00 00 00 00 00 00 00 00 00 00 00 00 ...∙............
000048 09:57:19.578 00 00 00 00 00 00 02 FA 00 00 00 00 00 00 00 00 .......·........
000049 09:57:19.578 00 00 00 00 CB 1D 8F C4 00 00 02 02 00 00 00 00 ....╦.П─........
000050 09:57:19.578 00 00 00 00 00 00 00 00 34 EA 86 C3 00 00 02 00 ........4ъЖ├....
000051 09:57:19.578 00 00 00 00 00 00 00 00 00 00 00 00 1E 3F 06 C4 .............?.─
000052 09:57:19.578 00 00 02 FF 00 00 00 00 00 00 00 00 00 00 00 00 ...*............
000053 09:57:19.578 E2 25 15 C4 00 00 02 FC 01 00 00 00 33 46 17 21 т%.─...№....3F.!
000054 09:57:19.578 D5 32 ED 3F 9C 23 64 C4 00 00 02 FE 00 00 00 00 ╒2э?Ь#d─...■....
000055 09:57:19.578 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 FD ...............¤
000056 09:57:19.578 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000057 09:57:19.578 00 00 02 04 00 00 00 00 00 00 00 00 00 00 00 00 ................
000058 09:57:19.578 00 00 00 00 00 00 02 01 00 00 00 00 00 00 00 00 ................
000059 09:57:19.578 00 00 00 00 E5 D5 B3 C4 00 00 01 0C 00 00 00 00 ....х╒│─........
000060 09:57:19.578 00 00 00 00 00 00 00 00 9A 3F 9A C4 00 00 02 03 ........Ъ?Ъ─....
000061 09:57:19.578 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000062 09:57:19.578 00 00 01 0E 00 00 00 00 00 00 00 00 00 00 00 00 ................
000063 09:57:19.578 29 FF 5A C4 00 00 01 05 00 00 00 00 00 00 00 00 )*Z─............
000064 09:57:19.578 00 00 00 00 00 00 00 00 00 00 01 0F 00 00 00 00 ................
000065 09:57:19.578 00 00 00 00 00 00 00 00 BE 39 8B C4 00 00 01 06 ........╛9Л─....
000066 09:57:19.578 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000067 09:57:19.578 00 00 01 10 10 00 00 00 00 00 00 00 00 00 00 00 ................
000068 09:57:19.578 00 24 7F 35 C4 00 00 01 07 00 00 00 00 00 00 00 .$5─...........
000069 09:57:19.578 00 00 00 00 00 00 00 00 00 00 00 01 0A 00 00 00 ................
000070 09:57:19.578 00 00 00 00 00 00 00 00 00 BC A5 7A C4 00 00 01 .........╝еz─...
000071 09:57:19.578 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000072 09:57:19.578 00 00 00 01 12 00 00 00 00 00 00 00 00 00 00 00 ................
000073 09:57:19.578 00 00 00 00 00 00 00 01 13 00 00 00 00 00 00 00 ................
000074 09:57:19.578 00 00 00 00 00 00 00 00 00 00 00 01 02 01 00 00 ................
000075 09:57:19.578 00 AD 73 42 EA B5 39 C9 3F F4 59 FA C3 00 00 01 .нsBъ╡9╔?ЇY·├...
000076 09:57:19.578 03 01 00 00 00 C6 92 31 13 51 BD DB 3F 20 03 B2 .....╞Т1.Q╜█? .▓
000077 09:57:19.578 C4 00 00 01 08 00 00 00 00 00 00 00 00 00 00 00 ─...............
000078 09:57:19.578 00 C2 6B AD C4 00 00 01 0B 00 00 00 00 00 00 00 .┬kн─...........
000079 09:57:19.578 00 00 00 00 00 2D 7F 7B C4 00 00 05 03 00 03 00 .....-{─.......
000080 09:57:19.578 00 2E 9A 08 FA 8F 75 D1 3F 00 00 74 43 00 00 01 ..Ъ.·Пu╤?..tC...
000081 09:57:19.578 21 00 03 00 00 2E 9A 08 FA 8F 75 D1 3F 00 00 87 !.....Ъ.·Пu╤?..З
Запрос (в тулките):
000082 09:57:19.578 43 00 00 10 03
0
2 / 2 / 2
Регистрация: 12.10.2011
Сообщений: 44
09.04.2014, 22:04
Запрос в 4 байта я сам произвожу - в ответ приходит 1 пакет под номером 87, но портмон разбивает его на несколько частей. Первые два байта - заголовок 10 и 87, затем идут данные в количестве 32 * 20 и конец пакета 10 и 03, итого 644 байта. В портмоне отображаются размеры полученных пакетов, сумма которых лежит в пределах 644 байт.
В тулките все пакеты заканчиваются на 10 03, это не запросы. Возникло недопонимание, потому что я выложил только ответ от устройства. И дамп я выложил правильный. Дико извиняюсь за то, что в портмоне не хватило место остальным байтам, потому что это, возможно, даже не половина пакета, я не считал. Я указал размер буфера в настройках программы в количестве 800, но они все равно не отобразились все. Предупреждал об этом в предыдущем посте.
В любом случае, мне это никак не поможет. Я знаю, как работает протокол, я успешно могу принимать и разбирать годные пакеты.
Я ведь привел пример того, как программма toolkit принимает пакет полностью, совсем не зная протокола. Примерно тоже самое я хочу реализовать у себя, но не имею представления, даже за что ухватиться, только вот за этот serialPort.NewLine
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
09.04.2014, 22:23
portmon ничего не разбивает, он отображает именно так как идут запросы и ответы. В ответах в portmon никаких 10 03 даже не пахнет, есть только запросы по 4 байта, это видно даже невооруженным глазом. Если вы выложили не все, то выложите все, проверим вас еще раз.

По поводу того, что в нем не все поместилось - чушь, дамп можно снять сколь угодно большой в файл.

В любом случае, мне это никак не поможет. Я знаю, как работает протокол, я успешно могу принимать и разбирать годные пакеты.
если будете партизанить - никак не поможет и меня совершенно не волнует, что вы знаете протокол, вы его не предоставили.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.04.2014, 22:23
Помогаю со студенческими работами здесь

Как принять заранее неизвестное количество аргументов и передать их в конструктор?
Допустим есть функция которая создает объект template<typename T> T* createObject(typename ...params) { return new...

Принять массив байт через сокет
Добрый вечер.. Есть соединение на сокетах. С сервера идут сообщения по 8 байт. Как их принимать в бесконечном потоке пока есть...

Принять через uart байт и записать его в память
Вобщем, если верить преподавателю, этот код надо немного переделать для желаемого эффекта .device ATmega8 .nolist .include...

MS Comm как принять 1 байт
Поставил заворот (прд.-прм.) посылаю 1-14 байт(символов) не принимает как только посылаю 15 байт принимает из них всего 8 вот пример ...

Как в симуляторе "принять" байт по UART?
Всем привет! Вопрос такого плана... Как в симуляторе студии "принять" байт по UART? Т.е. например надо отладить прерывание по приему, а для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru