TapHome

Resi Dali - Konfigurace

Modbus RTU
Přidal
Poslední aktualizace: 04. 2026

Vyžaduje externí bránu

Resi RESI-DALI-PS — stránka produktu

Resi Dali - Konfigurace

Šablona Resi Dali - Konfigurace je jednorázový nástroj pro uvedení do provozu a adresování pro Modbus-DALI bránu RESI-DALI-SIO a RESI-DALI-ETH od společnosti RESI Informatik & Automation GmbH. Přímo z TapHome řídí algoritmus náhodného adresování DALI 2.0, čímž přiřazuje krátké adresy 0–63 ovládacím zařízením na čerstvě zapojené DALI sběrnici, u každé adresy detekuje DALI device type a nabízí rychlé broadcast ON/OFF testy — vše potřebné k uvedení nové instalace do stavu, kdy lze svítidla ovládat jednotlivě.

Komunikace s bránou probíhá přes Modbus RTU při 9600 baud 8N1. Šablona také vystavuje import parametr IpAddress, takže stejný postup funguje i přes serial-to-IP bridge (Moxa NPort, USR-TCP232) nebo přes RESI-DALI-ETH nakonfigurovaný v transparentním RTU-over-Ethernet režimu.

Tato šablona je záměrně určena pouze pro adresování. Po přiřazení krátkých adres modul Resi Dali - Konfigurace z projektu odeberte a pro každodenní ovládání použijte sesterskou operační šablonu Resi Dali (Dali.xml) — stmívání jednotlivých svítidel, skupiny, scény a DT6/DT8 RGB / tunable-white řízení barvy. Konfigurační modul není navržen tak, aby v projektu zůstal po úvodním nastavení.

Hardwarové zapojení

RESI-DALI-SIO je master brána na DIN lištu (17,5 × 90 × 56,4 mm, CEM17), která sedí mezi sériovým/ethernetovým hostem a DALI osvětlovací sběrnicí. Brána DALI sběrnici nenapájí — kompatibilní DALI napájecí zdroj (RESI-DALI-PS nebo libovolný 200 mA DALI zdroj v souladu se standardem) je povinný.

Připojení RESI-DALI-SIO (RS-485)
Schéma zapojení RESI-DALI-SIO — externí DALI zdroj (nahoře) a s RESI-DALI-PS (dole)

Svorky na levé straně RESI-DALI-SIO (shora dolů): GND, +12..48V=, RS485 DATA+ (A+), RS485 DATA- (B-), RS485 GND, RS232 TX, RS232 RX, RS232 GND. Svorky DALI sběrnice na opačné straně jsou D+ / N/C / D- (3pinový USLIM blok, N/C zůstává nezapojený).

Pro instalaci s TapHome použijte rozhraní RS-485:

  • RS485 DATA+ (A+) → A+/D+ na TapHome RS-485 sběrnici
  • RS485 DATA- (B-) → B-/D- na TapHome RS-485 sběrnici
  • RS485 GND → GND na napájecím zdroji TapHome (doporučeno pro stabilní komunikaci)
  • +12..48V= / GND → 12–48 V DC primární napájení
Připojení RESI-DALI-ETH (Ethernet)
Schéma zapojení RESI-DALI-ETH — externí DALI zdroj (nahoře) a s RESI-DALI-PS (dole)

Ethernet varianta má stejné svorky DALI sběrnice (D+ / N/C / D-) a primární napájení (GND, +12..48V=) plus jeden konektor RJ45 pro 10/100 Mbit Ethernet. Výchozí IP nastavení z výroby jsou 192.168.0.191 / 255.255.255.0 / 192.168.0.1 s Modbus Unit ID 255; přihlašovací údaje webového UI jsou RESI / RESI. TapHome komunikuje s ETH variantou přes Modbus TCP nebo v transparentním RTU-over-Ethernet režimu, který očekává tato konfigurační šablona (viz Konfigurace níže).

Napájecí zdroj DALI sběrnice
RESI-DALI-PS — samostatné napájení DALI sběrnice (nahoře) a v kombinaci s bránou SIO/ETH (dole)

RESI-DALI-PS dodává až 200 mA na DALI sběrnici (zkratový proud ~225 mA, typické napětí sběrnice 14–18 V) a podporuje až 64 DALI 1.0 předřadníků nebo DALI 2.0 ovládacích zařízení na jedné lince. Primární strana akceptuje stejný 12–48 V DC napájecí zdroj jako jednotka SIO/ETH. Brána a napájecí zdroj sdílejí stejný pár D+ / D- — zdroj napájí sběrnici, zatímco brána čte a zapisuje DALI rámce.

Tři LED diody na napájecím zdroji pomáhají při uvedení do provozu: POWER (primárních 12–48 V v pořádku, vždy svítí), DALI (krátce blikne při provozu na sběrnici), ERR (trvale svítí při poruše zdroje, zkratu DALI nebo přetížení sběrnice — při normálním provozu musí být zhasnutá).

Pravidla DALI sběrnice

DALI linka má několik přísných omezení, která přímo ovlivňují úspěch uvedení do provozu:

