|
2 / 2 / 6
Регистрация: 23.05.2012
Сообщений: 267
|
|
Как через serialport принять неизвестное количество байт23.05.2012, 14:26. Показов 5019. Ответов 23
Метки нет (Все метки)
0
|
|
| 23.05.2012, 14:26 | |
|
Ответы с готовыми решениями:
23
Как инициализировать заранее неизвестное количество компонентов? Узнать длину букв (не байт) буфера SerialPort'а Чтение и проверка троек байт с последовательного порта, serialPort.Read() |
|
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
|
|
|
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
|
|
| 23.05.2012, 20:59 | |
|
Анализировать присланное, пока не будет получено что-то, похожее на конец.
То есть что-то одно должно быть известно: количество или признак конца блока данных. Иначе это задача для отдельного потока с циклическим чтением строк или байтов (от задачи зависит) и вызовом соответствующего делегата при получении чего либо.
0
|
|
|
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
|
|
|
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 порт. Необходимо скачать этот файл с еще не тронутого контроллера и залить в этот...возможно ли это? Отправленные данные во вложении
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
|
|
|
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
|
|
|
|
|
| 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, но они почему-то все не отображались. Если понадобится, я еще сделаю.
0
|
|
|
|
||||||
| 09.04.2014, 20:51 | ||||||
|
Судя по логу из портмон сначала идет 4-х байтный запрос:
То, что вы видите в тулките говорит о вашем недопонимании работы утилиты, что даже видно по тому как вы дамп с нее сняли, там в окне есть указание направления передачи и приема.Запрос (в тулките):
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
|
|
|
|
||
| 09.04.2014, 22:23 | ||
|
portmon ничего не разбивает, он отображает именно так как идут запросы и ответы. В ответах в portmon никаких 10 03 даже не пахнет, есть только запросы по 4 байта, это видно даже невооруженным глазом. Если вы выложили не все, то выложите все, проверим вас еще раз.
По поводу того, что в нем не все поместилось - чушь, дамп можно снять сколь угодно большой в файл.
0
|
||
| 09.04.2014, 22:23 | |
|
Помогаю со студенческими работами здесь
20
Принять массив байт через сокет
MS Comm как принять 1 байт Как в симуляторе "принять" байт по UART? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
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 .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|