Demona służącego do komunikacji z urządzeniami w protokole M-Bus konfigurujemy, podobnie jak każdego innego daemon wchodzącego w skład systemu SZARP, poprzez plik params.xml. W tym celu tworzymy nową sekcję device podając w niej odpowiednią ścieżkę do Damona oraz, jako ścieżkę do urządzenia, ścieżkę do konwertera M-Bus <-> RS232, na przykład:
<device daemon="/opt/szarp/bin/mbusdmn" path="/dev/ttyS0">
Polecane jest również skonfigurowanie odpowiedniej prędkości
transmisji poprzez podanie atrybutu
speed, np.:
<device ... speed="300" ... >
Prędkość 300 bodów obsługiwana powinna być przez wszystkie
urządzenia w protokole M-Bus, wyższe prędkości należy
wykorzystywać tylko wtedy, kiedy mamy pewność, że wszystkie
urządzenia podłączone do naszej szyny potrafią ją obsłużyć.
Można również ustalić odstęp między kolejnymi odczytami
danych z urządzenia - należy go podać w sekundach jako
wartość parametru askdelay.
Wszystkie pozostałe atrybuty konfiguracyjne dotyczące tego demona powinny być umieszczone w przestrzeni nazw http://www.praterm.com.pl/SZARP/ipk-extra, więc warto zadbać o nazwanie jej w params.xml, np.:
<device ... xmlns:mbus="http://www.praterm.com.pl/SZARP/ipk-extra" ... >
Oczywiście nazwa "mbus" jest tylko nazwą przykładową,
jednakże polecaną ze względu na czytelność i łatwość
zrozumienia. Oczywiście nazwanie przestrzeni nazw nie musi
występować w elemencie device - może
znajdować się również w dowolnym elemencie nadrzędnym.
Do najważniejszych parametrów, które można skonfigurować w elemencie device należą:
byte_interval - czas oczekiwania między odczytaniem kolejnych bajtów; wartość ta jest zazwyczaj dobierana eksperymentalnie, indywidualnie dla każdego urządzenia; domyślna wartość to 10 000 mikrosekund
databits - ilość bitów danych w ramce RS232; domyślna wartość to 8
stopbits - ilość bitów stopu w ramce RS232; domyślna wartość to 1
parity - typ parzystości wykorzystywany w ramce RS232; dozwolone wartości to: "even" (parzystość parzysta), "odd" (parzystość nieparzysta), "none" (brak bitu parzystości), domyślna wartość to "none"
precision - ilość miejsc po przecinku, które mają być brane pod uwagę przy konwersji liczby zmiennoprzecinkowej (jeśli taka zostanie odebrana od urządzenia) na liczbę stałoprzecinkową; domyślna wartość to 4
Poza tymi atrybutami występują także istotne atrybuty konfiguracyjne w elemencie unit, które pozwalają skonfigurować parametry komunikacji dla poszczególnych urządzeń (w przeciwieństwie do parametrów z elementu device, które kontrolują globalnie transmisję w całej szynie M-Bus). Oto one:
address - adres na szynie M-Bus urządzenia, z którym chcemy nawiązywać komunikację; domyślny adres to 254, czyli specjalna wartość oznaczająca wysłanie zapytania do wszystkich urządzeń znajdujących się na szynie - powinna ona być używana tylko w trakcie rozpoznawania konfiguracji nowo podłączonego urządzenia, później należy ją zamienić na adres, z którym zgłasza się urządzenie
reset - umożliwia wysłanie do urządzenia po nawiązaniu połączenia żądania wykonania resetu (pomocne przy urządzeniach, których konfiguracja została zmieniona w nieznany sposób); możliwe wartości tego parametru to:
no - wartość domyślna, równoznaczna z nieumieszczeniem tego atrybutu w konfiguracji; oznacza brak jakiegokolwiek resetu
full - wykonuje pełny reset aplikacji w urządzeniu, tzn. zeruje wszystkie ustawienia, liczniki, daty itp.
setup - wykonuje reset ustawień w urządzeniu, tzn. resetuje ustawienia transmisji, adres na szynie M-Bus oraz ustawione daty
select_data - dokonuje wyboru danych do odczytu z urządzenia; w protokole M-Bus możliwy jest dość rozbudowany wybór danych do odczytu, jednak daemon obsługuje jedynie następujące wartości parametru:
no - wartość domyślna, równoznaczna z nieumieszczeniem tego atrybutu w konfiguracji; oznacza brak wyboru danych do odczytu, a więc odczyt danych domyślnie przesyłanych przez urządzenie
all - wybiera do odczytu wszystkie dane zgromadzone w urządzeniu
change_address - adres urządzenia w protokole M-Bus, który ma ono przyjąć po zmianie adresu; domyślna wartość to 0 oznaczająca niewykonywanie procedury zmiany adresu
reinitialize_on_error - opcja ta wymusza wykonanie ponownej inicjalizacji z urządzeniem w razie stwierdzenia błędów w transmisji, co jest przydatne w przypadku urządzeń, z którymi komunikacja okresowo ulega zawieszeniu; dozwolone wartości to "yes" oraz "no"
Oprócz tego w każdym elemencie param można skonfigurować specjalne operacje (transformacje), które mają być wykonywane na poszczególnych wartościach przesyłanych do systemu SZARP. Możliwe atrybuty to:
multiplier - liczba przez którą należy pomnożyć otrzymaną wartość
divisor - liczba przez którą należy podzielić otrzymaną wartość
modulo - liczba modulo którą należy wziąć daną wartość
transform - bardziej skomplikowana operacja, którą należy wykonać na parametrze; dostępne operacje to:
lw - pobranie z parametru 15 najmniej znaczących bitów
mw - pobranie z parametru bitów 16-30
hw - pobranie z parametru bitów 31-32.
special - oznacza specjalną operację, którą należy wykonać, aby uzyskać wartość danego parametru; dostępne operacje to:
prev - wartość tego parametru zostanie wzięta jako wartość poprzedniego parametru odczytanego od urządzenia
Przykładowa konfiguracja w params.xml dla ciepłomierza Landis&Gyr WSD-6 z modułem komunikacyjnym WZD-MB:
<device xmlns:mbus="http://www.praterm.com.pl/SZARP/ipk-extra" daemon="/opt/szarp/bin/mbusdmn"
path="/dev/ttyS2" speed="300" mbus:byte_interval="50000" mbus:databits="8" mbus:stopbits="0"
mbus:parity="even" options="--askdelay 30240">
<unit id="1" type="1" subtype="1" bufsize="1" mbus:address="0">
<param name="Landis Gyr:Węzeł:czas pracy LSW" short_name="OnL" draw_name="-" unit="-" prec="0"
mbus:transform="lw">
<raport title="Landis Gyr" order="25"/>
</param>
<param name="Landis Gyr:Węzeł:czas pracy MSW" short_name="OnM" draw_name="-" unit="-" prec="0"
mbus:transform="mw" mbus:special="prev">
<raport title="Landis Gyr" order="26"/>
</param>
<param name="Landis Gyr:Węzeł:aktualny przepływ z licznika 1 LSW" short_name="Gwy1L"
draw_name="-" unit="-" prec="4" base_ind="auto" mbus:transform="lw">
<raport title="Landis Gyr" order="1"/>
</param>
<param name="Landis Gyr:Węzeł:aktualny przepływ z licznika 1 MSW" short_name="Gwy1M"
draw_name="-" unit="-" prec="4" base_ind="auto" mbus:transform="mw" mbus:special="prev">
<raport title="Landis Gyr" order="2"/>
</param>
<param name="Landis Gyr:Węzeł:temperatura powrotna" short_name="Tpow" draw_name="Temp. powrotu"
unit="°C" prec="0" base_ind="auto">
<raport title="Landis Gyr" order="8"/>
<draw title="Landis Gyr" order="2" min="0" max="150" />
</param>
<param name="Landis Gyr:Węzeł:time point 1" short_name="-" draw_name="-" unit="-" prec="0"/>
<param name="Landis Gyr:Węzeł:objętość LSW" short_name="VL" draw_name="-" unit="m3" prec="0"
base_ind="auto" mbus:transform="lw">
<raport title="Landis Gyr" order="15"/>
</param>
<param name="Landis Gyr:Węzeł:objętość MSW" short_name="VM" draw_name="-" unit="m3" prec="0"
base_ind="auto" mbus:transform="mw" mbus:special="prev">
<raport title="Landis Gyr" order="16"/>
</param>
<param name="Landis Gyr:Węzeł:numer fabryczny LSW" short_name="NoL" draw_name="-" unit="-"
prec="0" mbus:transform="lw">
<raport title="Landis Gyr" order="29"/>
</param>
<param name="Landis Gyr:Węzeł:numer fabryczny MSW" short_name="NoM" draw_name="-" unit="-"
prec="0" mbus:transform="mw" mbus:special="prev">
<raport title="Landis Gyr" order="30"/>
</param>
<param name="Landis Gyr:Węzeł:temperatura wyjściowa" short_name="Twy"
draw_name="Temp. wyjściowa" unit="°C" prec="0" base_ind="auto">
<raport title="Landis Gyr" order="7"/>
<draw title="Landis Gyr" prior="11" order="1" min="0" max="150"/>
</param>
<param name="Landis Gyr:Węzeł:moc wyjściowa z licznika 2" short_name="Qwy2"
draw_name="Moc z licz. 2" unit="kW" prec="0" base_ind="auto">
<raport title="Landis Gyr" order="11"/>
<draw title="Landis Gyr" order="8" min="0" max="2000" />
</param>
<param name="Landis Gyr:Węzeł:czas pracy błędnej LSW" short_name="ErL" draw_name="-" unit="h"
prec="0" mbus:transform="lw">
<raport title="Landis Gyr" order="27"/>
</param>
<param name="Landis Gyr:Węzeł:czas pracy błędnej MSW" short_name="ErM" draw_name="-" unit="h"
prec="0" mbus:transform="mw" mbus:special="prev">
<raport title="Landis Gyr" order="28"/>
</param>
<param name="Landis Gyr:Węzeł:moc wyjściowa z licznika 1 LSW" short_name="Q1L" draw_name="-"
unit="kW" prec="0" base_ind="auto" mbus:transform="lw">
<raport title="Landis Gyr" order="9"/>
</param>
<param name="Landis Gyr:Węzeł:moc wyjściowa z licznika 1 MSW" short_name="Q1M" draw_name="-"
unit="kW" prec="0" base_ind="auto" mbus:transform="mw" mbus:special="prev">
<raport title="Landis Gyr" order="10"/>
</param>
<param name="Landis Gyr:Węzeł:aktualny przepływ z licznika 2" short_name="Gwy2" draw_name="-"
unit="m3/h" prec="1" base_ind="auto">
<raport title="Landis Gyr" order="3"/>
</param>
<param name="Landis Gyr:Węzeł:maksymalna moc wyjściowa" short_name="Qmax"
draw_name="Moc maksymalna" unit="kW" prec="0" base_ind="auto">
<raport title="Landis Gyr" order="12"/>
</param>
<param name="Landis Gyr:Węzeł:data maksimum mocy wyjściowej LSW" short_name="QmxDL"
draw_name="-" unit="-" prec="0" base_ind="auto" mbus:transform="lw">
<raport title="Landis Gyr" order="13"/>
</param>
<param name="Landis Gyr:Węzeł:data maksimum mocy wyjściowej MSW" short_name="QmxDM" draw_name="-"
unit="-" prec="0" base_ind="auto" mbus:transform="mw" mbus:special="prev">
<raport title="Landis Gyr" order="14"/>
</param>
<param name="Landis Gyr:Węzeł:energia z licznika 2 LSW" short_name="E2L" draw_name="-" unit="-"
prec="0" base_ind="auto" mbus:transform="lw">
<raport title="Landis Gyr" order="23"/>
</param>
<param name="Landis Gyr:Węzeł:energia z licznika 2 MSW" short_name="E2M" draw_name="-" unit="-"
prec="0" base_ind="auto" mbus:transform="mw" mbus:special="prev">
<raport title="Landis Gyr" order="24"/>
</param>
<param name="Landis Gyr:Węzeł:energia sumaryczna z licznika 1 LSW" short_name="Ec1L" draw_name="-"
unit="-" prec="0" base_ind="auto" mbus:transform="lw">
<raport title="Landis Gyr" order="21"/>
</param>
<param name="Landis Gyr:Węzeł:energia sumaryczna z licznika 1 MSW" short_name="Ec1M" draw_name="-"
unit="-" prec="0" base_ind="auto" mbus:transform="mw" mbus:special="prev">
<raport title="Landis Gyr" order="22"/>
</param>
<param name="Landis Gyr:Węzeł:energia z licznika 1 w taryfie 1 LSW" short_name="E1t1L" draw_name="-"
unit="-" prec="0" base_ind="auto" mbus:transform="lw">
<raport title="Landis Gyr" order="17"/>
</param>
<param name="Landis Gyr:Węzeł:energia z licznika 1 w taryfie 1 MSW" short_name="E1t1M" draw_name="-"
unit="-" prec="0" base_ind="auto" mbus:transform="lw" mbus:special="prev">
<raport title="Landis Gyr" order="18"/>
</param>
<param name="Landis Gyr:Węzeł:energia z licznika 1 w taryfie 2 LSW" short_name="E1t2L" draw_name="-"
unit="-" prec="0" base_ind="auto" mbus:transform="lw">
<raport title="Landis Gyr" order="19"/>
</param>
<param name="Landis Gyr:Węzeł:energia z licznika 1 w taryfie 2 MSW" short_name="E1t2M" draw_name="-"
unit="-" prec="0" base_ind="auto" mbus:transform="lw" mbus:special="prev">
<raport title="Landis Gyr" order="20"/>
</param>
<param name="Landis Gyr:Węzeł:data maksimum przepływu LSW" short_name="GmxDL" draw_name="-" unit="-"
prec="0" base_ind="auto" mbus:transform="lw">
<raport title="Landis Gyr" order="5"/>
</param>
<param name="Landis Gyr:Węzeł:data maksimum przepływu MSW" short_name="GmxDM" draw_name="-" unit="-"
prec="0" base_ind="auto" mbus:transform="mw" mbus:special="prev">
<raport title="Landis Gyr" order="6"/>
</param>
<param name="Landis Gyr:Węzeł:maksymalny przepływ" short_name="Gmax" draw_name="Przepływ maks."
unit="m3/h" prec="1" base_ind="auto">
<raport title="Landis Gyr" order="4"/>
</param>
</unit>
</device>
Jak widać, ciepłomierz ten większość parametrów dostarcza
jako długie (tzn. dłuższe niż 16 bitów) liczby, więc przy
przesyłaniu do SZARP-a konieczne jest ich dzielenie na mniej
i bardziej znaczące słowo. Aby następnie w wygodny sposób
prezentować na wykresach tak zebrane dane, można użyć
parametrów definiowalnych typu
DRAWDEFINABLE (dokładny opis: Sekcja 5.2.8). Na przykład dane z powyższego
ciepłomierza prezentowane są w sposób następujący sposób:
<drawdefinable>
...
<param name="Landis Gyr:Węzeł:czas pracy" short_name="OnTime" draw_name="-" unit="-" prec="0">
<define type="DRAWDEFINABLE" formula="(*:*:czas pracy MSW) (*:*:czas pracy LSW) :"/>
</param>
<param name="Landis Gyr:Węzeł:aktualny przepływ z licznika 1" short_name="Gwy1" draw_name="Przepływ"
unit="m3/h" prec="3" base_ind="auto">
<define type="DRAWDEFINABLE"
formula="(*:*:aktualny przepływ z licznika 1 MSW) (*:*:aktualny przepływ z licznika 1 LSW) :"/>
<draw title="Landis Gyr" order="9" min="0" max="100" />
</param>
<param name="Landis Gyr:Węzeł:objętość" short_name="V" draw_name="Objętość" unit="m3" prec="2"
base_ind="auto">
<define type="DRAWDEFINABLE" formula="(*:*:objętość MSW) (*:*:objętość LSW) :"/>
<draw title="Landis Gyr" order="10" min="0" max="100000" />
</param>
<param name="Landis Gyr:Węzeł:numer fabryczny" short_name="No" draw_name="-" unit="-" prec="0">
<define type="DRAWDEFINABLE" formula="(*:*:numer fabryczny MSW) (*:*:numer fabryczny LSW) :"/>
</param>
<param name="Landis Gyr:Węzeł:czas pracy błędnej" short_name="ErTime" draw_name="-" unit="h" prec="0">
<define type="DRAWDEFINABLE" formula="(*:*:czas pracy błędnej MSW) (*:*:czas pracy błędnej LSW) :"/>
</param>
<param name="Landis Gyr:Węzeł:moc wyjściowa z licznika 1" short_name="Qwy1" draw_name="Moc z licz. 1"
unit="kW" prec="2" base_ind="auto">
<define type="DRAWDEFINABLE"
formula="(*:*:moc wyjściowa z licznika 1 MSW) (*:*:moc wyjściowa z licznika 1 LSW) :"/>
<draw title="Landis Gyr" order="7" min="0" max="2000"/>
</param>
<param name="Landis Gyr:Węzeł:data maksimum mocy wyjściowej" short_name="QmaxD" draw_name="-" unit="-"
prec="0" base_ind="auto">
<define type="DRAWDEFINABLE"
formula="(*:*:data maksimum mocy wyjściowej MSW) (*:*:data maksimum mocy wyjściowej LSW) :"/>
</param>
<param name="Landis Gyr:Węzeł:energia z licznika 2" short_name="E2" draw_name="En. z licz. 2" unit="kWh"
prec="0" base_ind="auto">
<define type="DRAWDEFINABLE" formula="(*:*:energia z licznika 2 MSW) (*:*:energia z licznika 2 LSW) :"/>
<draw title="Landis Gyr" order="6" max="10000000" min="0"/>
</param>
<param name="Landis Gyr:Węzeł:energia sumaryczna z licznika 1" short_name="Ec1" draw_name="En. c. z licz. 1"
unit="kWh" prec="0" base_ind="auto">
<define type="DRAWDEFINABLE"
formula="(*:*:energia sumaryczna z licznika 1 MSW) (*:*:energia sumaryczna z licznika 1 LSW) :"/>
<draw title="Landis Gyr" order="5" min="0" max="10000000"/>
</param>
<param name="Landis Gyr:Węzeł:energia z licznika 1 w taryfie 1" short_name="E1t1" draw_name="En. z licz. 1 w t. 1"
unit="kWh" prec="0" base_ind="auto">
<define type="DRAWDEFINABLE"
formula="(*:*:energia z licznika 1 w taryfie 1 MSW) (*:*:energia z licznika 1 w taryfie 1 LSW) :"/>
<draw title="Landis Gyr" order="3" min="0" max="10000000"/>
</param>
<param name="Landis Gyr:Węzeł:energia z licznika 1 w taryfie 2" short_name="E1t2" draw_name="En z licz. 1 w t. 2"
unit="kWh" prec="0" base_ind="auto">
<define type="DRAWDEFINABLE"
formula="(*:*:energia z licznika 1 w taryfie 2 MSW) (*:*:energia z licznika 1 w taryfie 2 LSW) :"/>
<draw title="Landis Gyr" order="4" min="0" max="10000000"/>
</param>
<param name="Landis Gyr:Węzeł:data maksimum przepływu" short_name="GmaxD" draw_name="-" unit="-" prec="0"
base_ind="auto">
<define type="DRAWDEFINABLE" formula="(*:*:data maksimum przepływu MSW) (*:*:data maksimum przepływu LSW) :"/>
</param>
...
</drawdefinable>
| Poprzedni | Spis treści | Następny |
| Bezpieczne repozytorium apt | Badanie konfiguracji nowo podłączanego urządzenia |