Průřez vodičeMax délka DALI kabelu
1,5 mm²300 m
1,0 mm²238 m
0,75 mm²174 m
0,5 mm²116 m

Limit vyplývá z maximálně povoleného úbytku napětí 2 V na DALI kabelu. Další pravidla:

  • Maximálně 64 DALI 1.0 předřadníků a až 64 DALI 2.0 ovládacích zařízení na jednu sběrnici (oddělené prostory krátkých adres).
  • Pouze stromová topologie — žádné kruhy, žádné smyčky.
  • Skutečný počet zařízení závisí i na proudové kapacitě zdroje (typicky 200 mA na RESI-DALI-PS, počítejte ~2 mA na zařízení plus rezerva).

RESI-DALI-PS (nebo ekvivalentní DALI zdroj) je povinný. Bez něj RESI-DALI-SIO/ETH nedokáže sběrnici řídit a konfigurační průvodce při každém kroku vypadne timeoutem. Pokud se na dlouhé lince použije druhý zdroj, vložte DALI tlumivku nebo rozdělte sběrnici na galvanicky oddělené segmenty.

Konfigurace

Povolení Modbus komunikace

Všechny parametry sériového rozhraní na RESI-DALI-SIO se vybírají 4polohovým DIP přepínačem na modulu. Šablona TapHome fixuje 9600 baud 8N1, takže DIP přepínače musí být nastaveny odpovídajícím způsobem.

DIP1DIP2Rychlost přenosu
OFFOFF9600 bd (vyžadováno TapHome)
ONOFF19200 bd
OFFON38400 bd
ONONPoužívá rychlost naprogramovanou ve FLASH (výchozí z výroby 57600 bd)
DIP4Zdroj Modbus Unit ID
OFFFLASH registr H:65221 — vyžadováno, aby akce Set Slave ID měla účinek
ONVynuceno na 255 (hardwarový fallback, FLASH hodnota ignorována)

DIP3 je produktově specifický rezervovaný bit; ponechte jej v tovární poloze, pokud servisní manuál RESI výslovně neurčí jinak. Parita je ve FLASH výchozích hodnotách pevně None (8N1) — šablona nevystavuje registry parity/stop bitu.

Zakončení RS-485: sběrnici zakončete 120 Ω rezistorem na obou koncích. TapHome Core poskytuje jedno zakončení na svých svorkách BUS; pokud je RESI brána posledním zařízením na lince, přidejte na její svorky RS-485 diskrétní 120 Ω rezistor mezi A+/B-.

Nastavení RTU-over-TCP: šablona má oba import parametry SlaveId a IpAddress, protože stejný DALI konfigurační tok funguje i přes serial-to-IP bridge (Moxa NPort, USR-TCP232) nebo přes RESI-DALI-ETH v transparentním RTU-over-Ethernet režimu. V takovém případě nastavte IpAddress na IP bridge / ETH jednotky a ostatní nastavení ponechte identická jako u RS-485 varianty. Pro čistý Modbus/TCP na RESI-DALI-ETH by byla přirozenější TCP šablona — šablona DaliConfig předpokládá rámcovou RTU komunikaci.

Nastavení Slave ID brány

Výchozí Unit ID z výroby je 255. Změna postupem:

  1. Nastavte na bráně DIP4 = OFF, aby se respektovalo FLASH Unit ID.
  2. Importujte šablonu v TapHome s SlaveId = 255 (aktuální adresa).
  3. Otevřete servisní nastavení modulu “Resi Dali - Konfigurace” a spusťte akci Set Slave ID s požadovaným novým ID (rozsah 1–255). Akce zapíše hodnotu do registru H:65221 a okamžitě vyvolá softwarový reset přes H:6000 = 1, takže se brána restartuje s novou adresou.
  4. Odeberte šablonu a znovu ji importujte s SlaveId nastaveným na novou hodnotu. Modul lze pak použít pro uvedení do provozu.

Akce Reset Gateway (zapisuje 1 do H:6000) je také k dispozici jako samostatný obnovovací krok — užitečná po zkratu DALI sběrnice, který zanechal DALI motor brány v degradovaném stavu.

Pouze jeden Modbus master najednou. Ani DALI, ani Modbus RTU sběrnice neřeší arbitráž mezi souběžnými mastery. Pokud během uvádění do provozu bránu pollu je i PLC, BMS nebo PC nástroj (například MODBUSConfigurator), programování krátkých adres bude kolidovat a průvodce nahlásí chyby.

Schopnosti zařízení

Šablona je postavena kolem jediného Modbus modulu — Resi Dali - Konfigurace — který sdružuje konfiguračního průvodce, DALI device type sondu pro každou krátkou adresu 0–63 a čtyři akce na úrovni brány.

Konfigurační průvodce — Find New Devices

Find New Devices je desetistavový multi-value přepínač, který řídí algoritmus náhodného adresování DALI 2.0 v diskrétních krocích. Každý název stavu odpovídá jedné fázi konfigurační sekvence DALI 2.0; výběr stavu způsobí, že šablona odešle správný surový 16bitový DALI rámec na H:541 / H:542 a následně polluje DALI RX status na H:550 na odpověď brány.

