Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: 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;
Ivan_P
Самое интересное что иногда даже данные проскакивают... значения записываются в Data blink.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.