Здравствуйте. У меня такой вопрос к Вам. Необходимо настроить связь с устройством по протоколу MODBUS. Физически - это RS-485 через радио модемы (радио модемы создают прозрачный канал). В связи с этим нужна очень тонкая настройка приемо-передачи. при использовании стороннего OPC-сервера всё работает отлично, так как явно присутствуют настроики всевозможных таймаутов, периодов опроса и т.д. Хотелось бы от вас получить продробнейшие инструкции по настройке как говорится "от и до", в т.ч. настроики диагностики связи. Заранее благодарен за ответ.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Специфической настройкой, применяемой на практике при работе через прозрачный радиоканал, является "Включение передатчика – задержка (в миллисекундах) начала передачи данных после включения передатчика (реализуется только для узла со статусом MASTER);"
Остальные таймауты задаются в настройках COM-порта согласно документации.
Период опроса задается периодом обработки канала, реализующего соответствующий запрос. При необходимости может задаваться "RS-передача – задержка (в миллисекундах) между транзакциями (процедурами ЗАПРОС/КОМАНДА+ОТВЕТ)." Этот параметр тоже влияет на общую периодичность запросов в полудуплексном режиме обмена.
Posted by toxachilag (Участник № / Member № 6040) on :
Спасибо, разобрался, связь стала адекватной по крайней мере. Скажите, можно от вас получить подробные инструкции по диагностике связи по средствам ModBus. Я создал в источники/приемники группу диагностика и сервис, там группа диагностика и в ней компонент @e_MODBUS_1.Как его разобрать далее - не очень понимаю..подскажите пожалуйста. Да и что в этом компоненте настраивается? В разделе дополнительно есть некий "параметр" за что он отвечает?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Канал, привязанный к диагностической переменной @e_MODBUS, возвращает результат диагностики - код ошибки в соответствии с "Приложения/Коды диагностируемых ошибок". У этой переменной никакие настройки не предусмотрены.
Кроме этого можно установить в конфигурационном файле узла *.cnf ключ DEBUGON=200 Тогда в протоколе профайлера будет дополнительная информация по обмену по последовательному интерфейсу.
Можно также перехватить трафик COM-порта с помощью внешних утилит, например, PortMon. Тогда в протоколе перехвата будет полная информация по COM-порту.
Posted by toxachilag (Участник № / Member № 6040) on :
В разделе дополнительно (при вызове окна редактора переменной @e_MODBUS) есть некий "параметр" за что он отвечает?Если выставляю 0, то в начале опроса 2-х устройств по протоколу Modbus сначала данная переменная возвращает 0, а через некоторое время 1033 - что это значит?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Конкретно для переменной @e_MODBUS этот "Параметр" не используется и должен быть оставлен равным 0.
Возвращаемый код 1033 равен 0x409. Это означает, что по COM5 на запрос не было получено полного ответа за время заданного таймаута ожидания ответа.
Старший байт - номер COM-порта, уменьшенный на 1, младший байт код ошибки.
Posted by toxachilag (Участник № / Member № 6040) on :
Если данная переменная возвращает 0 - это означает что всё хорошо?Сбрасывается ли она в 0 при исправлении ошибки?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
0 - ОШИБОК НЕТ.
Posted by toxachilag (Участник № / Member № 6040) on :
Сбрасывается ли она в 0 при исправлении ошибки?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
После исчезновения ошибки автоматически сбрасывается в 0 признак недостоверности в соответствующем канале обмена.
Диагностическая переменная запоминает даже сбойную ошибку. Сброс этой переменной в 0 осуществляется принудительно после исправления ситуации. Для этого надо создать аналогичную переменную типа OUT и в привязанный к ней канал типа OUT послать "0".
Posted by denchik (Участник № / Member № 6225) on :
Дабы не плодить темы, задам вопрос здесь. Задача практически такая же. С одной стороны - контроллеры расхода(slave)FloBoss 107 3 шт с другой - ПК(master) с TM6 Передача от slave`ов к master`у через радио модемы с прозрачным радиоканалом. Протокол - modbus rtu. С ПК регистры прекрасно читаются с помощью Modbus Poll. Параметры slave 19200-8-n-1 (данные(2-х байтовое число) лежит в 100(без смещения) holding(4xxxxx)регистре) Настройка порта на ПК такая же. Настройка com-порта в ТМ: Номер порта - СОМ1 Назначение - Мастер Скорость - 19200 Базовый адрес - 0х3f8 Контроль четности - 8-1-n Прерывание - 4(везде копался, так и не понял что это за прерывание) Управление передачей - no(в modbus poll проверял при отключенных DSR,CTS,RTS) Таймаут - 2000 RS - передача - 700 Вкл передатчика - 0 Задержка запроса - 0 CRC16 - no Переменная: 1. Создал в Источники/Приемники Rout_Word(3) 2. Drag-n-dropнул ее в каналы 3. Добавил экран -> добавил переменную в аргументы экрана(тип - IN, тип данных оставил REAL(пробовал менять на int и usint)) 4. Создал элемент "текст", drag-n-dropнул созданный аргумент в поле текста. не работает Перечитал все темы этом форуме - все делаю вроде правильно. Смотрел видео - то же самое Даже пробовал брандмауэр отключать Сканирую порт Portmon-ом: Когда опрашиваю Modbus Poll-ом - идет 00000493 mbpoll.exe IOCTL_SERIAL_PURGE Serial0 SUCCESS Purge: TXCLEAR RXCLEAR 00004311 mbpoll.exe IRP_MJ_WRITE Serial0 SUCCESS Length 8: ...d.... 40835289 mbpoll.exe IRP_MJ_READ Serial0 SUCCESS Length 7: ....8.. Опрашиваю RTM: 00000369 rtc.exe IOCTL_SERIAL_PURGE Serial0 SUCCESS Purge: TXCLEAR RXCLEAR 00000369 rtc.exe IOCTL_SERIAL_PURGE Serial0 SUCCESS Purge: TXCLEAR RXCLEAR 00000369 rtc.exe IOCTL_SERIAL_PURGE Serial0 SUCCESS Purge: TXCLEAR RXCLEAR Посмотрите пожалуйста, подскажите, может я чего то упустил ?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Судя по протоколу перехватчика, RTC не осуществляет обмена. Задайте в файле конфигурирования запуска узла *.cnf (см."Приложения/Задание параметров работы мониторов") ключ DEBUGON=")) В протоколе профайлера будет дополнительная информация об инициализации COM-порта, количестве каналов, найденных для обмена по этому COM-порту и ошибках обмена.
Posted by denchik (Участник № / Member № 6225) on :
DEBUGON=200? Я пробовал добавлять файл TMcom_0.cnf Протокол профайлера сохраняется в <имя_проекта>.txt? Я так понимаю в профайлере будет запись кода ошибки, а где посмотреть значение кода?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Коды ошибок документированы в "Приложениях".
Posted by denchik (Участник № / Member № 6225) on :
(9:34:35) INF_LOAD:Starting... kuug_kazgpz_0 (9:34:35) INF_RTM:Detected NT6.RTM 6.1 (9:34:35) INF_RTM:Professional TRACE MODE 6 Profiler T-Factory RTM+ ver. 6.09.0 (9:34:35) ._.:RTM (9:34:35) INF_LOAD:max channel = 65535 (9:34:35) INF_LOAD:Load Channels = 2 (9:34:35) INF_LOAD:Templates=1 (math=0 sql=0 scr=1 doc=0 pnl=0) (9:34:35) INF_LOAD:Objects = 3 (9:34:35) INF_RTM:Timer=0.055s CalcLoop=550ms (9:34:35) INF_LOAD:LoadTime=0.527s CalcPeriod=550ms (9:34:35) INF_RTM:available(MB): pm=1929 vm=2047; free(MB): pm=645 vm=1945 em=0 after load (9:34:35) INF_RTM:total use(MB): pm=1283 vm=102 after load (9:34:35) INF_RTM:use(MB): pm=19(19) vm=21(21) pf=0 after load (9:34:35) INF_RTM:gh:70 uh:80 hh:94 after load (9:34:43) INF_RS:init string is \\.\COM1: baud=19200 parity=N data=8 stop=1 (9:34:43) WRN_RS:found channels = 1 (9:34:43) INF_IP:hostname is workstation (9:34:43) INF_IP:card0 addr=0.0.0.0 (9:34:43) INF_IP:card1 addr=192.168.1.60 (9:34:43) INF_RTM:start time is 0.09 s (9:34:43) INF_RTM:total use(MB): pm=1299 vm=229 after start (9:34:43) INF_RTM:use(MB): pm=34(40) vm=121(121) pf=6478 after start (9:34:43) INF_RTM:gh:1527 uh:153 hh:237 after start (9:34:43) INF_FLT:ModeSwitch e15=0000 e18=0000 e20=0000 [0] (9:34:43) INF_RTM:mode=2(Work) e15=00 e18=00 e20=00 [src4] (9:34:43) INF_FLT:No detect condition (9:34:43) INF_GRAPH:scr:1:popup=0 scrref=0 trend=0,0 update=1 (9:34:53) INF_RTM:stoping... (9:34:53) INF_RTM:mode=5(Stop) e15=00 e18=00 e20=00 [src0] (9:34:54) INF_RS:COM1 TRANSACTION=0 ERROR=0 TIME=10.451 BYTES=0 (9:34:54) INF_RTM:stop time is 0.666 s (9:34:54) INF_RTM:number of calculation = 13 (9:34:54) INF_RTM:END OF WORK
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Задайте DEBUGON=F0000210
Прогоняйте под профайлером не 10 сек., а хотя бы пару минут.
Проверьте тип переменной в источниках и тип канала, связанного с этой переменной. Должно быть везде INPUT
Изучайте протокол профайлера.
Posted by denchik (Участник № / Member № 6225) on :
(14:8:3) ERR_RS:COM1 err=9 ch=Rin_Word(4)[4] В справке, в "Коды диагностируемых ошибок" не нашел...
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Коды диагностируемых ошибок DEC-коды ошибок, диагностируемых МРВ:
1, ERR_RT_FILE – файл не открыт;
В CALL.Document(Report) – ошибка открытия/создания документа;
2, ERR_RT_SEEK – ошибка позиционирования (в архиве, списке и т.п.);
3, ERR_RT_WRITE – ошибка записи;
В CALL.Document(Report) – ошибка записи документа;
4, ERR_RT_READ – ошибка чтения;
5, ERR_RT_MEM – ошибка работы с памятью;
В CALL.Document(Report) – не хватает памяти для генерации документа;
6, ERR_RT_LIST – ошибка списка;
7, ERR_RT_FORMAT – ошибка формата;
В CALL.Document(Report) – невозможно вставить картинку или документ в документ;
8, ERR_RT_COUNT – неверное число символов;
9, ERR_RT_TIMEOUT – превышен таймаут; !!!!!!!!
10, ERR_RT_RESP – ошибка ответа;
11, ERR_RT_FUNC – ошибка внутренней функции. Такая ошибка при обмене по GSM означает переход модема в состояние OFF; при переходе в режим READY ошибка сбрасывается;
12, ERR_RT_NOTFOUND – объект не найден;
....
Posted by denchik (Участник № / Member № 6225) on :
Это я видел. Но подумал, что ошибка должна быть расписана поподробнее. Таймаут превышен потому что поллинга нет - это тоже понятно. Вот строки с Portmon: 0.00000082 rtc.exe IOCTL_SERIAL_PURGE Serial0 SUCCESS Purge: TXCLEAR RXCLEAR 0.00004967 rtc.exe IRP_MJ_WRITE Serial0 SUCCESS Length 8: ...d..p& 2.00687133 rtc.exe IRP_MJ_READ Serial0 TIMEOUT Length 0: Я уже все перепробовал
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Устройство не отвечает. Надо проверять правильность настройки компонента "Источника/Приемника" (тип Modbus-функции, адрес - номер устройства в Modbus-сети, канал - адрес переменной) и COM-порта, заданного в узле.
Перехватите трафик обмена с использованием Modbus Poll. Надо сравнить перехваты от Modbus Poll и от Trace Mode 6. При этом выводимый в протокол PortMon текст ввода/вывода надо записывать не в текстовом формате, а в HEX.
Posted by denchik (Участник № / Member № 6225) on :
Можно нескромный вопрос: А где есть описание на тестовые примеры? Спасибо
Posted by denchik (Участник № / Member № 6225) on :