This is topic Нет связи с ПЛК Delta через Modbus TCP in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.
доброго времени суток. в базовой системе Trace Mode 6.06 не могу установить связь с контроллером DVP28SV по Ethernet. к контроллеру подключен модуль DVPEN01, которому задан IP адрес 192.168.1.5. через родную утилиту Delta в плк записана программа и с ней обмен идет хорошо. далее в TM в источниках\приемниках - modbus создаю компонент Rin_Word(4), чтобы прочитать данные из D10 регистра ПЛК. конфигурация компонента: Номер порта 0; адрес 0х3 (сетевой адрес ПЛК); канал 0х100А (адрес регистра); тип протокола TCPIP; направление Input; формат дискрет; IP адрес 192.168.1.5. данный источник перевожу в каналы, затем в аргументы экрана и привязываю ГЭ "шкала" и "текст" к получившемуся аргументу. запускаем МРВ и видим ноль как на шкале, так и на текстовой панеле. в чем может быть проблема или что делается не так? заранее спасибо.
Posted by Romсheg (Участник № / Member № 3792) on :
1) Проверить атрибут Достоверность канала. 2) Если Достоверность в нуле - смотреть логическую цепочку связей от источника до ГЭ на экране - возможно где-то ошибка в привязках.
Posted by Hip67 (Участник № / Member № 4427) on :
Спасибо. связь установить удалось, но до сих пор непонятно, каким компонентом можно записать значение в регистры данных и внутренние реле?
Posted by Romсheg (Участник № / Member № 3792) on :
Тут все зависит от диапазона этих адресов внутри контроллера - это влияет на номер функции ModBus. Буквально недавно сам делал проект на этом контроллере, у меня в нем диапазоны данных были начиная с адреса 3000 и далее. Так в проекте для чтения данных использовал описатель Rout_Word(3) - третья функция ModBus, чтение выходных регистров в формате WORD. А передавал в контроллер данные через описатели W_Word(16) - передача целочисленного значения в формате WORD. Все работало и по ModBusRTU (через RS когда тестировал проект в процессе разработки) и сейчас работает нормально по ModBusTCP (уже на объекте).
Да, насчет смещения не забываем - у этого контроллера регистр для ModBus параметра указывать надо со смещением 0х1000.
Posted by Hip67 (Участник № / Member № 4427) on :
Romсheg
смещение? то есть, допустим, чтобы отправить число в регистр D100, который в контроллере имеет адрес 0x1064, я должен воспользоваться W_Word(16) с настройкой адреса регистра 0х2064? и с какими именно моделями имели опыт, что данные лежали от 3000? быть может, для разных контроллеров - разное смещение?
Posted by Romсheg (Участник № / Member № 3792) on :
Неее - вы уже сами верно выше указали, что при чтении регистра D10 из контроллера его адрес в настройке источника/приемника в проекте ТМ6 задавали как 0x100A. Вот оно и есть это смещение 0x1000 относительно номера регистра в контроллере. В моем проекте, например, регистр 3001 в проекте в описателе задавался как 0x1bb9.
Модель там без разницы, если не ошибаюсь, место расположения данных в нем так определил тот, кто программировал сам контроллер.
Posted by Hip67 (Участник № / Member № 4427) on :
теперь понял, что за смещение. только ни через W_Word(16), как было указано выше, ни через W_Word(6), как было сделано в тестовом примере, данные в регистр контроллера не приходят. передаю через кнопку "ввести и передать" на МРВ. в окне просмотра компонентов число появляется на нужном канале, но в сам контроллер не доходит (проверял и самим ТМ6 и родной программой)
Posted by Romсheg (Участник № / Member № 3792) on :
А что с атрибутом Достоверность этого передающего канала после попытки посылки?
Posted by Hip67 (Участник № / Member № 4427) on :
имеете ввиду бит достоверности? после ввода числа он меняется с T на F
Posted by Romсheg (Участник № / Member № 3792) on :
Это значит, что на переданный пакет от МРВ ТМ6 устройство не ответило, либо ответило ошибкой.
Что-то неверно в настройках описателя. Можете его параметры настройки перечислить?
Posted by Hip67 (Участник № / Member № 4427) on :
могу, конечно 1) источники\приемники - W_Word(16)#2, кодировка TW0, номер порта 0, адрес 0х3, канал 0х100А, тип протокола ТСР\IP, направление output, формат дискрет, ipадрес 192.168.1.5. 2) это всё переношу в каналы, оттуда в аргументы экрана. 3) в аргументах экрана появляется аргумент W_Word_16__2_R, тип IN, тип данных REAL, Привязка W_Word(16)#2:Реальное значение (Система.RTM_1.WRITE) 4) этот аргумент привязываю к кнопке. в свойствах её ставлю "ввести и передать"
а результат всех этих действий я уже описал.
Posted by Romсheg (Участник № / Member № 3792) on :
Хмм, для начала некоторые логические ошибки при привязках: у вас на экране кнопка должна результат передавать в аргумент типа OUT, который должен быть привязан к атрибуту Вход канала, который связан с источником/приемником ModBus. Тогда будет верная настройка передачи параметра. Реальное значение - оно не для приема параметра в канале, из него можно только читать данные, если посмотрите схему обработки данных в канале в справке - то сразу увидите это. В остальном - настройка вроде верная, если вы действительно хотите передавать значение в регистр D10 контроллера, у которого задан IP=192.168.1.5, а его логических сетевой адрес=3. Рекомендую посмотреть лог Профайлера после работы проекта - возможно сообщения об ошибках помогут понять более точно, что же приходит в ответ от контроллера на вашу посылку.
Posted by Hip67 (Участник № / Member № 4427) on :
кнопку перепривязал к аргументу, который привязал к атрибуту "Входное значение" канала W_Word(16)#2. в окне компонентов МРВ видно, что при отправке, значение попадает в атрибут In. в Q и R появляется такое же число. при этом достоверность все также меняется на F. а вот с логом МРВ можно поточнее? в папке с проектом я нашел только следующие логи, но, очевидно, к обмену сообщениями с контроллером они не имеют никакого отношения.
16_2.txt (12:37:7) INF_LOAD:Starting... 16_2 (12:37:7) INF_RTM:Detected NT5.RTM 5.1 (12:37:7) ._.:Base TRACE MODE 6 Profiler ver. 6.07.0 (12:37:7) INF_LOAD:Load Channels = 6 (12:37:7) INF_LOAD:Templates=1 (12:37:7) INF_LOAD:Objects = 3 (12:37:7) INF_RTM:Timer=0.055s CalcLoop=55ms (12:37:7) INF_RTM:start time is 0 s (12:37:8) INF_RTM:ModeSwitch e15=0000 e18=0000 e20=0000 [0] (12:37:8) INF_RTM:mode=2(Work) e15=00 e18=00 e20=00 [0-0] (12:37:8) WRN_DDE:Не удается связать службу диспетчера общих баз данных (DSDM) (12:37:8) INF_RTM:ModBus-IN Rout_Word(3)#4 : IP=192.168.1.2 UNIT=17 CMD=3 CH=1046 Q=0 (12:37:8) INF_RTM:ModBus-OUT W_Word(16)#2 : IP=192.168.1.5 UNIT=3 CMD=11 CH=100a Q=0 (12:37:8) INF_RTM:ModBus-IN D100 : IP=192.168.1.5 UNIT=3 CMD=3 CH=1064 Q=0 (12:37:8) INF_RTM:ModBus-IN T1 : IP=192.168.1.5 UNIT=3 CMD=3 CH=0601 Q=0 (12:37:8) INF_RTM:ModBus-IN D10 : IP=192.168.1.5 UNIT=3 CMD=3 CH=100a Q=0 (12:37:8) INF_RTM:Idle period = 990 (12:37:12) INF_RTM:stoping... (12:37:12) INF_RTM:mode=5(Stop) e15=00 e18=00 e20=00 [0-0] (12:37:12) INF_RTM:stop time is 0.828 s (12:37:12) INF_RTM:number of calculation = 46 (12:37:12) ._.:END OF WORK
Posted by Romсheg (Участник № / Member № 3792) on :
А канал, что на чтение этого регистра настроен - вот этот: (12:37:8) INF_RTM:ModBus-IN D10 : IP=192.168.1.5 UNIT=3 CMD=3 CH=100a Q=0
Он тоже недостоверность дает или он нормально считывает этот регистр?
Posted by Hip67 (Участник № / Member № 4427) on :
quote:Отправитель / Originally posted by Romсheg: А канал, что на чтение этого регистра настроен - вот этот: (12:37:8) INF_RTM:ModBus-IN D10 : IP=192.168.1.5 UNIT=3 CMD=3 CH=100a Q=0
Он тоже недостоверность дает или он нормально считывает этот регистр?
этот канал показывает всё верно. достоверность Т, и значение 0.
Posted by Romсheg (Участник № / Member № 3792) on :
Странно - если считывает значение, то и посылать вроде должен без проблем. Тогда остается еще один метод, мне также его пришлось выполнить: надо таймауты настроить в файле ip_modbus, что в папке узла система генерирует. А то по-умолчанию там не совсем подходящие стоят. Я вот у себя в проекте таймауты некоторые другие параметры точно увеличивал. Сами параметры смотрите по хэлпу.
Posted by Hip67 (Участник № / Member № 4427) on :
надо попробовать. сегодня перешел на новый ноутбук, на котором даже то, что исправно считывалось до этого, теперь через какое-то время показывает недостоверность. связь с контроллером, конечно не идеальная (3 свитча), но ТМ что-то слишком уж капризен
Posted by Romсheg (Участник № / Member № 3792) on :
Да тут не сам ТМ капризничает, контроллер малость "туговат на ухо" при работе через TCP.
Posted by Hip67 (Участник № / Member № 4427) on :
а значения приоритетов потоков в окне редактирования узла RTM могут повлиять на общее качество связи?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Повлиять могут. И в значительной степени - в худшую сторону.
Posted by Hip67 (Участник № / Member № 4427) on :
Собственно, с недостоверностями чтения разобрался. подобрал настройки в ip_modbus.а с записью все те же проблемы после передачи значения выскакивает недостоверность. а вот и сама ошибка из лога. (debug := 400)
(13:40:26) ERR_TCP:ModBus recieve error from unit_23 err=10 W_Word(16)#2
Posted by Romсheg (Участник № / Member № 3792) on :
Смотрите по документации на протокол ModBus, что именно значит 10-я ошибка. Контроллер похоже отвечает, но отвечает ошибкой на вашу посылку.