This is topic MODBUS - проблема с 16 функцией in forum TRACE MODE 5 бесплатная версия / TRACE MODE 5 Free version at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/18/t/000169.html

Posted by holod (Участник № / Member № 1065) on :
 
Здравствуйте!
У меня такая ситуация: необходимо считывать и записывать 4 регистра контроллера по протоколу MODBUS.
Контроллер требует что-бы операции с этими регистрами проводились блочно, по одному не отдает.
Для чтения я сделал четыре канала типа INPUT, подтипа MODBUS с дополнением Rout Word(3), вид представления HEX. Замечательно читаются регистрики. Если последить за портом видно что читаются они одним блоком.
Для записи тоже четыре канала типа OUTPUT, подтип MODBUS, дополнение W Word(16), вид HEX. Вот тут начинаются сплошные вопросы: выпали флаги недостоверности, записи нетушки. Смотрим в порт- драйвер формирует 4 запроса по одному регистру. Кстати при первом после старта МРВ пересчете драйвер пытается писать второй регистр из четырех и только на следующем пересчете начинает с первого.
Для первого из четырех регистров контроллер возвращает код ошибки 03 (ошибка данных), для остальных 02 (ошибка адреса). Написал на С тестовую программку - той-же 16-ой функцией пишу в эти регистры те-же самые значения. Пишутся. Пытаюсь писать отдельными регистрами возвращаются те-же коды ошибок.
Так-же не понятно назначение настройки Q - если это количество регистров то совсем не понятно как это использовать. Автопостроение всегда ставит Q=1. При установке этого значения больше 1 никакой разницы не заметил.
Подскажите пожалуйста, что я делаю не так как надо.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
При чтении действительно все четыре канала уложились в один групповой запрос. ТМ5 укладывает каналы, которые в базе идут друг за другом с одной и той же функцией MODBUS и по порядку идущим смещением адреса в один групповой запрос. Поэтому Вы и наблюдали один запрос на чтение четырех байт. А вот для записи такое не пройдет - ТМ будет формировать запрос для каждого канала индивидуально. Попробуйте функцию W Float(16) - это будет как раз посылка 4-х байт.

Настройка Q в каналах ModBus чисто информативная и никакой функциональности ненесет. Можно не обращать на нее внимания.
 
Posted by holod (Участник № / Member № 1065) on :
 
Надо писать в контроллер 4 16-ти разрядных регистра. Если не ошибаюсь, по стандарту протокола именно этим и занимается 16-я функция.
Как-же быть, получается что ТМ5 не может писать блочно по MODBUS? Писать свой драйвер?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Да уж - 8 байт ТМ блоком не отправит, максимум 4.
Выход - только в собственном драйвере.
А что за такое устройство, которое категорически отказывается принять байт или послово как самостоятельную посылку? Странно... [crazy / сумасшедший] Это первое, что должно реализовывать устройство из ModBus, ведь блоковый запрос или блоковая посылка - это расширение для стандартного кадра протокола ModBus, но никак не его основа!
 
Posted by holod (Участник № / Member № 1065) on :
 
И все-же, в настройках канала MODBUS есть TYPE,которая предлагает выбор:"Modbus" и "Modbus(нет групповой записи)"-это как можно понимать?
В разделе документации посвященной написанию драйверов сказано что драйвер может формировать блоковые запросы, при этом упоминается флаг принадлежности канала к блоку. Почему этот флаг недоступен из инструменталки ТМ5? Неужели из 15000 инсталяций ТМ никто из разработчиков не сталкивался с подобной проблемой? Вам не кажется что это,мягко говоря, ложка дегтя....? Ведь реализация блочной записи не сложнее реализации блочного чтения. Блочное чтение есть а....непонятно,честное пионерское [Недоумение / Confused]
Железка эта называется Sepam производства SchneiderElectric. В этих четырех регистрах у него лежат внутренние дата/время, запрет пословного чтения/записи это своего рода защита от дурака.
И тогда еще вопрос: из доки непонятно,драйвер надо писать на WinAPI или можно использовать MFC DLL?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
По поводу блочной записи - дело в том, что все внешние и встроенные драйвера через последовательный интерфейс в ТМ работают по одному и тому же алгоритму TYPE_11, который не поддерживает групповой записи, поэтому это не только минус реализации нашего ModBus'а.
Обычно - никто не работает с более чем четырмя байтами по ModBus (формат Float), поэтому никто и не сталкивался с такой проблемой, потому как все что больше 4-х байт обычно устройство позволяет записать раздельно.
Флаг принадлежности к групповому запросу система выставляет сама.
ТМ все равно что будет использоваться в драйвере - WinAPI или MFC. В драйвре типа TYPE_11 - вся обработка СОМ-порта выполяется нашим сервером, поэтому в самом драйвере Вы реализуете только логику формирования и разбора пакетов. А в драйвере TYPE_12 - обработку "носителя" Вы можете реализовать сами, и это может быть не только СОМ-порт.
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2