Нет данных с первого устройства

Здравствуйте!
Подскажите пожалуйста, есть проблема по считыванию данных с первого подключенного устройства по боковой стыковочной шине через WB-MIO / WB-MIO-E.
Дело в том, что если устройство является первым подключенным то с него нет данным. При этом подключенное устройство инициализируется.

Добрый день, Alexroot! Уточните, пожалуйста:

  1. Тип устройства.
  2. Конфигурацию других боковых модулей: их порядок их подключения и тип;
  3. Настройки устройства при подключении через модуль (скриншот)
  4. Каким образом вы понимаете, что устройство инициализируется.
  5. Какие сообщение есть в /var/log/messages (если возможно, приложите подозрительный фрагмент
    файла /var/log/messages

Спасибо!

  1. DI - WBIO-DI-HVD-8 и WBIO-DI-DR-16
  2. 1-WBIO-DI-HVD-8; 2-WBIO-DI-DR-16
  3. Скрипта нет. Подключаю из коробки.
  4. Через опрос регистров (программа MBPoll) определяю что 996 регистр имеет 1 (Модуль входа номер * подключен (1 = 8 канальный)), а 997 -2 (Модуль входа номер * подключен (2 = 16 канальный)). Далее согласно таблице “Карта регистров состояний модулей ввода/вывода” опрашиваю все входы устройств.
  5. нет

То есть вы не используете наш контроллер Wiren Board, верно?

Да

Работаю исключительно через WB-MIO / WB-MIO-E

Сложно вам! :slight_smile:
Скажите, а перед тем, как считывать данные из модуля, вы выполняете его настройку?
Вот шаблон для WBIO-DI-HVD-8 в нашем репозитории, в нем есть раздел “setup”, там описывается, какие значения в какие регистры нужно записать перед началом работы с боковым модулем. Соответственно, для wbio-di-dr-16.

Спасибо! Посмотрю, пока не на месте…

Нашел Wiren Board 6 и хочу настроить через него.
Попытался найти файл /etc/wb-mqtt-serial.conf - его нет…

Забыл сказать что хочу подключиться к модулям по RS-485 через WB-MIO-E

Конечная цель это сделать независимую работу сборки WB-MIO-E + WBIO-DI-HVD-8 + WBIO-DI-DR-16

Ну, так, наверное, проще. Для начала сделайте apt-get update и apt-get upgrade. При выборе ставьте версии конфигурационных файлов от мейнтейнера.

А с конфигурационными регистрами не пробовали управлять?

Хочу попробовать через них

Мне не понятно как их расшифровывать…
Карта регистров конфигурации боковых модулей

xxx00 8 pin INPUT 0xFF IODIR: pin direction ???

xxx00 ???

ДА, надо расширить документацию в этой части.
Давайте здесь сейчас коротко расскажу, как это работает.

Берем шаблон, например config-wbio-do-hs-8.json. Смотрим заголовок:
%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5
Видим параметры “stride” и “shift” (в ваших устройствах входов типа DI параметр shift в шаблоне отсутствует, он принимается равным 0).

Дальше смотрим setup-секцию:
%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5

Видно, что в IODIR нам надо записать 0 перед началом работы, в IPOL — тоже ноль, и так далее.
А как вычислить адрес нужного holding-регистра, что скрывается за этими xxx?

Формула следующая:
Shift = (((SlaveId.Secondary - 1) % 4) + 1) * DeviceConfig()->Stride + DeviceConfig()->Shift;

Каждое подключенное устройство имеет порядковый номер (SlaveId.Secondary), начинающийся с 1 для первого устройства.

Подставляем значения в формулу:
Shift = ((( 1 - 1) % 4) + 1) * 500 + 1000 = (0+1)*500+1000=1500 и получаем сдвиг для адресов регистров первого модуля.

В setup-секции написано, что адрес регистра IODIR — 10000. Добавляем к нему 1500 и получаем, что для первого устройства ввода вывода надо в регистр 11500 записать 0x0000.

Проверим. В таблице регистров мы видим, что конфигурационные регистры для модуля 1, если это модуль вывода) занимают диапазон от 11500 до 11505:

Так, значит все верно посчитали.

Соответственно, адрес регистра IPOL будет 11501, GPINTEN – 11502 и т.п.

По всем регистрам из-setup-секции устройства нужно записать указанные значения.

Значения coil-регистров состояний входов/запись состояний выходов отсчитываются также от указанных в шаблоне с соответствующим смещением.

1 лайк

Спасибо! Все получилось.

Отлично! Успехов вам!

Допишем документацию. Были ли еще какие-то моменты, связанные с WB_MIO, которые показались вам трудными для понимания или требующие дополнительного разъяснения?