У нас есть широковещательный усилитель собственной разработки, который может работать в двух режимах (как широковещательный, тогда он определяется как отдельное устройство и обычный усилитель шины дали).
Подключаем его к WB 8.5 и шлюзу DALI и усилитель не определяется в веб-интерфейсе. Подключили сторонний светильник - определяется. Если усилитель переключить из широковещательного режима в режим обычного усилителя, то светильник через него видится в веб-интерфейсе.
Затык в том, что при использовании шлюза DALI Node от ECUE (sympholight) широковещательный усилитель определяется и нормально функционирует.
Также усилитель определяется в программе Lunatone Cockpit, если включить “Эмуляция шлюза Lunatone DALI-2 IoT”. Подключили к широковещательному усилителю светильник, порегулировали яркость - светильник отлично ее меняет. Да, через Cockpit он определяется с ошибкой (типа не может считать все данные), но по итогу работает.
Можно, наверное, поменять яркость устройства и через скрипт JS, коли мы знаем адрес устройства, но там высшие материи и нейронки ничего дельного подсказать не могут. Если можно пойти в сторону такого workaround, то почему бы и нет.
Версия прошивки самого шлюза 1.0.0
wb-mqtt-serial 2.248.1-wb102 git 68ec4297b6324b4a5cc84940a146c0fee9d48cf8
RELEASE_NAME=wb-2606
SUITE=stable
TARGET=wb8/bullseye
DALI MQTT версии 1.12.9.
default.txt (189,0 КБ)
Во вложении. Работает только режим “Read existing devices”. В понедельник еще выйдет наш схемотехник, и в принципе одно устройство можем отправить для тестов. Находимся в Москве.
Устройство работает как DALI-2 control device (24-битные кадры, IEC 62386-103)**, а не как control gear. Оно:
шлёт ff fe 1d START QUIESCENT MODE;
непрерывно широковещательно рассылает ff fe cc — Unknown DALI24 Command
это не “не определяется DALI”, а устройство в broadcast-режиме говорит part 103 (control device) проприетарной командой, которую WB-DALI при сканировании control gear не обнаруживает. 0xcc не стандартная команда 103 — её и Cockpit помечает Unknown
WirenBoard не отправляет команду Randomise перед процедурой SearchAddr. Согласно протоколу DALI (IEC 62386), последовательность адресации должна начинаться с команды Randomise, после чего следует SearchAddr. Без Randomise устройства не отвечают.
В логе DALI Node не отображаются ряд ключевых команд протокола, в частности:
Verify Short Address
Randomise (перед SearchAddr)
Вопрос: Это упрощение протокола в реализации WirenBoard, или команды выполняются, но не логируются? Если второе — можно ли включить полное логирование?
Для DALI-реализации WirenBoard неясно, какой минимальный набор параметров должен поддерживать балласт, чтобы корректно отображаться в интерфейсе. После ручного упрощения кода на стороне балласта базовая работа налаживается, но интерфейс WirenBoard по-прежнему не отображает устройство корректно (вечная загрузка).
Просьба к разработчикам:
Добавить команду Randomise в процедуру адресации.
Обеспечить полное логирование DALI-команд в интерфейсе.
Уточнить минимальный набор параметров балласта для корректного отображения в UI.
Рассмотреть возможность работы с устройствами, не полностью соответствующими протоколу (tolerant mode).
Неверно.
Начинается процедура с INITIALISE. Канонический порядок по IEC 62386-102:
a1 00 TERMINATE (опционально, сброс состояния)
a5 00 ×2 INITIALISE(0x00) 2 раза в пределах 100 мс
a7 00 ×2 RANDOMISE 2 раза, затем пауза ≥100 мс
b1 XX SEARCHADDRH ┐
b2 XX SEARCHADDRM │ двоичный поиск по 24 битам
b3 XX SEARCHADDRL │
a9 00 COMPARE ┘ ответ 0xFF, если randomAddress ≤ searchAddress
b7 XX PROGRAM SHORT ADDRESS
b9 XX VERIFY SHORT ADDRESS
ab 00 WITHDRAW
a1 00 TERMINATE
INITIALISE переводит устройства в состояние initialise (на 15 минут). Без этого состояния устройства игнорирует не только COMPARE/SEARCHADDR/PROGRAM SHORT ADDRESS, но и сам RANDOMISE.
Он используется когда есть коллизии. Дефолтное значение randomAddress равно 0xFFFFFF, поэтому у только что сброшенных или новых устройств адреса совпадают. Тогда на COMPARE они отвечают все, и поиск не сходится ни на одном устройстве.
Тут спрошу.
Для примера:
wb-mqtt-dali --binary-search2 wb-dali_14 -d
DEBUG:wb-dali_14_bus1:device=wb-dali_14, dev_inst_map=None
DEBUG:wb-dali_14_bus1:Initializing...
DEBUG:wb-dali_14_bus1:Resetting message queue in gateway
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=6, address=1432, count=1, msg=0000
DEBUG:wb-dali_14_bus1:Subscribing to reply topics...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Subscribing to FF24 topic...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Initialized successfully
DEBUG:wb-dali_14_bus1:send: FF24.StartQuiescentMode, FF24.Terminate, FF24.Initialise(255)
DEBUG:wb-dali_14_bus1:Processing queue item: FF24.StartQuiescentMode
DEBUG:wb-dali_14_bus1:Processing queue item: FF24.Terminate
DEBUG:wb-dali_14_bus1:Processing queue item: FF24.Initialise(255)
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1400, count=6, msg=fe1d52ff000042c101ff52c1
DEBUG:wb-dali_14_bus1:FF24.StartQuiescentMode (0) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:FF24.Terminate (1) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:FF24.Initialise(255) (2) status 2: Transmission without response
DEBUG:commissioning:Setting search address 0xffffff
DEBUG:wb-dali_14_bus1:send: FF24.SearchAddrH(255), FF24.SearchAddrM(255), FF24.SearchAddrL(255), FF24.Compare
DEBUG:wb-dali_14_bus1:Processing queue item: FF24.SearchAddrH(255)
DEBUG:wb-dali_14_bus1:Processing queue item: FF24.SearchAddrM(255)
DEBUG:wb-dali_14_bus1:Processing queue item: FF24.SearchAddrL(255)
DEBUG:wb-dali_14_bus1:Processing queue item: FF24.Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1406, count=8, msg=05ff42c106ff42c107ff42c1030042c1
DEBUG:wb-dali_14_bus1:FF24.SearchAddrH(255) (3) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:FF24.SearchAddrM(255) (4) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:FF24.SearchAddrL(255) (5) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:FF24.Compare (6) status 2: Transmission without response
INFO:commissioning:No device left to address, exiting
DEBUG:wb-dali_14_bus1:send: FF24.Terminate, FF24.StopQuiescentMode
DEBUG:wb-dali_14_bus1:Processing queue item: FF24.Terminate
DEBUG:wb-dali_14_bus1:Processing queue item: FF24.StopQuiescentMode
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1414, count=4, msg=000042c1fe1e52ff
DEBUG:wb-dali_14_bus1:FF24.Terminate (7) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:FF24.StopQuiescentMode (8) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Deinitializing...
DEBUG:wb-dali_14_bus1:Deinitialized successfully
root@wirenboard-AD65BTLY:~# wb-mqtt-dali --binary-search wb-dali_14 -d
DEBUG:wb-dali_14_bus1:device=wb-dali_14, dev_inst_map=None
DEBUG:wb-dali_14_bus1:Initializing...
DEBUG:wb-dali_14_bus1:Resetting message queue in gateway
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=6, address=1432, count=1, msg=0000
DEBUG:wb-dali_14_bus1:Subscribing to reply topics...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Subscribing to FF24 topic...
DEBUG:wb-dali_14_bus1:Received retained message, ignoring...
DEBUG:wb-dali_14_bus1:Initialized successfully
DEBUG:wb-dali_14_bus1:send: FF24.StartQuiescentMode, Terminate, Initialise
DEBUG:wb-dali_14_bus1:Processing queue item: FF24.StartQuiescentMode
DEBUG:wb-dali_14_bus1:Processing queue item: Terminate
DEBUG:wb-dali_14_bus1:Processing queue item: Initialise
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1400, count=6, msg=fe1d52ffa1004000a5005000
DEBUG:wb-dali_14_bus1:FF24.StartQuiescentMode (0) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Terminate (1) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Initialise (2) status 2: Transmission without response
DEBUG:commissioning:Setting search address 0xffffff
DEBUG:wb-dali_14_bus1:send: SetSearchAddrH(255), SetSearchAddrM(255), SetSearchAddrL(255), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrH(255)
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrM(255)
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrL(255)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1406, count=8, msg=b1ff4000b3ff4000b5ff4000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrH(255) (3) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:SetSearchAddrM(255) (4) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:SetSearchAddrL(255) (5) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (6) status 1: Transmission with backward response, backward_frame=0xff
DEBUG:commissioning:Setting search address 0x7fffff
DEBUG:wb-dali_14_bus1:send: SetSearchAddrH(127), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrH(127)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1414, count=4, msg=b17f4000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrH(127) (7) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (8) status 2: Transmission without response
DEBUG:commissioning:Setting search address 0xbfffff
DEBUG:wb-dali_14_bus1:send: SetSearchAddrH(191), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrH(191)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1418, count=4, msg=b1bf4000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrH(191) (9) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (10) status 1: Transmission with backward response, backward_frame=0xff
DEBUG:commissioning:Setting search address 0x9fffff
DEBUG:wb-dali_14_bus1:send: SetSearchAddrH(159), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrH(159)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1422, count=4, msg=b19f4000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrH(159) (11) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (12) status 2: Transmission without response
DEBUG:commissioning:Setting search address 0xafffff
DEBUG:wb-dali_14_bus1:send: SetSearchAddrH(175), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrH(175)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1426, count=4, msg=b1af4000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrH(175) (13) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (14) status 2: Transmission without response
DEBUG:commissioning:Setting search address 0xb7ffff
DEBUG:wb-dali_14_bus1:send: SetSearchAddrH(183), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrH(183)
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1430, count=2, msg=b1b74000
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1400, count=2, msg=a9004000
DEBUG:wb-dali_14_bus1:Compare (0) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:SetSearchAddrH(183) (15) status 2: Transmission without response
DEBUG:commissioning:Setting search address 0xbbffff
DEBUG:wb-dali_14_bus1:send: SetSearchAddrH(187), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrH(187)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1402, count=4, msg=b1bb4000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrH(187) (1) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (2) status 1: Transmission with backward response, backward_frame=0xff
DEBUG:commissioning:Setting search address 0xb9ffff
DEBUG:wb-dali_14_bus1:send: SetSearchAddrH(185), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrH(185)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1406, count=4, msg=b1b94000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrH(185) (3) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (4) status 1: Transmission with backward response, backward_frame=0xff
DEBUG:commissioning:Setting search address 0xb8ffff
DEBUG:wb-dali_14_bus1:send: SetSearchAddrH(184), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrH(184)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1410, count=4, msg=b1b84000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrH(184) (5) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (6) status 1: Transmission with backward response, backward_frame=0xff
DEBUG:commissioning:Setting search address 0xb87fff
DEBUG:wb-dali_14_bus1:send: SetSearchAddrM(127), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrM(127)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1414, count=4, msg=b37f4000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrM(127) (7) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (8) status 1: Transmission with backward response, backward_frame=0xff
DEBUG:commissioning:Setting search address 0xb83fff
DEBUG:wb-dali_14_bus1:send: SetSearchAddrM(63), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrM(63)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1418, count=4, msg=b33f4000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrM(63) (9) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (10) status 2: Transmission without response
DEBUG:commissioning:Setting search address 0xb85fff
DEBUG:wb-dali_14_bus1:send: SetSearchAddrM(95), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrM(95)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1422, count=4, msg=b35f4000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrM(95) (11) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (12) status 2: Transmission without response
DEBUG:commissioning:Setting search address 0xb86fff
DEBUG:wb-dali_14_bus1:send: SetSearchAddrM(111), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrM(111)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1426, count=4, msg=b36f4000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrM(111) (13) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (14) status 2: Transmission without response
DEBUG:commissioning:Setting search address 0xb877ff
DEBUG:wb-dali_14_bus1:send: SetSearchAddrM(119), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrM(119)
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1430, count=2, msg=b3774000
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1400, count=2, msg=a9004000
DEBUG:wb-dali_14_bus1:Compare (0) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:SetSearchAddrM(119) (15) status 2: Transmission without response
DEBUG:commissioning:Setting search address 0xb87bff
DEBUG:wb-dali_14_bus1:send: SetSearchAddrM(123), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrM(123)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1402, count=4, msg=b37b4000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrM(123) (1) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (2) status 2: Transmission without response
DEBUG:commissioning:Setting search address 0xb87dff
DEBUG:wb-dali_14_bus1:send: SetSearchAddrM(125), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrM(125)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1406, count=4, msg=b37d4000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrM(125) (3) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (4) status 2: Transmission without response
DEBUG:commissioning:Setting search address 0xb87eff
DEBUG:wb-dali_14_bus1:send: SetSearchAddrM(126), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrM(126)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1410, count=4, msg=b37e4000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrM(126) (5) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (6) status 1: Transmission with backward response, backward_frame=0xff
DEBUG:commissioning:Setting search address 0xb87e7f
DEBUG:wb-dali_14_bus1:send: SetSearchAddrL(127), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrL(127)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1414, count=4, msg=b57f4000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrL(127) (7) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (8) status 1: Transmission with backward response, backward_frame=0xff
DEBUG:commissioning:Setting search address 0xb87e3f
DEBUG:wb-dali_14_bus1:send: SetSearchAddrL(63), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrL(63)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1418, count=4, msg=b53f4000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrL(63) (9) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (10) status 1: Transmission with backward response, backward_frame=0xff
DEBUG:commissioning:Setting search address 0xb87e1f
DEBUG:wb-dali_14_bus1:send: SetSearchAddrL(31), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrL(31)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1422, count=4, msg=b51f4000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrL(31) (11) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (12) status 2: Transmission without response
DEBUG:commissioning:Setting search address 0xb87e2f
DEBUG:wb-dali_14_bus1:send: SetSearchAddrL(47), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrL(47)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1426, count=4, msg=b52f4000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrL(47) (13) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (14) status 2: Transmission without response
DEBUG:commissioning:Setting search address 0xb87e37
DEBUG:wb-dali_14_bus1:send: SetSearchAddrL(55), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrL(55)
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1430, count=2, msg=b5374000
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1400, count=2, msg=a9004000
DEBUG:wb-dali_14_bus1:Compare (0) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:SetSearchAddrL(55) (15) status 2: Transmission without response
DEBUG:commissioning:Setting search address 0xb87e3b
DEBUG:wb-dali_14_bus1:send: SetSearchAddrL(59), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrL(59)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1402, count=4, msg=b53b4000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrL(59) (1) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (2) status 1: Transmission with backward response, backward_frame=0xff
DEBUG:commissioning:Setting search address 0xb87e39
DEBUG:wb-dali_14_bus1:send: SetSearchAddrL(57), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrL(57)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1406, count=4, msg=b5394000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrL(57) (3) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (4) status 2: Transmission without response
DEBUG:commissioning:Setting search address 0xb87e3a
DEBUG:wb-dali_14_bus1:send: SetSearchAddrL(58), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrL(58)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1410, count=4, msg=b53a4000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrL(58) (5) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (6) status 1: Transmission with backward response, backward_frame=0xff
DEBUG:commissioning:Setting search address 0xb87e39
DEBUG:wb-dali_14_bus1:send: SetSearchAddrL(57), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrL(57)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1414, count=4, msg=b5394000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrL(57) (7) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (8) status 2: Transmission without response
DEBUG:commissioning:Setting search address 0xb87e3a
DEBUG:wb-dali_14_bus1:send: SetSearchAddrL(58)
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrL(58)
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1418, count=2, msg=b53a4000
DEBUG:wb-dali_14_bus1:SetSearchAddrL(58) (9) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:send: QueryShortAddress
DEBUG:wb-dali_14_bus1:Processing queue item: QueryShortAddress
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1420, count=2, msg=bb004000
DEBUG:wb-dali_14_bus1:QueryShortAddress (10) status 1: Transmission with backward response, backward_frame=0x0f
DEBUG:wb-dali_14_bus1:send: Withdraw
DEBUG:wb-dali_14_bus1:Processing queue item: Withdraw
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1422, count=2, msg=ab004000
DEBUG:wb-dali_14_bus1:Withdraw (11) status 2: Transmission without response
INFO:commissioning:Device found at 0xb87e3a with short address 7
DEBUG:commissioning:Setting search address 0xffffff
DEBUG:wb-dali_14_bus1:send: SetSearchAddrH(255), SetSearchAddrM(255), SetSearchAddrL(255), Compare
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrH(255)
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrM(255)
DEBUG:wb-dali_14_bus1:Processing queue item: SetSearchAddrL(255)
DEBUG:wb-dali_14_bus1:Processing queue item: Compare
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1424, count=8, msg=b1ff4000b3ff4000b5ff4000a9004000
DEBUG:wb-dali_14_bus1:SetSearchAddrH(255) (12) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:SetSearchAddrM(255) (13) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:SetSearchAddrL(255) (14) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Compare (15) status 2: Transmission without response
INFO:commissioning:No device left to address, exiting
DEBUG:wb-dali_14_bus1:send: Terminate, FF24.StopQuiescentMode
DEBUG:wb-dali_14_bus1:Processing queue item: Terminate
DEBUG:wb-dali_14_bus1:Processing queue item: FF24.StopQuiescentMode
DEBUG:wb-dali_14_bus1:Sending Modbus RPC command: function=16, address=1400, count=4, msg=a1004000fe1e52ff
DEBUG:wb-dali_14_bus1:Terminate (0) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:FF24.StopQuiescentMode (1) status 2: Transmission without response
DEBUG:wb-dali_14_bus1:Deinitializing...
DEBUG:wb-dali_14_bus1:Deinitialized successfully
1. Будем считать, что прошло менее 15 минут. Команда INITIALISE естественно тоже есть, и с неё начинается процедура. Правильно ли я понимаю, что ваш контроллер в отсутствие коллизий не передаёт команду “RANDOMISE”? Если это так, то встаёт вопрос о факте наступления коллизий. Их контроллер может зафиксировать только после подачи команды “COMPARE”, которая, в свою очередь, следует гораздо позже отсутствующей RANDOMISE. Нарушается причинно-следственная связь.
2. Есть ли в реализации функции вашего контроллера Dali какие-либо упрощения протокола, смена установленного порядка следования команд или проприетарные решения?
Речь идёт не о дублях адресов, а о поддиапазонах, в которых возможно проявление коллизий.
Чуть ниже как раз “канонический порядок”
a1 00 TERMINATE (опционально, сброс состояния)
a5 00 ×2 INITIALISE(0x00) 2 раза в пределах 100 мс
a7 00 ×2 RANDOMISE 2 раза, затем пауза ≥100 мс
b1 XX SEARCHADDRH ┐
b2 XX SEARCHADDRM │ двоичный поиск по 24 битам
b3 XX SEARCHADDRL │
a9 00 COMPARE ┘ ответ 0xFF, если randomAddress ≤ searchAddress
b7 XX PROGRAM SHORT ADDRESS
b9 XX VERIFY SHORT ADDRESS
ab 00 WITHDRAW
a1 00 TERMINATE
Смысл в соответствии требованиям протокола, как мне кажется. Те балласты, которые генерируют свои трёхбайтные ID по команде “RANDOMISE” просто не смогут определиться контроллером. Балласты, которые вытаскивают свои предзашитые байты ID из EEPROM тоже будут ждать команды “RANDOMISE”. И лишь те из них, которые знают, что этой команды может и не быть - будут готовы к подобным приколам
При попытке раскрытия “карточки светильника”, как писали ранее, крутится вечная ошибка непринятого ответа на “QueryDimmingCurve”. После внесения в софт балласта реакции на этот запрос контроллера появляются новые ошибки непринятого ответа на “QueryGroupsZeroToSeven” и “QueryGroupsEightToFifteen”. Добавил, ок. Дальше начинается ошибка ответа на “QuerySceneLevel”. Чисто теоретически, конечно, процесс можно продолжать пока все факультативные и необязательные (по протоколу!!!) к передаче параметры не будут переданы контроллеру. Или же продолжать кроить софт, добавляя всякий раз по новому параметру, в надежде, что вот-вот контроллер “удовлетворится”. Можете ли Вы опубликовать минимальный достаточный перечень факультативных параметров, обязательных по “мнению” контроллера для раскрытия “карточки”? Если же он до неприличия велик, то почему бы не предусмотреть возможность раскрытия “карточки” с базовыми 5-6 параметрами, такими как Query: Status, Device Type, Actual Level, Min/Max Level, Version Numb?
QueryDeviceType → 0xFF (multiple)
QueryNextDeviceType тут ответы 06, 08 и FE(end)
это DT6 + DT8 — LED-драйвер с управлением цветом. Дальше перед соответствущими командами корректно передается EnableDeviceType(6..8) непосредственно перед запросом (требование стандарта, между ними ничего не должно вклиниваться).
Базовые параметры
Запрос
прочитано
описание
DT6 DimmingCurve
0
стандартная логарифмическая кривая
DT8 ColourStatus
0x20
режим tunable white
ActualLevel
0
выключена, но это как раз периодчиеский запрос
Min / Max level
1 / 254
уровни (градации)
FadeTime / FadeRate
2 / 7
затухание, время
Groups 0–7 / 8–15
0x20 / 0x00
входит только в группу 5
Status
0x80
взведён powerCycleSeen после подачи питания команд еще не было; resetState=0, значит устройство сконфигурировано)
Границы и текущая цветовая температура через DTR0 = идентификатор: QueryColourValue → QueryContentDTR0 старший байт передается в ответе, младший читается из DTR0:
DTR0=128/129: 0x0099 = 153
DTR0=130/131: 0x0172 = 370
DTR0=2 0x0112 = 274
Перебор всех сцен, 16 штук (11:24:09 до 11:24:16)
Для каждой сцены: запрос уровня, QuerySceneLevel`, затем через DTR0 тип сохранённого цвета.
И да, регулярныйQueryActualLevel - это циклический опрос.
Опрашиваются в соответствии с типом устройства, например для DT8 тут
Большое спасибо за потраченное время, но, мне гораздо важнее было получить конкретные ответы на конкретные вопросы вместо кусков логов и ссылок на исходники. Не в обиду, но я впервые сталкиваюсь с подобными танцами с бубном сопрягая далишные слэйвы с контроллером. Если мастер работает по канону Dali, как например, тот же Osram или MeanWell, то наверняка мне не придётся рыться в исходниках этих производителей.
Предлагаю просто курьером отправить наш светильник для тестов, чтобы не было бесконечных переписок)
Там будет стоять наш преобразователь DALI в ШИМ. В нем такая же прошивка.
отправьте конечно, хуже не будет. На адрес офиса с сайта.
Пока мне кажется, что это ваша реализация не соответствует требованиям протокола. В стандарте DALI же явно написано как на какую команду должно реагировать устройство. У нас есть целиком IEC 62386 свежий (это тысячи страниц документации, кстати), и я там ничего не вижу про
последовательность адресации должна начинаться с команды Randomise , после чего следует SearchAddr
как вы пишете. Т.е. пока кажется, что вы просто завязались на последовательность команд из примера из стандарта, но по стандарту эта последовательность имеет право быть любой другой. Пример для поиска из стандарта намерено упрощённый. Все шлюзы, которые мы видели, включая кстати Lunatone Cockpit, эту последовательность усложняют, чтобы поиск работал быстрее.
Если у вас нет стандартов, то мы готовы помочь. Сами стандарты я вам дать (кажется) не имею права, но мы можем созвониться по видео с вашими инженерами и совместно их почитать.