1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

M340 + Симаг 12 Modbus

Unity Pro (Control Expert), Quantum, Premium, M340, M580, Hybrid DCS, Process Expert, Zelio, Twido, M17*, M2**, SCADAPACK, SoMachine, MachineExpert, ZelioSoft, TwidoSoft, TwidoSuite, TelePace

Модератор: Специалисты SE

Ответить

Автор темы
Ivan_P
здесь недавно
здесь недавно
Сообщения: 18
Зарегистрирован: 06 май 2015, 08:43
Имя: Ivan Pavluchenko

M340 + Симаг 12 Modbus

Сообщение Ivan_P »

Здравствуйте, уважаемые коллеги!

У меня возникли трудности по получению данных по ModbusTCP от 2-х вторичников расходомеров Симаг 12 на Modicon M340 (процессор BMXP342020). В gest пишет 16#0007 Problem in sending to the destination или Addressing error.
Самое интересное, что было проверено по OPC (insat) все данные получаются, только интересно что надо либо получать float, либо считывать сразу по два байта если читать в int, например Input registers 0 и 1, 2 и 3 и т.д. Так же было перекинуто на SerialPort контроллера и проверено, данные получались, но правда не на все запросы прилетали ответы от симагов.

Пояснения:

192.168.1.4 - это Moxa Mgate MB3180, на неё по RS485 подключаются Симаг 12.
Настройки:
Port1 RTU Slave
Serial Baundrate 19200, parity none, Stop bit 1, Interface RS485 2-wire
Modbus routing по умолчанию 001-254
Initial delay 0ms
Response timeout 1000ms

Ethernet_1 - сетка на контроллере, IP 192.168.1.2, маска 255.255.255.0, шлюз 192.168.1.1.

Прикладываю фото значений Gest, а так же руководство по Симаг 12.

Текст программы:

IF NOT FLOW_01_GEST[0].0 and timer1=0 then
FLOW_01_GEST[2]:=10;
(*Чтение данных_расходомер 1*)
READ_VAR (ADR := ADDM('Ethernet_1{192.168.1.4}33')(*11 - адрес устройства modbus rtu*),
OBJ := '%IW'(*параметр адреса modbus (Input registers)*),
NUM := 0(*Начальный адрес чтения*),
NB := 6(*Длина адреса*),
GEST := FLOW_01_GEST(*Следящий массив*),
RECP => FLOW_01_DATA(*Массив данных, минимум 2 значения*));
timer1:=1;
ELSE IF FLOW_01_GEST[0].0 and timer1=0 then timer1:=1; END_IF;
END_IF;

IF NOT FLOW_02_GEST[0].0 and timer1=1 then
FLOW_02_GEST[2]:=10;
(*Чтение данных_расходомер 2*)
READ_VAR (ADR := ADDM('Ethernet_1{192.168.1.4}34')(*11 - адрес устройства modbus rtu*),
OBJ := '%IW'(*параметр адреса modbus (Input registers)*),
NUM := 0(*Начальный адрес чтения*),
NB := 6(*Длина адреса*),
GEST := FLOW_02_GEST(*Следящий массив*),
RECP => FLOW_02_DATA(*Массив данных, минимум 2 значения*));
timer1:=0; (*Конец опроса, обнуляем timer*)
ELSE IF FLOW_02_GEST[0].0 and timer1=1 then timer1:=0; END_IF;
END_IF;

Отправлено спустя 41 минуту 45 секунд:
Самое интересное что иногда даже данные проскакивают... значения записываются в Data :ges_hmm:
У вас нет необходимых прав для просмотра вложений в этом сообщении.

leon78
эксперт
эксперт
Сообщения: 1022
Зарегистрирован: 25 июл 2008, 10:06
Имя: Леонид
Страна: РФ
Благодарил (а): 27 раз
Поблагодарили: 103 раза

M340 + Симаг 12 Modbus

Сообщение leon78 »