KrokStavCo dělá
0TERMINATEDALI rámec TERMINATE (0xA100) — ukončí aktuální adresovací relaci a resetuje stav brány. Vždy bezpečné volat
1StartINITIALISE (0xA5FF) + RANDOMISE (0xA700) — přepne všechna neadresovaná zařízení do adresovacího poolu a vyžádá si od každého 24bitovou náhodnou adresu
2Skenovat krátkou adresuSondu dalšího slotu krátké adresy; vrátí stavový kód 7, když neodpovídá žádné zařízení
3Set SEARCHADDRNahraje horní/střední/dolní bajty SEARCHADDR (0xB500/0xB300/0xB100) pro binární vyhledávání
4COMPAREOdešle COMPARE (0xA900) a podle odpovědi zužuje 24bitové vyhledávací okno
5PROGRAM SHORT ADDRESSZapíše ověřenou krátkou adresu přes 0xB7xx — zařízení je nyní trvale adresováno
6KontrolaOvěří naprogramovanou adresu druhým COMPARE na finálním SEARCHADDRL
7Zkusit znovuObnova po kolizi / timeoutu — půlí aktuální vyhledávací interval a opakuje
8Resetovat krátké adresyDALI DTR = 0xFF (0xA3FF) + broadcast REMOVE SHORT ADDRESS — smaže všechny existující krátké adresy, připraveno na úplné re-adresování
9DokončitPřečte DALI výsledný bajt, emituje TapHome informaci/chybovou zprávu a ukončí průvodce

Typický postup uvedení do provozu:

  1. Napájejte DALI sběrnici (RESI-DALI-PS), zařízení zapojte ve stromové topologii a ujistěte se, že sběrnici neřídí nic jiného.
  2. (Volitelné, ale doporučené) nejprve spusťte Resetovat krátké adresy, abyste začali z čistého stavu bez adresovaných zařízení.
  3. Spusťte Start — odešle INITIALISE + RANDOMISE, takže každé zařízení si zvolí novou 24bitovou náhodnou adresu.
  4. Spusťte Skenovat krátkou adresuSet SEARCHADDRCOMPAREPROGRAM SHORT ADDRESSKontrola v pořadí. Stavy zapouzdřují binární vyhledávání DALI 2.0; každý krok posouvá algoritmus o jednu fázi.
  5. Pokud krok nahlásí kolizi nebo timeout, zavolejte Zkusit znovu a zopakujte sekvenci compare/program.
  6. Když jsou všechna viditelná zařízení naprogramována, spusťte TERMINATE a poté Dokončit pro čisté ukončení průvodce.
  7. Použijte servisní atributy Gear 0 … Gear 63 a akce Turn On / Off All Lamps k ověření, že krátké adresy 0–N jsou nyní obsazeny (viz níže).

Průvodce je navržen pro přechod jedním stavem po druhém — šablona neautomatizuje celou smyčku, protože instalatér potřebuje sledovat chování DALI sběrnice (pulzování svítidel, rytmus LED STATE na bráně), aby zachytil špatně zapojená nebo chybějící zařízení.

DALI gear sonda — Gear 0 … Gear 63

Každý ze 64 servisních atributů Gear 0, Gear 1, … Gear 63 sonduje jednu DALI krátkou adresu příkazem DALI 2.0 QUERY DEVICE TYPE (0x99). Interně šablona zapíše (SA << 8) | 0x99 do H:511, polluje H:550 bity 0–2 dokud nedorazí odpověď, poté přečte odpovídající bajt z H:511.

Možné návratové hodnoty v TapHome servisním UI:

  • DT{n} — ovládací zařízení je naprogramováno na této adrese a odpovědělo device type n. Typické hodnoty: DT0 (zářivka), DT1 (nouzové), DT2 (HID), DT5 (0–10 V), DT6 (LED driver), DT7 (relé), DT8 (barva / tunable white), DT9 (sekvencer).
  • -- — na této adrese není naprogramováno žádné zařízení nebo brána vrátila sentinel 0x8000 “no answer / already consumed”.

Sonda poskytuje rychlý pass/fail přehled o tom, které krátké adresy jsou po uvedení do provozu obsazeny a jaké device type byly objeveny — to je primární verifikační krok před přepnutím projektu na operační šablonu Resi Dali.

Akce na úrovni brány

Čtyři servisní akce na modulu řídí bránu přímo:

  • Reset Gateway — zapíše 1 do H:6000 (DIP SWITCH / SOFTWARE RESET). Restartuje bránu; užitečné po zkratu sběrnice pro obnovení DALI motoru.
  • Set Slave ID — zapíše nové Unit ID (1–255) do FLASH registru H:65221, poté resetuje přes H:6000. Vyžaduje DIP4 = OFF, aby akce měla účinek.
  • Turn On All Lamps — zapíše 0xFE (výkonový oblouk 254 = 100 %) do DALI broadcast úrovňového registru H:530. Rozsvítí každé zařízení na sběrnici bez ohledu na krátkou adresu — rychlé vizuální potvrzení, že sběrnice a zdroj jsou v pořádku.
  • Turn Off All Lamps — zapíše 0x00 do H:530, zhasne každé zařízení. Stejná broadcast cesta, opačná hodnota.

Servisní atribut Slave ID na modulu zpětně čte aktuální Unit ID z FLASH registru H:65221, takže před odesláním Set Slave ID lze ověřit aktuálně naprogramovanou adresu.

Hned po zapojení a před spuštěním adresovacího průvodce spusťte Turn On All Lamps. Každé napájené a správně připojené zařízení na sběrnici se rozsvítí na 100 %, což je velmi rychlý způsob jak odhalit chybějící nebo špatně zapojená svítidla předtím, než strávíte čas programováním krátkých adres.

Řešení problémů

Průvodce při každém kroku spadne na timeout
  1. Ověřte napětí DALI sběrnice na svorkách zdroje — musí být 11,5–22,5 V (typicky 14–16 V). Výrazně nižší hodnota obvykle indikuje zkrat DALI.
  2. Zkontrolujte LED ERR na RESI-DALI-PS — pokud svítí, sběrnice je zkratovaná, přetížená nebo je zdroj sám vadný.
  3. Zkontrolujte LED STATE na bráně — pomalý rytmus 1 s znamená, že DALI sběrnice je v pořádku, rychlý rytmus ~250 ms indikuje chybu sběrnice, zkrat nebo chybějící DALI napájení.
  4. Ujistěte se, že s bránou současně nekomunikuje žádný jiný Modbus master (MODBUSConfigurator, BMS, PLC).
Gear 0–63 hlásí všechny -- po uvedení do provozu
  1. Změřte napětí DALI na zařízení nejdále od zdroje — musí být nad 9,5 V. Pokud je nižší, sběrnice je příliš dlouhá pro průřez vodiče (viz tabulka délek DALI kabelu výše). Rozdělte sběrnici na dva segmenty s druhým zdrojem.
  2. Znovu spusťte průvodce od Resetovat krátké adresy. Nespouštějte Start na sběrnici, která stále obsahuje dříve naprogramovaná zařízení, pokud nejprve neprovedete reset — algoritmus najde pouze zařízení bez krátké adresy.
  3. Hledejte smyčky v zapojení. DALI netoleruje kruhy; přerušte jakoukoli smyčku a znovu zakončete oba otevřené konce.
Set Slave ID nezmění adresu
  1. Potvrďte DIP4 = OFF na bráně. Když je DIP4 = ON, hardware nutí Unit ID 255 bez ohledu na FLASH hodnotu.
  2. Potvrďte, že se brána po akci skutečně restartovala (LED brány krátce zhasnou). Pokud ne, spusťte ručně Reset Gateway.
  3. Znovu importujte šablonu s novým import parametrem SlaveId — dříve importovaný modul stále polluje na staré adrese.
Komunikace chvíli funguje a poté selže
  1. Zkontrolujte, že RS485 GND je připojena mezi bránou a společnou zemí napájecího zdroje TapHome. Chybějící GND je nejčastější chyba RS-485.
  2. Ověřte zakončení — 120 Ω na obou koncích RS-485 sběrnice. Pro RTU-over-TCP přes serial bridge se ujistěte, že je bridge v rámcovém RTU režimu, nikoli v raw TCP, a že meziznaková mezera na sériové straně odpovídá časování 9600 baud 8N1.
  3. Snižte počet paralelních DALI dotazů — brána serializuje DALI transakce a neřeší arbitráž mezi více Modbus mastery.

Dostupná zařízení

