Форум TRACE MODE: техническая поддержка   
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 5 » TRACE MODE 5 бесплатная версия / TRACE MODE 5 Free version » MODBUS - проблема с 16 функцией

   
Автор / Author Тема / Topic: MODBUS - проблема с 16 функцией
holod
Junior Member / Новичок
Участник № / Member № 1065


Icon 1 отправлено / posted      Профиль для / Profile for holod           Редактировать/удалить сообщение / Edit/Delete Post 
Здравствуйте!
У меня такая ситуация: необходимо считывать и записывать 4 регистра контроллера по протоколу MODBUS.
Контроллер требует что-бы операции с этими регистрами проводились блочно, по одному не отдает.
Для чтения я сделал четыре канала типа INPUT, подтипа MODBUS с дополнением Rout Word(3), вид представления HEX. Замечательно читаются регистрики. Если последить за портом видно что читаются они одним блоком.
Для записи тоже четыре канала типа OUTPUT, подтип MODBUS, дополнение W Word(16), вид HEX. Вот тут начинаются сплошные вопросы: выпали флаги недостоверности, записи нетушки. Смотрим в порт- драйвер формирует 4 запроса по одному регистру. Кстати при первом после старта МРВ пересчете драйвер пытается писать второй регистр из четырех и только на следующем пересчете начинает с первого.
Для первого из четырех регистров контроллер возвращает код ошибки 03 (ошибка данных), для остальных 02 (ошибка адреса). Написал на С тестовую программку - той-же 16-ой функцией пишу в эти регистры те-же самые значения. Пишутся. Пытаюсь писать отдельными регистрами возвращаются те-же коды ошибок.
Так-же не понятно назначение настройки Q - если это количество регистров то совсем не понятно как это использовать. Автопостроение всегда ставит Q=1. При установке этого значения больше 1 никакой разницы не заметил.
Подскажите пожалуйста, что я делаю не так как надо.

Сообщения / Posts 3 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 2 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
При чтении действительно все четыре канала уложились в один групповой запрос. ТМ5 укладывает каналы, которые в базе идут друг за другом с одной и той же функцией MODBUS и по порядку идущим смещением адреса в один групповой запрос. Поэтому Вы и наблюдали один запрос на чтение четырех байт. А вот для записи такое не пройдет - ТМ будет формировать запрос для каждого канала индивидуально. Попробуйте функцию W Float(16) - это будет как раз посылка 4-х байт.

Настройка Q в каналах ModBus чисто информативная и никакой функциональности ненесет. Можно не обращать на нее внимания.

Сообщения / Posts 17317 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
holod
Junior Member / Новичок
Участник № / Member № 1065


Icon 1 отправлено / posted      Профиль для / Profile for holod           Редактировать/удалить сообщение / Edit/Delete Post 
Надо писать в контроллер 4 16-ти разрядных регистра. Если не ошибаюсь, по стандарту протокола именно этим и занимается 16-я функция.
Как-же быть, получается что ТМ5 не может писать блочно по MODBUS? Писать свой драйвер?

Сообщения / Posts 3 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 5 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Да уж - 8 байт ТМ блоком не отправит, максимум 4.
Выход - только в собственном драйвере.
А что за такое устройство, которое категорически отказывается принять байт или послово как самостоятельную посылку? Странно... [crazy / сумасшедший] Это первое, что должно реализовывать устройство из ModBus, ведь блоковый запрос или блоковая посылка - это расширение для стандартного кадра протокола ModBus, но никак не его основа!

Сообщения / Posts 17317 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
holod
Junior Member / Новичок
Участник № / Member № 1065


Icon 1 отправлено / posted      Профиль для / Profile for holod           Редактировать/удалить сообщение / Edit/Delete Post 
И все-же, в настройках канала MODBUS есть TYPE,которая предлагает выбор:"Modbus" и "Modbus(нет групповой записи)"-это как можно понимать?
В разделе документации посвященной написанию драйверов сказано что драйвер может формировать блоковые запросы, при этом упоминается флаг принадлежности канала к блоку. Почему этот флаг недоступен из инструменталки ТМ5? Неужели из 15000 инсталяций ТМ никто из разработчиков не сталкивался с подобной проблемой? Вам не кажется что это,мягко говоря, ложка дегтя....? Ведь реализация блочной записи не сложнее реализации блочного чтения. Блочное чтение есть а....непонятно,честное пионерское [Недоумение / Confused]
Железка эта называется Sepam производства SchneiderElectric. В этих четырех регистрах у него лежат внутренние дата/время, запрет пословного чтения/записи это своего рода защита от дурака.
И тогда еще вопрос: из доки непонятно,драйвер надо писать на WinAPI или можно использовать MFC DLL?

Сообщения / Posts 3 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 2 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
По поводу блочной записи - дело в том, что все внешние и встроенные драйвера через последовательный интерфейс в ТМ работают по одному и тому же алгоритму TYPE_11, который не поддерживает групповой записи, поэтому это не только минус реализации нашего ModBus'а.
Обычно - никто не работает с более чем четырмя байтами по ModBus (формат Float), поэтому никто и не сталкивался с такой проблемой, потому как все что больше 4-х байт обычно устройство позволяет записать раздельно.
Флаг принадлежности к групповому запросу система выставляет сама.
ТМ все равно что будет использоваться в драйвере - WinAPI или MFC. В драйвре типа TYPE_11 - вся обработка СОМ-порта выполяется нашим сервером, поэтому в самом драйвере Вы реализуете только логику формирования и разбора пакетов. А в драйвере TYPE_12 - обработку "носителя" Вы можете реализовать сами, и это может быть не только СОМ-порт.

Сообщения / Posts 17317 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

   Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2