Здравствуйте!
Подскажите пожалуйста, есть проблема по считыванию данных с первого подключенного устройства по боковой стыковочной шине через WB-MIO / WB-MIO-E.
Дело в том, что если устройство является первым подключенным то с него нет данным. При этом подключенное устройство инициализируется.
Добрый день, Alexroot! Уточните, пожалуйста:
- Тип устройства.
- Конфигурацию других боковых модулей: их порядок их подключения и тип;
- Настройки устройства при подключении через модуль (скриншот)
- Каким образом вы понимаете, что устройство инициализируется.
- Какие сообщение есть в /var/log/messages (если возможно, приложите подозрительный фрагмент
файла /var/log/messages
Спасибо!
- DI - WBIO-DI-HVD-8 и WBIO-DI-DR-16
- 1-WBIO-DI-HVD-8; 2-WBIO-DI-DR-16
- Скрипта нет. Подключаю из коробки.
- Через опрос регистров (программа MBPoll) определяю что 996 регистр имеет 1 (Модуль входа номер * подключен (1 = 8 канальный)), а 997 -2 (Модуль входа номер * подключен (2 = 16 канальный)). Далее согласно таблице “Карта регистров состояний модулей ввода/вывода” опрашиваю все входы устройств.
- нет
То есть вы не используете наш контроллер Wiren Board, верно?
Да
Работаю исключительно через WB-MIO / WB-MIO-E
Сложно вам!
Скажите, а перед тем, как считывать данные из модуля, вы выполняете его настройку?
Вот шаблон для 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. Смотрим заголовок:
Видим параметры “stride” и “shift” (в ваших устройствах входов типа DI параметр shift в шаблоне отсутствует, он принимается равным 0).
Дальше смотрим setup-секцию:
Видно, что в 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-регистров состояний входов/запись состояний выходов отсчитываются также от указанных в шаблоне с соответствующим смещением.
Спасибо! Все получилось.
Отлично! Успехов вам!
Допишем документацию. Были ли еще какие-то моменты, связанные с WB_MIO, которые показались вам трудными для понимания или требующие дополнительного разъяснения?