Таймаут пробовали больше сделать? 20 вместо 10 например?
Хард - это то, что можно швырнуть об стенку, а софт - это то, что можно лишь обматерить.

Автор темы
Ivan_P
здесь недавно
здесь недавно
Сообщения: 18
Зарегистрирован: 06 май 2015, 08:43
Имя: Ivan Pavluchenko

M340 + Симаг 12 Modbus

Сообщение Ivan_P »

Как-то не подумал... Спасибо, попробую!

ogorsv
завсегдатай
завсегдатай
Сообщения: 567
Зарегистрирован: 02 дек 2015, 06:57
Имя: Огородников Сергей
Страна: РФ
Благодарил (а): 110 раз
Поблагодарили: 101 раз

M340 + Симаг 12 Modbus

Сообщение ogorsv »

Добрый день!

Для чего вам это делать опрос так часто?
Сделайте опрос, например, раз в секунду - может прибор не способен реагировать с такой скоростью?

Для проверки можно оставить чтение одного расходомера по команде

И можно вынести из проверки наружу строку
FLOW_01_GEST[2]:=50; (*5 секунд*)
Это же не изменяемый параметр за время выполнения IF
СВ

Автор темы
Ivan_P
здесь недавно
здесь недавно
Сообщения: 18
Зарегистрирован: 06 май 2015, 08:43
Имя: Ivan Pavluchenko

M340 + Симаг 12 Modbus

Сообщение Ivan_P »

Пробовал менять таймаут, запросы реже делать - ничего не изменилось.
В скаду пришлось заводить напрямую через опрос Моха...
Может кто что ещё подскажет?

dvtsto
здесь недавно
здесь недавно
Сообщения: 3
Зарегистрирован: 07 июл 2021, 13:17
Имя: Дмитрий
город/регион: Воронеж
Благодарил (а): 1 раз

M340 + Симаг 12 Modbus

Сообщение dvtsto »

Добрый день!
Ivan_P, вопрос решили? У меня аналогичная беда...

Sokolov_Dmitry
не первый раз у нас
не первый раз у нас
Сообщения: 315
Зарегистрирован: 31 окт 2017, 16:45
Имя: Дмитрий
Страна: Россия
город/регион: Калининград
Благодарил (а): 9 раз
Поблагодарили: 81 раз

M340 + Симаг 12 Modbus

Сообщение Sokolov_Dmitry »

1. провести опрос любой программой Модбас мастер связку преобразователь МодбасТСР/RTU -расходомер. Посмотреть, на какие команды и количества запрошенных байт отвечает и не отвечает.
2. Если расходомер отдает либо текущие измерения либо интегральные суммы по отдельности, значит разбить запросы в вашей программе в контроллере на отдельные запросы ТИТ и ТИИ.
3. Записать логи успешного опроса из программы мастера, добиться чтобы ваша программа делала такие же запросы
4. отрегулировать тайм-ауты-это важно. Помните, что расходомер опрашивает преобразователь по модбас рту, у него есть тайм-аут ожидания ответа от расходомера (например 1000мс). После отправки запроса от преобразователя на расходомер, преобразователь ожидает ответа от расходомера в течении 1с, после получения ответа обрабатывает его и отвечает по модбас тср контроллеру. Все это время он не будет реагировать на любые запросы по модбас тср. Поэтому при тайм-ауте в 1000мс в преобразователе делать модбас-тср опрос чаще чем 1000 мс нельзя. При этом тайм-аут в контроллере ожидания ответа от преобразователя должен быть чуть больше 1 сек, т.е. больше тайм-аута в преобразователе.
5. после того как получите успешный обмен, проверьте работу программы при обрыве между преобразователем и расходомером , между контроллером и преобразователем на автоматическое возобновление опроса расходомера при восстановлении связи.

dvtsto
здесь недавно
здесь недавно
Сообщения: 3
Зарегистрирован: 07 июл 2021, 13:17
Имя: Дмитрий
город/регион: Воронеж
Благодарил (а): 1 раз

