Modbus на Pascal |
Ответить | Страница <12 |
Автор | |
Новичок Присоединился: 18 Апрель 2006 Категория: Russian Federation Online Status: Offline Публикации: 30 |
Опубликовано: 01 Июнь 2007 14:42 |
А теперь куча вопросов. 1. Как определить, в каком режиме пришел запрос? Если первый байт сообщения 3Ah - это ASCII, иначе RTU? А если передает устройство с адресом 3Ah в режиме RTU? Понимаю, что мало чего пока понимаю в данном протоколе, поэтому прошу громко не смеяться в случае чего. :) |
|
Действительный член Присоединился: 15 Январь 2004 Категория: Russian Federation Online Status: Offline Публикации: 805 |
|
1. Как определить, в каком режиме пришел запрос? Если первый байт сообщения 3Ah - это ASCII, иначе RTU? А если передает устройство с адресом 3Ah в режиме RTU? В принципе, все устройства в сети должны бы быть настроены одинаково - или аски или рту.
Время, за которое успеет передаться 3,5 символа (байта). Т.е. пакет идет непрерывно и считается что он завершен, если в течении времени достаточном для прохода более 3 байт ничего нет. Четвертый байт (т.е. не байт, а время достаточное для прохода 4 байтов) и далее считается уже следующим пакетом. Это просто пауза между пакетами. В отличие от аски, где используется символы начала и конца пакета.
Надо смотреть в описании устройства. Думаю, что скорее всего это дискр.выходы (ссылка 0х).
Аналоговые входы, например. Переменные, которые можно только считать из контроллера и нельзя записать, в отличие от регистров 4х (аналоговые выходы). |
|
Действительный член Присоединился: 15 Январь 2004 Категория: Russian Federation Online Status: Offline Публикации: 805 |
|
Остальные вопросы с 5 по 15 - это из разряда "оно надо?". :) Вряд ли понадобится, только если прибор серьезный разрабатывается. |
|
Новичок Присоединился: 18 Апрель 2006 Категория: Russian Federation Online Status: Offline Публикации: 30 |
|
"В принципе, все устройства в сети должны бы быть настроены одинаково - или аски или рту" Хочется сделать универсальный модуль, который будет работать в любом режиме. Чтобы потом не переделывать, если придется внедряться в сеть с другими режимом передачи. Поэтому вопрос остается в силе. "Время, за которое успеет передаться 3,5 символа (байта)." Ясно, т.е. фактически это таймаут приема, при превышении которого пакет считается завершенным. В описании протокола дается такая формула: Следующая формула оценивает время передачи: По ней это время и расчитывается? Если да, то что есть "счетчик символов"? "Переменные, которые можно только считать из контроллера и нельзя записать, в отличие от регистров 4х (аналоговые выходы)." Т.е. вы хотите сказать, что регистры, доступные только для чтения, следует делать как 3х? Например регистры, хранящие результаты некоторых измерений. "Остальные вопросы с 5 по 15 - это из разряда "оно надо?". :) Вряд ли понадобится, только если прибор серьезный разрабатывается." Может быть и не надо. В таком случае буду возвращать что-ниубдь вроде "функция не поддерживается" или вообще ничего. |
|
Действительный член Присоединился: 15 Январь 2004 Категория: Russian Federation Online Status: Offline Публикации: 805 |
|
...в сеть с другими режимом передачи. Поэтому вопрос остается в силе. Ваше право. В принципе можно как вы задумали изначально с автоопределением первого символа. Но адрес 3а в рту теряется.
По ней это время и расчитывается? Если да, то что есть "счетчик символов"? Счетчик символов, очевидно, и есть те самые 3,5 байта. :)
Т.е. вы хотите сказать, что регистры, доступные только для чтения, следует делать как 3х? Например регистры, хранящие результаты некоторых измерений. Ага. Переменные которые можно и прочитать и записать извне - в 4х. |
|
Новичок Присоединился: 18 Апрель 2006 Категория: Russian Federation Online Status: Offline Публикации: 30 |
|
Следующий вопрос. В описании протокола говорится про ответный фрейм: Адрес подчиненного Функция Счетчик байт 4 Сколько байт занимает Счетчик байт? 4 - это как раз то самое количество или что это?
|
|
Новичок Присоединился: 18 Апрель 2006 Категория: Russian Federation Online Status: Offline Публикации: 30 |
|
По поводу подсчета LRC для ASCII-сообщения. Что cуммировать, сами байты после их преобразования из НЕХ или их HEX коды? Например, при проверке запроса на Slave с адресом 5 с функцией 03, Суммировать байты 5+3+..... ИЛИ 30Н+35Н+30Н+33Н+.... Создал несколько регистров на OPC-сервере, потом обращаюсь к устройству. Получаю следующий запрос (запрос на чтение регистра 1104 с устройства 1 функцией 3): 3A 30 31 30 33 30 34 35 30 30 30 30 31 41 37 0D 0A Судя по всему, 41 37 - это LRC.Ее значение A7h = 167. Читаю описание протокола. "Алгоритм генерации LRC: Исключить видимо следует еще и 2 символа, описывающие собственно LRC. Т.е. пропустить 1 байт в начале и 4 байта в конце. Делаю для вышеупомянутого запроса соответствующие действия (len-длина сообщения - в данном случае 17 байт, lrc имеет тип byte): lrc:=0; Получаю B2h = 178 В чем ошибка? |
|
Новичок Присоединился: 18 Апрель 2006 Категория: Russian Federation Online Status: Offline Публикации: 30 |
|
Дополнение к последнему сообщению. Использую OPC-сервер KEPServerEx V4.0.
|
|
Ответить | Страница <12 |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |