Опрос китайского модуля 8DI/4DO по Modbus RTU

bayk
Сообщения: 887
Зарегистрирован: 30 май 2015, 21:20

Опрос китайского модуля 8DI/4DO по Modbus RTU

Сообщение bayk »

РЕШЕНО!
Здравствуйте! Возможно задаю глупый вопрос, но никак не могу его осилить.
есть китайская железка MBSL8DI4RO 8DI/4DO релейка, с интерфейсом mudbus RTU (внешне похожая ADAM) далее Модуль.
сам по себе Модуль сделан очень добротно. внутри есть гальванические развязки и по RS-485 и даже по питанию. спаяно все аккуратно. есть серьезные опасения, что работать он будет долго и счастливо

Инструкция на этот модуль
Ссылка на Aliexpress где я покупал этот модуль.

Параметры связи с Модулем по умолчанию: RTU, 9600, N, 8,1
я произвожу опрос Модуля с помощью команды MODRD, 1 регистр.
в терминале com порта я Вижу правильный запрос от дельты и правильный ответ от Модуля.
(в параллель с RS-485 между ПЛК и Модулем стоит преобразователь RS485->USB, а на компе использую программу "therminal" и там вижу HEX данные отправляемые на модуль и отсылаемые модулем в ответ)

Запускаю программу опроса и в терминале при одном активном входе на Модуле DI-0 видим:
запрос от функции MODRD: 01 03 00 00 00 01 84 0A
ответ от оборудования: 01 03 02 00 01 79 84
соответственно получаем правильные данные от Модуля. при изменении количества активных входов ответ меняется правильно.
регистр D1050 - все время нули (хотя раньше, когда я читал регистры из других ПЛК дельты и митсубиси там было все правильно, причем не важно какой был режим ACII или RTU)
В регистрах D1070 и далее какой-то бред. в тех регистрах, где должен быть ответ: D1073-D1074 лежат следующие числа
D1073: H0x00040
D1074: H0x00011
там ни при каких перестановках (в пределах моего скудного мировоззрения) никак h03 не получается! в регистрах D1050 и далее просто нули
прошу помощи в данном вопросе.

Решение проблемы (или выход из положения):
После напоминания от tvent о существовании команды MODRW

Использовал modbus запрос H0x02, который запрашивает у прибора заданное количество дискретных входов
MODRW K1 H02 K0 D100 K8 (число K8 используется, поскольку у меня только 8 дискретных входов).
Но тут надо не забывать, что результат операции записывается начиная с D100 и далее в том объеме, который вы запросили, включая всю служебную информацию (соответственно, если вы в программе используете автоназначение адресов или функциональные блоки необходимо позаботится о сохранности всех задействованных в этой операции регистров), а нужные данные начинаются с D102 (а в моем случае и заканчиваются). далее я командой MOV D102 K2M10 я "распаковываю" значение регистра в последовательность из 8 реле, начиная с M10. После беглой проверки я выяснил, что реле, куда я распаковал данные, ведут себя полностью аналогично с обычными дискретными входами.

А для работы с дискретными выходами необходимо использовать ту же MODRW, только с функцией H0x0F, только предварительно запаковать в передаваемый регистр нужные данные: MOV K1M20 D200 (К1 используется только по причине что на Модуле только 4 выхода)
и передать этот регистр в Модуль
MODRW K1 H0F K0 D200 K4 (K4 - поскольку у меня только 4 выхода)

В итоге все начинает работать! хочу обратить внимание на то, что в этом модуле, а скорее всего и во всех аналогичных модулях дискретные выходы имеют задержку по включению и выключению. и это не проблемы передачи данных. а встроенная в Модуль функция.
При пропадании связи через 2 секунды модуль выключает все дискретные выходы.
Вложения
MBSL8DI4RO внешний вид железки.
MBSL8DI4RO внешний вид железки.
IMG_20171205_102854346.jpg (75.77 КБ) 3876 просмотров
Последний раз редактировалось bayk 06 дек 2017, 14:46, всего редактировалось 6 раз.