Resi Dali - Konfigurace Modul
Servisní atributy
Slave IDČte Modbus Unit ID uložené ve FLASH registru H:65221 — slouží k ověření aktuální adresy brány
Gear 0DALI device-type sonda na krátké adrese 0 — vrací DT{n}, když ovládací zařízení odpoví, nebo -- když je adresa volná
Gear 1DALI device-type sonda na krátké adrese 1 — vrací DT{n} nebo --
Gear 2DALI device-type sonda na krátké adrese 2 — vrací DT{n} nebo --
Gear 3DALI device-type sonda na krátké adrese 3 — vrací DT{n} nebo --
Gear 4DALI device-type sonda na krátké adrese 4 — vrací DT{n} nebo --
Gear 5DALI device-type sonda na krátké adrese 5 — vrací DT{n} nebo --
Gear 6DALI device-type sonda na krátké adrese 6 — vrací DT{n} nebo --
Gear 7DALI device-type sonda na krátké adrese 7 — vrací DT{n} nebo --
Gear 8DALI device-type sonda na krátké adrese 8 — vrací DT{n} nebo --
Gear 9DALI device-type sonda na krátké adrese 9 — vrací DT{n} nebo --
Gear 10DALI device-type sonda na krátké adrese 10 — vrací DT{n} nebo --
Gear 11DALI device-type sonda na krátké adrese 11 — vrací DT{n} nebo --
Gear 12DALI device-type sonda na krátké adrese 12 — vrací DT{n} nebo --
Gear 13DALI device-type sonda na krátké adrese 13 — vrací DT{n} nebo --
Gear 14DALI device-type sonda na krátké adrese 14 — vrací DT{n} nebo --
Gear 15DALI device-type sonda na krátké adrese 15 — vrací DT{n} nebo --
Gear 16DALI device-type sonda na krátké adrese 16 — vrací DT{n} nebo --
Gear 17DALI device-type sonda na krátké adrese 17 — vrací DT{n} nebo --
Gear 18DALI device-type sonda na krátké adrese 18 — vrací DT{n} nebo --
Gear 19DALI device-type sonda na krátké adrese 19 — vrací DT{n} nebo --
Gear 20DALI device-type sonda na krátké adrese 20 — vrací DT{n} nebo --
Gear 21DALI device-type sonda na krátké adrese 21 — vrací DT{n} nebo --
Gear 22DALI device-type sonda na krátké adrese 22 — vrací DT{n} nebo --
Gear 23DALI device-type sonda na krátké adrese 23 — vrací DT{n} nebo --
Gear 24DALI device-type sonda na krátké adrese 24 — vrací DT{n} nebo --
Gear 25DALI device-type sonda na krátké adrese 25 — vrací DT{n} nebo --
Gear 26DALI device-type sonda na krátké adrese 26 — vrací DT{n} nebo --
Gear 27DALI device-type sonda na krátké adrese 27 — vrací DT{n} nebo --
Gear 28DALI device-type sonda na krátké adrese 28 — vrací DT{n} nebo --
Gear 29DALI device-type sonda na krátké adrese 29 — vrací DT{n} nebo --
Gear 30DALI device-type sonda na krátké adrese 30 — vrací DT{n} nebo --
Gear 31DALI device-type sonda na krátké adrese 31 — vrací DT{n} nebo --
Gear 32DALI device-type sonda na krátké adrese 32 — vrací DT{n} nebo --
Gear 33DALI device-type sonda na krátké adrese 33 — vrací DT{n} nebo --
Gear 34DALI device-type sonda na krátké adrese 34 — vrací DT{n} nebo --
Gear 35DALI device-type sonda na krátké adrese 35 — vrací DT{n} nebo --
Gear 36DALI device-type sonda na krátké adrese 36 — vrací DT{n} nebo --
Gear 37DALI device-type sonda na krátké adrese 37 — vrací DT{n} nebo --
Gear 38DALI device-type sonda na krátké adrese 38 — vrací DT{n} nebo --
Gear 39DALI device-type sonda na krátké adrese 39 — vrací DT{n} nebo --
Gear 40DALI device-type sonda na krátké adrese 40 — vrací DT{n} nebo --
Gear 41DALI device-type sonda na krátké adrese 41 — vrací DT{n} nebo --
Gear 42DALI device-type sonda na krátké adrese 42 — vrací DT{n} nebo --
Gear 43DALI device-type sonda na krátké adrese 43 — vrací DT{n} nebo --
Gear 44DALI device-type sonda na krátké adrese 44 — vrací DT{n} nebo --
Gear 45DALI device-type sonda na krátké adrese 45 — vrací DT{n} nebo --
Gear 46DALI device-type sonda na krátké adrese 46 — vrací DT{n} nebo --
Gear 47DALI device-type sonda na krátké adrese 47 — vrací DT{n} nebo --
Gear 48DALI device-type sonda na krátké adrese 48 — vrací DT{n} nebo --
Gear 49DALI device-type sonda na krátké adrese 49 — vrací DT{n} nebo --
Gear 50DALI device-type sonda na krátké adrese 50 — vrací DT{n} nebo --
Gear 51DALI device-type sonda na krátké adrese 51 — vrací DT{n} nebo --
Gear 52DALI device-type sonda na krátké adrese 52 — vrací DT{n} nebo --
Gear 53DALI device-type sonda na krátké adrese 53 — vrací DT{n} nebo --
Gear 54DALI device-type sonda na krátké adrese 54 — vrací DT{n} nebo --
Gear 55DALI device-type sonda na krátké adrese 55 — vrací DT{n} nebo --
Gear 56DALI device-type sonda na krátké adrese 56 — vrací DT{n} nebo --
Gear 57DALI device-type sonda na krátké adrese 57 — vrací DT{n} nebo --
Gear 58DALI device-type sonda na krátké adrese 58 — vrací DT{n} nebo --
Gear 59DALI device-type sonda na krátké adrese 59 — vrací DT{n} nebo --
Gear 60DALI device-type sonda na krátké adrese 60 — vrací DT{n} nebo --
Gear 61DALI device-type sonda na krátké adrese 61 — vrací DT{n} nebo --
Gear 62DALI device-type sonda na krátké adrese 62 — vrací DT{n} nebo --
Gear 63DALI device-type sonda na krátké adrese 63 — vrací DT{n} nebo --
Servisní akce
Reset GatewayZapíše 1 do registru H:6000 pro restart brány RESI-DALI — nutné po změně Slave ID nebo pro obnovu DALI motoru po zkratu sběrnice
Set Slave IDZapíše nové Modbus Unit ID do FLASH registru H:65221 a vyvolá reset, aby se brána restartovala s novou adresou (1–255, DIP4 musí být OFF)
Turn On All LampsZapíše 0xFE do DALI broadcast úrovňového registru H:530 — rozsvítí každé ovládací zařízení na sběrnici na maximální jas (rychlý test uvedení do provozu)
Turn Off All LampsZapíše 0x00 do DALI broadcast úrovňového registru H:530 — vypne každé ovládací zařízení na sběrnici

${resi_dali_configuration}

Servisní atributy
${xml_slave_id}
modbusr(H,65221,uint16)
Gear 0
var ShortAddress := 0;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 1
var ShortAddress := 1;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 2
var ShortAddress := 2;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 3
var ShortAddress := 3;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 4
var ShortAddress := 4;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 5
var ShortAddress := 5;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 6
var ShortAddress := 6;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 7
var ShortAddress := 7;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 8
var ShortAddress := 8;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 9
var ShortAddress := 9;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 10
var ShortAddress := 10;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 11
var ShortAddress := 11;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 12
var ShortAddress := 12;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 13
var ShortAddress := 13;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 14
var ShortAddress := 14;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 15
var ShortAddress := 15;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 16
var ShortAddress := 16;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 17
var ShortAddress := 17;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 18
var ShortAddress := 18;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 19
var ShortAddress := 19;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 20
var ShortAddress := 20;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 21
var ShortAddress := 21;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 22
var ShortAddress := 22;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 23
var ShortAddress := 23;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 24
var ShortAddress := 24;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 25
var ShortAddress := 25;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 26
var ShortAddress := 26;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 27
var ShortAddress := 27;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 28
var ShortAddress := 28;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 29
var ShortAddress := 29;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 30
var ShortAddress := 30;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 31
var ShortAddress := 31;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 32
var ShortAddress := 32;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 33
var ShortAddress := 33;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 34
var ShortAddress := 34;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 35
var ShortAddress := 35;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 36
var ShortAddress := 36;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 37
var ShortAddress := 37;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 38
var ShortAddress := 38;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 39
var ShortAddress := 39;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 40
var ShortAddress := 40;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 41
var ShortAddress := 41;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 42
var ShortAddress := 42;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 43
var ShortAddress := 43;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 44
var ShortAddress := 44;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 45
var ShortAddress := 45;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 46
var ShortAddress := 46;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 47
var ShortAddress := 47;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 48
var ShortAddress := 48;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 49
var ShortAddress := 49;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 50
var ShortAddress := 50;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 51
var ShortAddress := 51;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 52
var ShortAddress := 52;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 53
var ShortAddress := 53;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 54
var ShortAddress := 54;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 55
var ShortAddress := 55;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 56
var ShortAddress := 56;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 57
var ShortAddress := 57;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 58
var ShortAddress := 58;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 59
var ShortAddress := 59;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 60
var ShortAddress := 60;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 61
var ShortAddress := 61;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 62
var ShortAddress := 62;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Gear 63
var ShortAddress := 63;
modbusw(SH, 511, uint16, (ShortAddress << 8) + 0x99);
sleep(5); var rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
var x := modbusr(SH, 511, uint16);
if (x != 0x8000, return("DT" + x), return("--"));
Servisní akce
${xml_reset_gateway}
modbusw(SH,6000,uint16,1)
${xml_set_slave_id}
Parametry: ${xml_slave_id} (1–255 SID)
modbusw(SH, 65221, uint16, SID);

modbusw(SH,6000, uint16, 1);
${xml_turn_on_all_lamps}
modbusw(SH, 530, uint16, 0xFE)
${xml_turn_off_all_lamps}
modbusw(SH, 530, uint16, 0x00)
Najít nová zařízení Vícestavový přepínač

Průvodce uvedením do provozu, který prochází algoritmem náhodného adresování DALI 2.0, aby přiřadil krátké adresy 0–63 ovládacím zařízením

Registr: H:541H:542 UInt16 numeric
Hodnoty / Stavy: TERMINATE · ${xml_start} · ${xml_scan_short_address} · Set SEARCHADDR · COMPARE · PROGRAM SHORT ADDRESS · Check · Try again · ${xml_reset_short_addresses} · ${xml_finish}

Najít nová zařízení

Čtení stavu přepínače
var x := 0x8000; var rx := 0;

if Mu = 1
	if exit <= 0
		status := 255;
        return(9);
    end
    # check SEARCHADDRH
    modbusw(SH, 541, uint16, 0xB500 + getbyte(SEARCHADDRH,0));
    sleep(500);
    modbusw(SH, 541, uint16, 0xB300 + getbyte(SEARCHADDRH,1));
    sleep(500);
    modbusw(SH, 541, uint16, 0xB100 + getbyte(SEARCHADDRH,2));
    sleep(500);
    modbusw(SH, 541, uint16, 0xA900);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2);
    if !rx
        sleep(50);
        rx := getbits(modbusr(SH, 550, uint16), 0, 2);
    end
    if rx
        x := modbusr(SH, 541, uint16);
        if getbyte(x, 0) = 0xFF
            #match: lets check
            return(2);
        else
            return(7);
        end
    else
        return(7);
    end
end
if Mu = 2
    # find max short address
    if SHORTADDR >= 63
        status := 254;
        return(9);
    end
    if iterator >= 64
        status := 10;
        return(3);
    end
    modbusw(SH, 511, uint16, (iterator << 8) + 0x91);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 511, uint16);
    if (x = 0xFF, SHORTADDR := iterator); 
    iterator := iterator + 1;
