<?xml version="1.0" encoding="UTF-8"?>
<!--Copyright (C) 2004-2015 InsBud www.insbud.net-->
<Device xmlns="http://www.insbud.net/common/devcfg" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.insbud.net/common/devcfg devcfg.xsd"
        Version="1.2"
        HardwareId="3" 
        FirmwareId="3" 
        FirmwareVersion="8">
        
  <HoldingRegisters>
  
    <!--
    dev.hardware                  - identyfikator sprzętu - 3
    
    dev.firmware                  - identyfikator oprogramowania - 3
    
    dev.version                   - wersja oprogramowania - 8
    
    dev.reset                     - ustawienie na jeden tej flagi powoduje przywrócenie ustawień fabrycznych
    
    dev.restart                   - ustawienie na jeden tej flagi powoduje ponowne uruchomienie urządzenia

    modbus.address                - adres modbus urządzenia - wartość fabryczna to 255
    
    input.di.0.a, 
    input.di.0.b, 
    input.di.1.a, 
    input.di.1.b, 
    input.di.2.a, 
    input.di.2.b, 
    input.di.3.a, 
    input.di.3.b                  - wejścia dwustanowe. Rejestry te reprezentują cztery wejścia dwustanowe, do których :
    
                                    konfiguracja 1. podłączone są po dwa przyciski zbocznikowane rezystorami 6k8 (btnA) oraz 10k(btnB). 
                                    konfiguracja 2. lub jako alternatywa może być podłączony jeden przycisk bez żadnego rezystora (btnC).
                                    
                                                                                      -+
                                        btnA |                                         |
                                          -------      +------+                        |
                                      +---^     ^------| 6k8  |-----+                  |
                                      |                +------+     |                  +- konfiguracja 1
                                      | btnB |                      |                  |
                                      |   -------      +------+     |                  |
                                      *---^     ^------| 10k  |-----*--o to DI(0..3)   |
                                      |                +------+                        |
                                      +--------------------------------o to GND        |
                                                                                      -+
                                                                                      -+
                                        btnC |                                         |
                                          -------                                      |
                                      +---^     ^----------------------o to DI(0..3)   +- konfiguracja 2
                                      |                                                |
                                      +--------------------------------o to GND        |
                                                                                      -+
                                    Nie są wymagane żadne dodatkowe kroki żeby wybrać żądaną konfigurację. Należy po prostu przyciski podłączyć zgodnie z
                                    jednym z powyższych schematów. 
                                    Jeżeli wybrana jest konfiguracja 1, wówczas stan przycisków btnA (może ich być do 4
                                    ponieważ są 4 zaciski wejściowe) zostanie zapisany w rejestrach input.di.N.a gdzie N = 0..3. Natomiast stan przycisków
                                    btnB zapisany zostanie w rejestrach input.di.N.b, gdzie N = 0..3.
                                    W przypadku wyboru konfiguracji 2, stan przycisków btnC zostanie zapisany w rejestrach input.di.N.a gdzie N = 0..3, 
                                    natomiast rejestry input.di.N.b, gdzie N = 0..3 są nie aktywne. Konfiguracje mogą się różnić dla każdego wejścia fizycznego.
                                    
                                    Pojawienie się wartości "1" na danym wejściu logicznym input.di.N.a (N = 0..3) powoduje przełączenie
                                    odpowiadającego mu wyjścia dwustanowego na stan przeciwny. (input.di.0.a -> output.do.0).
                                    
                                    input.di.0.a, input.di.1.a, input.di.2.a, input.di.3.a - do tych wejść zostaną podłączone wyłączniki dzwonkowe, których zadaniem
                                    jest sterowanie oświetleniem podłączonym do (output.do.0 .. output.do.3.). Sterowanie oświetleniem jest również możliwe z poziomu
                                    interfejsu modbus, używając do tego rejestry setting.light.0 .. setting.light.3 oraz w przypadku świateł (output.do.0 .. output.do.2)
                                    przy pomocy czujników ruchu, podłączonych do wejść input.di.0.b .. input.di.2.b. Oświetlenie output.do.3 nie posiada możliwości
                                    podłączenia czujki ruchu, ponieważ wejście input.di.3.b jest wykożystane do sterowania roletą.
                                    Pojawienie się zbocza opadającego (zwarcie) na danym wejściu input.do.N.a (N == 0..3) powoduje:
                                    - gdy nie jest aktywne wejście związane z czujką ruchu (rozwarte)(input.di.0.b .. input.di.2.b) - przełączenie powiązanego wyjścia 
                                      output.do.N na stan przeciwny. 
                                    - gdy aktywne jest (zwarte) wejście związane z czujką ruchu (nie dotyczy to output.do.3)oraz :
                                      - poprzednio oświetlenie było załączone przy pomocy input.di.N.a, wówczas oświetlenie zostanie chwilowo wyłączone (na 2 sek.) po czym
                                        zostanie ponownie załączone, o ile w dalszym ciągu będzie aktywna czujka ruchu. Po deaktywacji czujki ruchu, oświetlenie zostanie wyłączone.
                                      - poprzednio oświetlenie było wyłączone przy pomocy input.di.N.a, wówczas nie będzie żadnej reakcji lecz po deaktywacji czujki ruchu
                                        oświetlenie zostanie wyłączone.
                                    
                                    input.di.3.b - wejście które służy do sterowania roletą,  jeżeli roleta stoi i wejście input.di.3.b jest
                                    aktywowane (przyjmuje wartość 1), to roleta rusza w przeciwnym kierunku niż poruszała się poprzednio, do 
                                    całkowitego zamknięcia/otwarcia.  jeżeli roleta jest w trakcie ruchu i aktywowane zostanie input.di.3.b, to następuje 
                                    jej zatrzymanie w bieżącej pozycji. W tym wypadku do rejestru counter.louvre.demand.value wpisana zostaje estymowana 
                                    wartość położenia rolety. Jeżeli natomiast roleta znajduje się w strefie pozornego ruchu, (patrz opis rejestru 
                                    setting.louvre.demand.value) związanego z kalibracją, wówczas po aktywacji input.di.3.b, wysterowany zostaje 
                                    natychmiast przeciwny kierunek ruchu. Sterowanie roletą przy użyciu input.di.3.b możliwe jest gdy wejście DI3 znajduje 
                                    się w konfiguracji 1.
                                    
                                    input.di.0.b, input.di.1.b, input.di.2.b - do tych rejestrów podpięte zostaną czujki ruchu, sterujące wyjściami output.do.0 .. output.do.2.
                                    wyjście output.do.3 nie ma możliwości podłączenia czujki ruchu. Zakłada się, że podłączone czujki ruchu wyzwalane są stanem a nie zboczem, 
                                    co oznacza że powiązane wyjście output.do.M (M = 0..2) jest tak długo aktywne, jak długo czujka zwiera wejście input.di.M.b (M = 0..2).
        
    output.px.0
    output.px.1                   - wyjścia analogowe PWM [0..100] - tylko do odczytu. Do tych wyjść zostanie podłączona roleta, przy czym
                                    output.px.0 zamyka roletę a output.px.1 otwiera roletę. Nie ma możliwości załączenia obydwu wejść jednocześnie.
                                    Gdy roleta jest otwierana/zamykana, wówczas odpowiedni z rejestrów output.px.1/output.px.0 przyjmuje wartości rejestru  
                                    setting.speed.px.1/setting.speed.px.0. Gdy roleta pozostaje w spoczynku, wówczas wartości obu
                                    rejestrów wynoszą 0. Po włączeniu urządzenia, przeprowadzona zostaje kalibracja, czyli roleta zostaje otwarta
                                    maksymalnie (output.px.1 zostaje wysterowane na wartość rejestru setting.speed.px.1 przez okres czasu
                                    półtora raza dłuższy niż wartość rejestru setting.louvre.rising_time po czym przyjmuje wartość 0) a następnie roleta
                                    zostaje ustawiona zgodnie z wartością rejestru setting.louvre.value.
                              
    output.do.0
    output.do.1
    output.do.2
    output.do.3                   - wyjścia dwustanowe przekaźnikowe. [0..1]. Do wyjść tych podłączone zostanie oświetlenie. Rejestry tylko do odczytu.
                                    Sterowanie tymi rejestrami zostało opisane przy okazji omawiania rejestrów input.di.N.a (N = 0..3) oraz output.di.M.b (M = 0..2)
   
    setting.light.0
    setting.light.1
    setting.light.2
    setting.light.3               - rejestry sterujące oświetleniem podłączonym do odpowiednich wyjść output.do.0 .. output.do.3. - RW. Wpis omówionej poniżej wartości
                                    do jednego z tych rejestrów powoduje reakcję analogiczną, jak przyciśnięcie przycisku podłączonego do wejścia input.di.0.a .. input.di.3.a.
                                    rejestry te mogą przyjmować następujące wartości:
                                    0 - powoduje próbę wyłączenia oświetlenia, podłączonego do powiązanego wyjścia output.do.N (N = 0..3)
                                    1 - powoduje załączenie oświetlenia, podłączonego do powiązanego wyjścia output.do.N (N = 0..3).
                                    2 - powoduje próbę zmiany stanu na przeciwny wyjścia output.do.N (N = 0..3). - wpis tej wartości powoduje reakcję identyczną z 
                                        przyciśnięciem przycisku, podłączonego do input.di.N.a (N = 0..3).
                                    65535 - (0xffff) - nie powoduje żadnej reakcji.
                                    Odczyt tych rejestrów powoduje zwrócenie 0xffff - 65535
   
    setting.speed.px.0
    setting.speed.px.1            - Prędkość zamykania (setting.speed.px.0) i otwierania (setting.speed.px.1) rolet [1..100]. Wartość fabryczna wynosi 100.
                                                            
    setting.louvre.demand.value   - procent otwarcia rolety [0..100] 0 - zamknięta, 100 - otwarta - wartość zadana. Pośrednie wartości odpowiadają pośrednim 
                                    położeniom w sposób proporcjonalny. Wartość fabryczna: 100 - roleta całkowicie otwarta. Próba zapisu wartości 65535 będzie 
                                    ignorowana bez zgłoszenia błędu. Rejestr służy do zapisu wartości, odczytywana wartość wynosi 65535. Zapis poprawnej wartości 
                                    do tego rejestru faktycznie skutkuje zmianą wartości rejestru counter.louvre.value. Każdorazowo, gdy rejestr przyjmuje wartość
                                    maksymalną (100) bądź minimalną (0) następuje kalibracja, polegająca na wysterowaniu rolety w danym kierunku przez okres
                                    150% czasu całkowitego przemierzenia rolety w danym kierunku (patrz setting.louvre.rising_time oraz 
                                    setting.louvre.falling_time). W ten sposób minimalizuję się błąd położenia rolety. Gdy wysterowano roletę na jedną z
                                    pozycji max lub min, wówczas od momentu zatrzymania rolety (przez krańcówkę) do czasu zdjęcia napięcia z odpowiedniego
                                    zacisku px obowiązuje tzw strefa pozornego ruchu.
    
    setting.louvre.rising_time    - czas potrzebny na osiągnięcie górnego skrajnego położenia rolety z poziomu dolnego skrajnego położenia [1..65535].
                                    można to nazwać czasem całkowitego otwarcia. Czas ten jest wyrażony w dziesiętnych częściach sekundy. 
                                    Wartość fabryczna: 200 (20 sek). Czas ten dotyczy pracy z prędkością 100%. Mniejsza prędkość powoduje
                                    odpowiednie wydłużenie tego okresu

    setting.louvre.falling_time   - czas potrzebny na osiągnięcie dolnego skrajnego położenia rolety z poziomu górnego skrajnego położenia [1..65535].
                                    można to nazwać czasem całkowitego zamknięcia. Czas ten jest wyrażony w dziesiętnych częściach sekundy. 
                                    Wartość fabryczna: 200 (20 sek). Czas ten dotyczy pracy z prędkością 100%. Mniejsza prędkość powoduje
                                    odpowiednie wydłużenie tego okresu

    setting.louvre.startup_time   - czas potrzebny na rozruch silnika rolety [0..65535]. Cas ten jest wyrażony w dziesiętnych częściach sekundy.
                                    Wartość fabryczna: 0

                                    
    setting.louvre.chdir_time     - czas potrzebny na zmianę kierunku przesuwu rolet [0..65535]. Gdy bieżący kierunek rolety jest inny od poprzedniego, nawet gdy
                                    po drodze nastąpił przestój, wówczas czas ten jest doliczany do czasu potrzebnego na osiągnięcie wymaganego poziomu.
                                    (o tyle dłużej zostanie załączone odpowiednie wyjście output.px.0/output.px.1). Czas ten jest wyrażony w dziesiętnych 
                                    częściach sekundy. Wartość fabryczna: 0. Czas ten dotyczy pracy z prędkością 100%. Mniejsza prędkość powoduje
                                    odpowiednie wydłużenie tego okresu
                                  
    setting.louvre.mode           - Tryb pracy rolety (wartość fabryczna 3)
                                    0 - załączone zamykanie. 
                                    1 - załączone otwieranie. 
                                    2 - roleta stoi w miejscu. 
                                    3 - roleta w trybie auto - pozycja jest wyznaczana na podstawie rejestru setting.louvre.value
                                    
    setting.louvre.init_up_time   - jest to dodatkowy czas doliczany do czasu potrzebnego na osiągnięcie zadanego położenia, w przypadku gdy roleta jest
                                    całkowicie zamnkięta. Czas ten jest wyrażony w dziesiętnych częściach sekundy. Wartości fabryczna: 0. [0..65535]
            
    setting.louvre.init_down_time - jest to dodatkowy czas doliczany do czasu potrzebnego na osiągnięcie zadanego położenia, w przypadku gdy roleta jest
                                    całkowicie otwarta. Czas ten jest wyrażony w dziesiętnych częściach sekundy. Wartości fabryczna: 0. [0..65535]

    setting.louvre.chdir_delay    - [RW] jest to celowo wprowadzona zwłoka pomiędzy wyłączeniem jednego kierunku przesuwu rolety a załączeniem kolejnego
                                    wyrażona w dziesiętnych częściach sekundy [1..255]. Zwłokę tę wprowadzono w celu ochrony elementów sterujących takich
                                    jak triaki lub przekaźniki przed przeciążeniem. Wartość fabryczna: 10 (1s)

    setting.louvre.btn_locked     - [RW], [0..1] 0 - możliwe jest operowanie roletą za pomocą przycisku (input.di.3.b). 1 - sterowanie roletą za pomocą 
                                    przycisku input.di.3.b jest zablokowane. Wartość fabryczna 0.

    counter.louvre.demand.value   - procent otwarcia rolety [0..100] 0 - zamknięta, 100 - otwarta - wartość zadana. Rejestr tylko do odczytu, czytaj opis 
                                    rejestru setting.louvre.demand.value.

    counter.louvre.current.value  - procent otwarcia rolety [0..100] 0 - zamknięta, 100 - otwarta - wartość bieżąca - estymowana. Rejestr tylko do odczytu.

    counter.system.work_time      - czas pracy urządzenia wyrażony w minutach             

    -->

    <HReg Addr="0" Name="dev.hardware" Rd="1" Wr="0" Min="0" Max="65535" Presentation="unsigned"/>
    <HReg Addr="1" Name="dev.firmware" Rd="1" Wr="0" Min="0" Max="65535" Presentation="unsigned"/>
    <HReg Addr="2" Name="dev.version" Rd="1" Wr="0" Min="0" Max="65535" Presentation="unsigned"/>
    <HReg Addr="3" Name="dev.reset" Rd="1" Wr="1" Min="1" Max="1" Presentation="signed"/>
    <HReg Addr="4" Name="dev.restart" Rd="1" Wr="1" Min="1" Max="1" Presentation="signed"/>
    <HReg Addr="5" Name="modbus.address" Rd="1" Wr="1" Min="1" Max="255" Presentation="signed"/>
    <HReg Addr="6" Name="input.di.0.a" Rd="1" Wr="0" Min="0" Max="1" Presentation="signed"/>
    <HReg Addr="7" Name="input.di.0.b" Rd="1" Wr="0" Min="0" Max="1" Presentation="signed"/>
    <HReg Addr="8" Name="input.di.1.a" Rd="1" Wr="0" Min="0" Max="1" Presentation="signed"/>
    <HReg Addr="9" Name="input.di.1.b" Rd="1" Wr="0" Min="0" Max="1" Presentation="signed"/>
    <HReg Addr="10" Name="input.di.2.a" Rd="1" Wr="0" Min="0" Max="1" Presentation="signed"/>
    <HReg Addr="11" Name="input.di.2.b" Rd="1" Wr="0" Min="0" Max="1" Presentation="signed"/>
    <HReg Addr="12" Name="input.di.3.a" Rd="1" Wr="0" Min="0" Max="1" Presentation="signed"/>
    <HReg Addr="13" Name="input.di.3.b" Rd="1" Wr="0" Min="0" Max="1" Presentation="signed"/>
    <HReg Addr="14" Name="output.px.0" Rd="1" Wr="0" Min="0" Max="100" Presentation="signed"/>
    <HReg Addr="15" Name="output.px.1" Rd="1" Wr="0" Min="0" Max="100" Presentation="signed"/>
    <HReg Addr="16" Name="output.do.0" Rd="1" Wr="0" Min="0" Max="1" Presentation="signed"/>
    <HReg Addr="17" Name="output.do.1" Rd="1" Wr="0" Min="0" Max="1" Presentation="signed"/>
    <HReg Addr="18" Name="output.do.2" Rd="1" Wr="0" Min="0" Max="1" Presentation="signed"/>
    <HReg Addr="19" Name="output.do.3" Rd="1" Wr="0" Min="0" Max="1" Presentation="signed"/>
    <HReg Addr="20" Name="setting.light.0" Rd="1" Wr="1" Min="0" Max="65535" Presentation="unsigned"/>
    <HReg Addr="21" Name="setting.light.1" Rd="1" Wr="1" Min="0" Max="65535" Presentation="unsigned"/>
    <HReg Addr="22" Name="setting.light.2" Rd="1" Wr="1" Min="0" Max="65535" Presentation="unsigned"/>
    <HReg Addr="23" Name="setting.light.3" Rd="1" Wr="1" Min="0" Max="65535" Presentation="unsigned"/>
    <HReg Addr="24" Name="setting.speed.px.0" Rd="1" Wr="1" Min="1" Max="100" Presentation="signed"/>
    <HReg Addr="25" Name="setting.speed.px.1" Rd="1" Wr="1" Min="1" Max="100" Presentation="unsigned"/>
    <HReg Addr="26" Name="setting.louvre.demand.value" Rd="1" Wr="1" Min="0" Max="65535" Presentation="unsigned"/>
    <HReg Addr="27" Name="setting.louvre.rising_time" Rd="1" Wr="1" Min="1" Max="65535" Presentation="unsigned"/>
    <HReg Addr="28" Name="setting.louvre.falling_time" Rd="1" Wr="1" Min="1" Max="65535" Presentation="unsigned"/>
    <HReg Addr="29" Name="setting.louvre.startup_time" Rd="1" Wr="1" Min="0" Max="65535" Presentation="unsigned"/>
    <HReg Addr="30" Name="setting.louvre.chdir_time" Rd="1" Wr="1" Min="0" Max="65535" Presentation="unsigned"/>
    <HReg Addr="31" Name="setting.louvre.mode" Rd="1" Wr="1" Min="0" Max="3" Presentation="signed"/>
    <HReg Addr="32" Name="setting.louvre.init_up_time" Rd="1" Wr="1" Min="0" Max="65535" Presentation="unsigned"/>
    <HReg Addr="33" Name="setting.louvre.init_down_time" Rd="1" Wr="1" Min="0" Max="65535" Presentation="unsigned"/>
    <HReg Addr="34" Name="setting.louvre.chdir_delay" Rd="1" Wr="1" Min="1" Max="255" Presentation="unsigned"/>
    <HReg Addr="35" Name="setting.louvre.btn_locked" Rd="1" Wr="1" Min="0" Max="1" Presentation="unsigned"/>
    <HReg Addr="36" Name="counter.louvre.demand.value" Rd="1" Wr="0" Min="0" Max="100" Presentation="unsigned"/>
    <HReg Addr="37" Name="counter.louvre.current.value" Rd="1" Wr="0" Min="0" Max="100" Presentation="unsigned"/>
    <HReg Addr="38" Name="counter.system.work_time" Rd="1" Wr="0" Min="0" Max="65535" Presentation="unsigned"/>
  </HoldingRegisters>
  
  <InputRegisters>
  </InputRegisters>
  
  <Coils>
  </Coils>
  
  <DiscreteInputs>
  </DiscreteInputs>
  

</Device>