tvent
Сообщения: 1019
Зарегистрирован: 11 янв 2011, 17:02

Re: Опрос дискр. входов стороннего оборуд. по Modbus RTU

Сообщение tvent »

Если протокол Modbus ASCII, то по команде MODRD регистрах D1070-D1080 сохраняется полный ответ (feedback) в символьном формате в младших байтах регистров. Собственно данные начнутся с D1073 и будут выглядеть как 00 33H.
А вот в D1050 -D1055 будут уже преобразованные в HEX значения данных ( 0033H->0003H) .

bayk
Сообщения: 887
Зарегистрирован: 30 май 2015, 21:20

Re: Опрос дискр. входов стороннего оборуд. по Modbus RTU

Сообщение bayk »

У меня rtu

tvent
Сообщения: 1019
Зарегистрирован: 11 янв 2011, 17:02

Re: Опрос дискр. входов стороннего оборуд. по Modbus RTU

Сообщение tvent »

bayk писал(а):У меня rtu
Тогда в D1073-D1070 значение вашего регистра.
Если сомневаетесь - берете мануал и...

tvent
Сообщения: 1019
Зарегистрирован: 11 янв 2011, 17:02

Re: Опрос дискр. входов стороннего оборуд. по Modbus RTU

Сообщение tvent »

Глянул удаленные модули Delta...
Команда modrd работать не будет.

bayk
Сообщения: 887
Зарегистрирован: 30 май 2015, 21:20

Re: Опрос дискр. входов стороннего оборуд. по Modbus RTU

Сообщение bayk »

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

tvent
Сообщения: 1019
Зарегистрирован: 11 янв 2011, 17:02

Re: Опрос дискр. входов стороннего оборуд. по Modbus RTU

Сообщение tvent »

Не знаю, как у ваших "железок", а у RTU-495 Delta дискретные выходы читаются функцией 01Н ModBus, а дискретные входы 02H.
В MODRD встроена функция 03H. В чем разница - разберетесь сами.
По любому - для чтения/записи нужна команда MODRW.

pkl
Сообщения: 1468
Зарегистрирован: 23 ноя 2010, 10:08

Re: Опрос дискр. входов стороннего оборуд. по Modbus RTU

Сообщение pkl »

tvent, не вводите топикстартера в заблуждение. Он читает состояний не дельтовских модулей.
например при активных входах DI-0 и DI-1 я вижу ответ h0003 ну если перевести в BIN: 00000011 (остальную часть не пишу, дабы не вводить в блуд)
Что вас не устраивает в таком ответе? Уточните модель ПЛК и номер порта который используется.
Описание D1050 - D1055 - Processing MODRD communication data The PLC automatically converts the data in D1070~D1085 in the ASCII mode into hexadecimal values, or combines two lower 8 bits in the RTU mode into 16 bits in the RTU mode. Гуглоперевод :" Обработка данных MODRD.ПЛК автоматически преобразует данные в D1070 ~ D1085 в режиме ASCII в шестнадцатеричные значения, или объединяет два младших 8 бит в режиме RTU в 16 бит в
RTU.
Выберите нужное слово в ответе и выделите необходимую часть. ( ORW и ( или SWAP)) в помощь.

tvent
Сообщения: 1019
Зарегистрирован: 11 янв 2011, 17:02

Re: Опрос дискр. входов стороннего оборуд. по Modbus RTU

Сообщение tvent »

pkl писал(а):tvent, не вводите топикстартера в заблуждение. Он читает состояний не дельтовских модулей.
ТС пишет о модуле Аля-ADAM. К примеру в ADAM-4150 дискретные входы читаются так же как у Дельты RTU-495 - битовой функцией 02 команды modrw.

pkl
Сообщения: 1468
Зарегистрирован: 23 ноя 2010, 10:08

Re: Опрос дискр. входов стороннего оборуд. по Modbus RTU

Сообщение pkl »

Виноват. Про ADAM не в курсе. Однако в терминальной проге ответ видит правильный, значит что то получает от модуля.

Ответить