end
if Mu = 3
    # set SEARCHADDR
    SEARCHADDRM := SEARCHADDRH - ((SEARCHADDRH - SEARCHADDRL) >> 1);
    if(SEARCHADDRM = SEARCHADDRH or SEARCHADDRM = SEARCHADDRL, return(6));
    modbusw(SH, 541, uint16, 0xB500 + getbyte(SEARCHADDRM,0));
    sleep(50);
    modbusw(SH, 541, uint16, 0xB300 + getbyte(SEARCHADDRM,1));
    sleep(50);
    modbusw(SH, 541, uint16, 0xB100 + getbyte(SEARCHADDRM,2));
    sleep(50);
    return(4);
end
if Mu = 4
    # COMPARE
    modbusw(SH, 541, uint16, 0xA900);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2);
    if !rx
        sleep(50);
        rx := getbits(modbusr(SH, 550, uint16), 0, 2);
    end
    if rx
        x := modbusr(SH, 541, uint16);
        #collision or match: lets search the lower segment
        SEARCHADDRH := SEARCHADDRM;
    else
        #no response: lets look up in the higher segment
        SEARCHADDRL := SEARCHADDRM;
    end
    return(3);
end
if Mu = 6
    # check SEARCHADDRL
    modbusw(SH, 541, uint16, 0xB500 + getbyte(SEARCHADDRL,0));
    sleep(50);
    modbusw(SH, 541, uint16, 0xB300 + getbyte(SEARCHADDRL,1));
    sleep(50);
    modbusw(SH, 541, uint16, 0xB100 + getbyte(SEARCHADDRL,2));
    sleep(50);
    modbusw(SH, 541, uint16, 0xA900);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2);
    if !rx
        sleep(50);
        rx := getbits(modbusr(SH, 550, uint16), 0, 2);
    end
    if rx
        x := modbusr(SH, 541, uint16);
        if getbyte(x, 0) = 0xFF
            #exact match: we have it, lets finish
            return(5);
        else
            #collision: 2 gear with same SEARCHADDR or something went wrong, start over
            return(7);
        end
    end
    # check SEARCHADDRH
    modbusw(SH, 541, uint16, 0xB500 + getbyte(SEARCHADDRH,0));
    sleep(50);
    modbusw(SH, 541, uint16, 0xB300 + getbyte(SEARCHADDRH,1));
    sleep(50);
    modbusw(SH, 541, uint16, 0xB100 + getbyte(SEARCHADDRH,2));
    sleep(50);
    modbusw(SH, 541, uint16, 0xA900);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2);
    if !rx
        sleep(50);
        rx := getbits(modbusr(SH, 550, uint16), 0, 2);
    end    
    if rx
        x := modbusr(SH, 541, uint16);
        if getbyte(x, 0) = 0xFF
            #exact match: we have it, lets finish
            return(5);
        else
            #collision: 2 gear with same SEARCHADDR or something went wrong, start over
            return(7);
        end
    else
        #no response: something went wrong, finish with error
        status := 220;
        #return(9);
        return(7);
    end
end
if Mu = 5
	exit := 3;
    # PROGRAM SHORT ADDRESS
    SHORTADDR := SHORTADDR + 1;
    #program
    modbusw(SH, 542, uint16, 0xB701 + (SHORTADDR << 1));
    sleep(100);
    #verify
    modbusw(SH, 541, uint16, 0xB901 + (SHORTADDR << 1));
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
    x := modbusr(SH, 541, uint16);
    if getbyte(x, 0) = 0xFF
        status := 0;
    else
        status := 230;
        #return(9);
        SHORTADDR := SHORTADDR - 1;
        return(7);
    end
    #blink
    modbusw(SH, 511, uint16, SHORTADDR + 0x06);
    sleep(500);
    modbusw(SH, 511, uint16, SHORTADDR + 0x05);
    sleep(500);
    modbusw(SH, 511, uint16, SHORTADDR + 0x06);
    #WITHDRAW
    modbusw(SH, 541, uint16, 0xAB00);
    sleep(100);
    SEARCHADDRH := 0xFFFFFF;
    SEARCHADDRL := 0;
    return(1);
end
if Mu = 9
    # finish
    if(status = 99, adderror("Timeout!"));
    if(status = 220, adderror("Check failed! (" + tostring(SEARCHADDRH, "X2") + " | " + tostring(SEARCHADDRL, "X2") + " )"));
    if(status = 230, adderror("Verify short address failed! (" + tostring(SHORTADDR, "X2") + " | " + tostring(x, "X2") + 
        " | " + tostring(SEARCHADDRH, "X2") + " | " + tostring(SEARCHADDRM, "X2") + " | " + tostring(SEARCHADDRL, "X2") + " )"));
    if(status = 231, adderror("Short address mismatch! (" + tostring(SHORTADDR, "X2") + " | " + tostring(x, "X2") + " )"));
    if(status = 254, adderror("All short addresses are in use!"));
    if status = 255
        modbusw(SH, 531, uint16, 0x96);
        sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2); if(rx, 0, sleep(50));
        x := modbusr(SH, 531, uint16);
        if getbyte(x, 0) = 0xFF
            adderror("Some gear is still missing short address, but no response from SEARCHADDRH! ( " + tostring(SEARCHADDRH, "X2") + " )");
        else    
            status := 1;
        end
    end
    if(status = 1, addinfo("Search finished")); 
    if(status = 200 or status = 230 or status = 231 or status = 254, iterator := 0); 
