![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
Тиль |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 27.2.2006 Репутация: нет Всего: нет |
Есть контроллер. К нему прилагается описание производителя. необходимо считать данные с данного контроллера, но с теми параметрами, которые есть в документации не получается. ВОт мой код:
в чем может быть пробьлема?данных при чтении нет просто... Присоединённый файл ( Кол-во скачиваний: 36 ) ![]() --------------------
Казалось нам пипец, оказалось что не казалось |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: нет Всего: 97 |
Тиль, по коду мало чего могу сказать, но вот первое что бросилось в глаза - неправильно составленная команда. Должно быть восемь байт (01 03 00 2D 2E 2F 89 BF). 89 BF - это контрольная сумма. Но даже если бы запрос был правильным, то вам пришли бы не данные, а исключение: 2E, 2F - это количество считываемых регистров. Столько регистров в тех приборах нет, и максимальное количество передаваемых байт равно 133.
|
|||
|
||||
Тиль |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 27.2.2006 Репутация: нет Всего: нет |
а как тогда их считать? с другим блоком у меня так канало
ВОТ:
--------------------
Казалось нам пипец, оказалось что не казалось |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: нет Всего: 97 |
Тиль, расскажите мне какой смысл вкладываете в этот набор данных.
|
|||
|
||||
Тиль |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 27.2.2006 Репутация: нет Всего: нет |
в них содержатся значения о контроллере, которые мне необходимо считать.......или вы про что спрашиваете?
--------------------
Казалось нам пипец, оказалось что не казалось |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: нет Всего: 97 |
Тиль, нет, я хотел, что бы вы рассказали мне что означает каждый байт в ваших посылках. У меня просто складывается впечатление, что вы совершенно незнакомы с модбасом. Команда 03 выглядит следующим образом:
|адрес устройства|команда|первый регистр (ст.б.)|первый регистр (мл.б.)|количество регистров(ст.б.)|количество регистров(мл.б.)|crc16(ст.б.)|crc16(мл.б.)| Таким образом получается, что вы пытаетесь запросить 11823 регистров (это $02E, $02F в вашем запросе) начиная с регистра номер 2D. Правильной контрольной суммы вы не предоставили и прибор имеет полное право проигнорировать ваш запрос. Запрашивать надо столько регистров, что бы ответ не превышал 133 байта. Т.е. максимум 64 регистра. О том как считать crc16 можно почитать например здесь. Если верить описанию прибора из аттача, то "канать" ну никак не могло, ибо функция 04 приборами не поддерживается. Добавлено через 2 минуты и 57 секунд И да, для отладки работы c различными приборами лучше всего пользоваться различными терминальными программами с поддержкой нужных протоколов. Для работы с модбасом рекомендую использовать modbus tester. |
|||
|
||||
Тиль |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 27.2.2006 Репутация: нет Всего: нет |
в том то и дело что незнаком...
--------------------
Казалось нам пипец, оказалось что не казалось |
|||
|
||||
UniBomb |
|
||||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: нет Всего: 97 |
Так с этого и надо было начинать. Ознакомление с протоколом можно начать с этой страницы. Так же в интернетах не так уж и редко встречаются описания протокола на русском. Что можно добавить: из описания прибора видно, что поддерживаются функции 3 и 6. Функция 3 - это чтение регистров (одного или нескольких) хранения, функция 6 соответсвенно запись (правда только одного). Формат функции чтения я уже приводил выше. С учётом описания прибора функция может иметь следующий вид:
Читать 16 регистров (т.е. все) начиная с адреса 2D. ответ будет такого вида: 01 03 20 xx xx xx .... xx xx crc crc Число 20 (в 16-ричной сс) означает количество байт данных в поле данных (это байты xx). Функция 06 ничем не сложнее и имеет схожий синтаксис:
Если команда успешно выполнена, то ответ совпадает с запросом. Что касается CRC16 - в интернете полно реализаций (например здесь), только следует помнить, что для модбаса полином должен быть A001 и начальное сначение FFFF. Это сообщение отредактировал(а) UniBomb - 22.9.2010, 13:20 |
||||
|
|||||
northener |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1361 Регистрация: 2.9.2010 Репутация: нет Всего: 20 |
А для кого мы пишем описания, документацию и т.п.? И это при том при всём, что писать документацию - нет более ненавистной работы! -------------------- Но только лошади летают вдохновенно. Иначе лошади разбились бы мгновенно! |
|||
|
||||
Тиль |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 27.2.2006 Репутация: нет Всего: нет |
все нормально все читается за исключением одного: у меня в первом регистре лежит четырехзначтное число, вот оно то и не читается..
мне выдается такой ответ от прибора: /1/3/32/8/50/165/0/0/0/170/0/132/0/0/0/0/0/248/0/209/255/255/6/92/0/9/0/0/0/0/0/0/0/0/33/50 я нашел программу производителя которая считывает с этого прибора, там показатели такие:см.аттач сразу видно что все данные нашлись: /1/3/32/8/50/0/165/0/0/0/170/0/132/0/0/0/0/0/248/0/209/255/255/6/92/0/9/0/0/0/0/0/0/0/0/33/50 а вот верхнее значение, которое стоит самым первым нет(2126) в чем может быть дело? я так понял из этого ответа: 1-адрес устройства,3-функция чтения, 32-количество отданных байт, и вот в 8/50 и кроется это число 2126...только вот как прочитать его? все очень оказалось просто:8*256+50=2098 Это сообщение отредактировал(а) Тиль - 30.9.2010, 14:03 Присоединённый файл ( Кол-во скачиваний: 15 ) ![]() --------------------
Казалось нам пипец, оказалось что не казалось |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: нет Всего: 97 |
/*невнимательно прочитал последнее сообщение*/
Это сообщение отредактировал(а) UniBomb - 1.10.2010, 10:53 |
|||
|
||||
tyro |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 8.10.2006 Репутация: нет Всего: нет |
Подскажите пожалуйста, а как разделить фреймы (то есть определить начало следующего сообщения) при приеме информации по протоколу modbus rtu?
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |