Карта регистров конфигурации дискретных боковых модулей

Пытаюсь разрбраться в конфинураций боковых модулей. Использую WB-MIO. Где можно подробнее почитать, что значат эти регистры? Из названия не понятно, что они делают. При использовании WB-MIO и боковых DI требуется проводить настройку через эти регистры?

Добрый день.

Это регистры микросхем-расширителей ввода-вывода Microchip MCP23008 (8 pin) / MCP23017 (16 pin), которые стоят внутри боковых модулей WBIO.
WB-MIO просто «пробрасывает» их наружу по Modbus один в один.
Поэтому из названий сходу не понятно ничего.

Коротко что делает каждый

Регистр Смысл Для DI
IODIR Направление вывода: 1 = вход, 0 = выход 0xFFFF — все 16 линий на вход
IPOL Инверсия логики чтения: 1 = читать инвертированно 0x0000 — без инверсии
GPINTEN Разрешение прерывания по изменению для каждой линии 0xFFFF — MIO узнаёт об изменении входа сразу, а не по опросу
INTCON С чем сравнивать: 0 = с предыдущим значением (любое изменение), 1 = с DEFVAL 0x0000 — прерывание по любому фронту
DEFVAL Эталон для сравнения, работает только там, где INTCON=1 0x0000 — не используется
IOCON Общая конфигурация чипа 0x4444

Разбор 0x44 (байт продублирован в обе половины, т.к. у MCP23017 IOCON зеркалится в IOCONA/IOCONB):

  • бит 6 MIRROR = 1 — INTA и INTB объединены в один сигнал прерывания;
  • бит 2 ODR = 1 — выход прерывания с открытым стоком;
  • остальные нули: BANK=0 (линейная адресация), SEQOP=0 (автоинкремент), INTPOL не важен при ODR.

У 8-пиновых MCP23008 бита MIRROR нет, он просто игнорируется — отсюда и «странное» 0x4444 в строках для 8 pin.

Если WB-MIO опрашивается контроллером Wiren Board через wb-mqtt-serial, вы просто добавляете устройство с адресом вида 15:1 (<Modbus-адрес MIO>:<номер WBIO по порядку>) и выбираете шаблон WBIO-DI-WD-14 — драйвер сам прописывает эти регистры при инициализации.

В ручную надо настраивать если WB-MIO опрашивается сторонним мастером — ПЛК, SCADA, свой Modbus-клиент.
Шаблонов WB там нет, и инициализацию модуля делаете вы сами как описано в примере под таблицей:
ххх - значение stride для модулей. То есть для первого модуля надо использовать 1000, для второго - 2000 и так далее.

Пример конфигурации двух модулей WD-14, подключенных первым и вторым:

11000 - 0xffff
11001 - 0x0000
11002 - 0xffff
11003 - 0x0000
11004 - 0x0000
11005 - 0x4444
10999 - 0x0001

#For second module addresses increased on 1000:
12000 - 0xffff
12001 - 0x0000
12002 - 0xffff
12003 - 0x0000
12004 - 0x0000
12005 - 0x4444
11999 - 0x0001

Добрый день.
Подскажите остались к техподдержке вопросы по теме?

Подскажите, есть ли возможность сделать по положительному фронту переключение внутреннего регистра устройства. На фото нижний график — это физическое состояние входа. Верхнее — это то, что я хочу считывать из устройства.

Нет, к сожалению так сделать не получится.