M340 + Симаг 12 Modbus

Сообщение dvtsto »

Sokolov_Dmitry,
У меня не расходомер, но не суть важно. Опрашиваю шлюз CAN/Modbus RTU...
1. Именно этим способом выловил всех "блох" и добился чтобы ПЛК (М580) слал то, на что шлюз отвечает корректно. Выяснил "слушая" порт сторонним ПО.
Теперь по шине ходят правильные данные, при чем ПЛК шлет правильный запрос и шлюз ему отвечает, а контроллер их не получает (возникает ошибка [16#07 Problem in sending to the destination ].
При этом (использую READ_VAR) не отображается параметр Lenght (количество отправленных байт).

Sokolov_Dmitry
не первый раз у нас
не первый раз у нас
Сообщения: 315
Зарегистрирован: 31 окт 2017, 16:45
Имя: Дмитрий
Страна: Россия
город/регион: Калининград
Благодарил (а): 9 раз
Поблагодарили: 81 раз

M340 + Симаг 12 Modbus

Сообщение Sokolov_Dmitry »

dvtsto писал(а): 07 июл 2021, 16:18 CAN/Modbus RTU
контроллер опрашивает преобразователь по CAN-шине?
dvtsto писал(а): 07 июл 2021, 13:20 У меня аналогичная беда
как то не похоже на опрос по модбас тср

dvtsto
здесь недавно
здесь недавно
Сообщения: 3
Зарегистрирован: 07 июл 2021, 13:17
Имя: Дмитрий
город/регион: Воронеж
Благодарил (а): 1 раз

M340 + Симаг 12 Modbus

Сообщение dvtsto »

Нет. Контроллер опрашивает шлюз по Modbus.
Конечно не TCP, но ведь Modbus... :)

Sokolov_Dmitry
не первый раз у нас
не первый раз у нас
Сообщения: 315
Зарегистрирован: 31 окт 2017, 16:45
Имя: Дмитрий
Страна: Россия
город/регион: Калининград
Благодарил (а): 9 раз
Поблагодарили: 81 раз

M340 + Симаг 12 Modbus

Сообщение Sokolov_Dmitry »

dvtsto писал(а): 08 июл 2021, 10:53 Контроллер опрашивает шлюз по Modbus
используя программу http://ardsoft.ru/mEmulator.html можно тренироваться в настройке работы программы для опроса по модбас без наличия конкретного модбас слэйва.

Используйте рекомендации SE для READ_VAR: "Выполнение вызова команды READ_VAR мы рекомендуем производить не чаще чем раз в 50 мсек" и "Часто встречающаяся ошибка опрос в каждом цикле контроллера и за счёт этого переполнение внутреннего буфера". Для ТСР еще "Прежде чем выполнять команду READ_VAR необходимо проверить готовность устройство к взаимообмену и после этого осуществлять связь".

Сделав первый модбас запрос нужно контроллировать получение ответа, затем выдерживать тайм-аут Т1 (период опроса устройства), затем следующий запрос. В случае неответа выдерживать тайм-аут Т2 ожидания ответа от слейва, следующий запрос,формировать переменную "Нет ответа по модбас от устройства" (для верхнего уровня и для работы с переменными из устройства) после N подряд неответов и прекращать запросы данного устройства на тайм-аут Т3 (чтобы не загружать порт rs485 запросами без ответа с тайм-аутами Т2 и не тормозить обмен с другими устройствами по порту).

А для ТСР прежде чем посылать запросы по модбас контроллировать наличие ТСР-соединения по порту между ПЛК и устройством. И тоже формировать переменную "Нет ТСР соединения с устройством" для верхнего уровня.

Сначала сделайте рабочую схему опроса по модбас (любого простенького на пару переменных) используя программу эмулятор, чтобы она стабильно работала при ответах, неответах, пропадании связи и восстановлении связи. Затем эту схему используйте в рабочем проекте.
Ответить

Вернуться в «ПЛК»