This is topic Связь MODBUS in forum Редактор проекта TRACE MODE 6 / at Форум TRACE MODE: техническая поддержка.


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

Posted by toxachilag (Участник № / Member № 6040) on :
 
Здравствуйте. У меня такой вопрос к Вам. Необходимо настроить связь с устройством по протоколу 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 :
 
Все, разобрался.
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2