end
#debug
#if(Mu = 7, addinfo("Debug:" + tostring(x, "X2") + " | " + status),0);

#if(Mu = 1, status := "rx:" + getbits(y, 0, 2) + "|" + getbits(y, 4, 1) + "|" + getbits(y, 5, 1), 0);
#if(Mu = 1, return(7),0);
if Mu = 7
	if SEARCHADDRH = SEARCHADDRL
    	SEARCHADDRH := 0xFFFFFF;
    	SEARCHADDRL := 0;
    	exit := exit -1;
        return(1);
    end
	SEARCHADDRH := SEARCHADDRH >> 1;
	SEARCHADDRL := 0;
	if(iterator < 64, SHORTADDR := -1);
	if(iterator < 64, iterator := 0);    
    # check SEARCHADDRH
    modbusw(SH, 541, uint16, 0xB500 + getbyte(SEARCHADDRH,0));
    sleep(500);
    modbusw(SH, 541, uint16, 0xB300 + getbyte(SEARCHADDRH,1));
    sleep(500);
    modbusw(SH, 541, uint16, 0xB100 + getbyte(SEARCHADDRH,2));
    sleep(500);
    modbusw(SH, 541, uint16, 0xA900);
    sleep(5); rx := getbits(modbusr(SH, 550, uint16), 0, 2);
    if !rx
        sleep(50);
        rx := getbits(modbusr(SH, 550, uint16), 0, 2);
    end
    if rx
        x := modbusr(SH, 541, uint16);
        if getbyte(x, 0) = 0xFF
            #match: lets check
            return(2);
        else
            return(6);
        end
    else
        return(6);
    end
end
return(Mu);
Zápis stavu přepínače
# TERMINATE
if(Mu = 0, modbusw(SH, 542, uint16, 0xA100), 0);
# INITIALIZE:CONTROL GEARS WITHOUT SHORT ADDRESS
if(Mu = 1, modbusw(SH, 542, uint16, 0xA5FF), 0);
if(Mu = 1, sleep(100));
# RANDOMIZE
if(Mu = 1, modbusw(SH, 542, uint16, 0xA700), 0);
if(Mu = 1, sleep(100));
# Init SEARCHADDR variables
if(Mu = 1, SEARCHADDRH := 0xFFFFFF, 0);
#if(Mu = 1, SEARCHADDRM := SEARCHADDRH / 2, 0);
if(Mu = 1, SEARCHADDRL := 0, 0);
if(Mu = 1, if(iterator < 64, SHORTADDR := -1, 0), 0);
if(Mu = 1, if(iterator < 64, iterator := 0, 0), 0);
if(Mu = 1, exit := 3, 0);
# Reset Short Addresses 
if(Mu = 8, modbusw(h, 541, uint16, 0xA3FF), 0);
if(Mu = 8, sleep(100));
if(Mu = 8, modbusw(h, 532, uint16, 0x80), 0);
if(Mu = 8, SHORTADDR := -1, 0);
if(Mu = 8, iterator := 64, 0);
# Reset All to Defaults 
#if(Mu = 7, modbusw(SH, 532, uint16, 0x20), 0);
#if(Mu = 7, sleep(100));
#collision: halve interval


sleep(100);
Připojení: Modbus RTU • 9600 baud• 8N1 • Slave ID: $[SlaveId]
Možná vylepšení (9)
  • H:510 Lamp Level (per short address) — Daily operational dimming (upper 8b = short addr, lower 8b = arc power 0–254). Covered by the sibling operational template (Resi Dali, Dali.xml) — this commissioning template is intentionally addressing-only
  • H:520 Group Level — Group 0–15 arc power for daily group control — handled by the operational Resi Dali template
  • H:521 Group Command — Group commands (ON/OFF/scenes/recall) — not needed for addressing
  • H:531 Broadcast Command — The Finish state uses H:531=0x96 internally to poll QUERY MISSING SHORT ADDRESS, but the register is not exposed as a user action
  • H:551 DALI Bus Error (word) — 1 = DALI bus fault / short — useful diagnostic during commissioning, could be added as a module-level service attribute
  • H:100 DALI Priority Slot — 0–4 → 12–16 ms forward-frame slots, default 2. Bus-tuning parameter; safe to leave at default
  • H:65222 Baud Rate (FLASH) — Only honored when DIP1=DIP2=ON. Template pins 9600 baud via connection_details, so this register is out of scope
  • H:65224 Parity (FLASH) — 0=None, 1=Even, 2=Odd. Template hard-codes None (8N1)
  • H:65225 Stop Bits (FLASH) — 1 or 2. Template hard-codes 1

Zdroje