| System SZARP - dokumentacja techniczna: SZARP v.3.0 | ||
|---|---|---|
| Poprzedni | Rozdział 17. Uniwersalny daemon do komunikacji z urządzeniami w protokole M-Bus | Następny |
Jednym z głównych powodów stworzenia uniwersalnego demona do komunikacji w protokole M-Bus było ułatwienie konfiguracji i podłączenia do systemu SZARP nowego urządzenia wykorzystującego ten protokół. W związku z powyższym, demona można wykorzystywać jako narzędzie służące do badania konfiguracji nowo podłączonego urządzenia. W tym celu należy zastosować następującą procedurę:
Należy uruchomić demona w trybie pracy służącym do testowania komunikacji z urządzeniami M-Bus komendą:
/opt/szarp/bin/mbusdmn --test --device <adres_urządzenia> [pozostałe parametry]
Parametry linii komend, które przyjmuje
mbusdmn w trybie testowym
mają na celu odwzorowanie możliwości
konfiguracyjne, które dają atrybuty elementu
device z IPK. Dostępne są
następujące parametry:
device - parametr obowiązkowy oznaczający nazwę urządzenia, do którego podłączony jest konwerter M-Bus <-> RS232
speed - prędkość transmisji; wartość domyślna: 300 bodów
address - adres protokołu M-Bus urządzenia, które należy odpytać; wartość domyślna: 254, co oznacza odpytanie wszystkich urządzeń, które słuchają na szynie
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
data_bits - ilość bitów danych w ramce RS232; domyślna wartość to 8
stop_bits - 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"
W tym trybie pracy daemon powinien wypisać na ekran wiele informacji, które pomogą stworzyć plik konfiguracyjny dla danego urządzenia. Przykładowo fragment z danych wypisanych przez mbusdmn w trybie testowania połączenia dla ciepłomierza Pollustat E (pokazano tu jedynie fragment, który dotyczy ramki danych w formacie M-Bus przysyłanej przez ciepłomierz, pominięto fragmenty dotyczące samej komunikacji w protokole M-Bus):
Address: 0
Frame contains data with LSB first
RSP_UD frame parsed as a variable data structure frame
Serial number: 61560223
Manufacturer ID: SPX
Version number: 96
Medium: Heat (at return temperature)
Access number: 10
Decoding status bits:
Application status bits: 0
Manufacturer status bits: 0
Signature: 0
Data:
Function: instantaneous value
Data type: 8 digit BCD
Storage number: 0
Value and unit information:
Value information: Energy [J], * 1 000 000
Value: 870592
Data:
Function: instantaneous value
Data type: 8 digit BCD
Storage number: 0
Value and unit information:
Value information: Volume [m3], * 0.001
Value: 5802265
Data:
Function: instantaneous value
Data type: 8 digit BCD
Storage number: 0
Value and unit information:
Value information: Volume Flow [m3/h], * 0.001
Value: 181
Data:
Function: instantaneous value
Data type: 8 digit BCD
Storage number: 0
Value and unit information:
Value information: Power [W], * 1
Value: 1114
Data:
Function: instantaneous value
Data type: 4 digit BCD
Storage number: 0
Value and unit information:
Value information: Flow Temperature [°C], * 0.1
Value: 580
Data:
Function: instantaneous value
Data type: 4 digit BCD
Storage number: 0
Value and unit information:
Value information: Return Temperature [°C], * 0.1
Value: 526
Data:
Function: instantaneous value
Data type: 6 digit BCD
Storage number: 0
Value and unit information:
Value information: Temperature Difference [K], * 0.001
Value: 5360
Data:
Function: instantaneous value
Data type: 8 digit BCD
Storage number: 0
Value and unit information:
Value information: Fabrication Number
Value: 61560223
Data:
Function: instantaneous value
Data type: 8 digit BCD
Storage number: 0
Value and unit information:
Information from the extended VIF table:
Customer location
Value: 61560223
Data:
Function: maximum value
Data type: special: manufacturer specific data follows, more records in next telegram
Manufacturer specific data:
Jak widać na powyższym przykładzie, można w ten
sposób uzyskać wiele interesujących informacji o
danych przesyłanych przez urządzenie. Pierwszą
ważną informacją jest adres urządzenia - należy
go wykorzystać jako wartość atrybutu
address w elemencie
unit konfiguracji.
Następnie dowiadujemy się różnych informacji
ogólnych o danym urządzeniu - kod producenta,
numer seryjny, numer wersji, medium mierzone
przez dane urządzenie itp. Następnie podane są
informacje o każdej z przesyłanych wartości: typ
wartości (chwilowa, maksymalna, minimalna,
błędna), sposób jej zakodowania w danych
przesyłanych w protokole M-Bus (z tej informacji
można prosto wywnioskować zakres wartości, a
także transformacje, które należy na niej
zastosować, aby była ona jak najbardziej
użyteczna w systemie SZARP), kolejny numer
wartości danego parametru w pamięci urządzenia
(im mniejszy numer, tym nowsza wartość),
znaczenie danej wartości (tj. nazwa wielkości,
którą ona wyraża) jednostka, w jakiej jest
ona wyrażona itp. Czasem mogą również występować
informacje dodatkowe, np. o taryfie, w której
dana wielkość była mierzona. Na końcu widać, że
dane specyficzne dla producenta danego
urządzenia nie są przetwarzane (mogą jedynie
zostać wypisane w postaci ciągu liczb
szesnastkowych odpowiadających wartościom
kolejnych bajtów odebranych od urządzenia).
Jeśli jednak po uruchomieniu demona w trybie testowym nie uzyskamy informacji na temat wartości przesyłanych przez urządzenie (pojawią się informacje o błędach transmisji lub innego rodzaju komunikaty o błędzie), należy próbować eksperymentalnie dobrać wartości jego parametrów tak, aby udało się nawiązać połączenie z urządzeniem. Poleca się w pierwszej kolejności modyfikować prędkość transmisji oraz odstęp między kolejnymi bajtami, następnie ilość bitów danych, ilość bitów stopu, typ parzystości itp.
Na podstawie tak uzyskanych informacji należy stworzyć w pliku params.xml odpowiedni element device, przypisać dobrane podczas testowania wartości jego atrybutom, stworzyć element unit z żądanymi atrybutami oraz utworzyć odpowiednie elementy param dla każdej z wartości przesyłanych przez urządzenie. Przykładowy plik konfiguracyjny dla ciepłomierza Pollustat E obsługujący wartości podane powyżej wygląda następująco:
<device daemon="/opt/szarp/bin/mbusdmn" speed="2400" path="/dev/ttyA22"
xmlns:mbus="http://www.praterm.com.pl/SZARP/ipk-extra" mbus:bittime="5000" mbus:databist="8"
mbus:stopbits="2" mbus:parity="even">
<unit id="1" type="1" subtype="1" bufsize="1" mbus:address="0">
<param name="Pollustat M-Bus:Obiegi wewnętrzne:Energia LSW" short_name="Elsw" draw_name="Energia lsw"
unit="-" prec="3" mbus:transform="lsw" base_ind="auto">
<raport title="Pollustat Obiegi wewnętrzne M-Bus" filename="pollustat-mbus.rap" order="1"/>
</param>
<param name="Pollustat M-Bus:Obiegi wewnętrzne:Energia MSW" short_name="Emsw" draw_name="Energia msw"
unit="-" prec="3" mbus:transform="msw" base_ind="auto" mbus:special="prev">
<raport title="Pollustat Obiegi wewnętrzne M-Bus" filename="pollustat-mbus.rap" order="2"/>
</param>
<param name="Pollustat M-Bus:Obiegi wewnętrzne:Objętość LSW" short_name="Vlsw" draw_name="-" unit="-"
prec="3" mbus:transform="lsw">
<raport title="Pollustat Obiegi wewnętrzne M-Bus" filename="pollustat-mbus.rap" order="3"/>
</param>
<param name="Pollustat M-Bus:Obiegi wewnętrzne:Objętość MSW" short_name="Vmsw" draw_name="-" unit="-"
prec="3" mbus:transform="msw" mbus:special="prev">
<raport title="Pollustat Obiegi wewnętrzne M-Bus" filename="pollustat-mbus.rap" order="4"/>
</param>
<param name="Pollustat M-Bus:Obiegi wewnętrzne:Przepływ" short_name="Pp" draw_name="Przepływ" unit="m3/h"
prec="3" base_ind="auto">
<raport title="Pollustat Obiegi wewnętrzne M-Bus" filename="pollustat-mbus.rap" order="5"/>
</param>
<param name="Pollustat M-Bus:Obiegi wewnętrzne:Moc" short_name="PQ" draw_name="Moc" unit="kW" prec="2"
base_ind="auto" mbus:divisor="10">
<raport title="Pollustat Obiegi wewnętrzne M-Bus" filename="pollustat-mbus.rap" order="9"/>
</param>
<param name="Pollustat M-Bus:Obiegi wewnętrzne:Temperatura wejściowa" short_name="Ptz"
draw_name="Temp. zasilania" unit="°C" prec="1" base_ind="auto">
<raport title="Pollustat Obiegi wewnętrzne M-Bus" filename="pollustat-mbus.rap" order="6"/>
</param>
<param name="Pollustat M-Bus:Obiegi wewnętrzne:Temperatura wyjściowa" short_name="Ptp"
draw_name="Temp. powrotu" unit="°C" prec="1" base_ind="auto">
<raport title="Pollustat Obiegi wewnętrzne M-Bus" filename="pollustat-mbus.rap" order="7"/>
</param>
<param name="Pollustat M-Bus:Obiegi wewnętrzne:Różnica temperatur" short_name="PdT"
draw_name="Różn. temperatur" unit="°C" prec="2" base_ind="auto" mbus:divisor="10">
<raport title="Pollustat Obiegi wewnętrzne M-Bus" filename="pollustat-mbus.rap" order="8"/>
</param>
<param name="Pollustat M-Bus:Obiegi wewnętrzne:Numer fabryczny LSW" short_name="Nlsw" draw_name="-" unit="-"
prec="3" mbus:transform="lsw">
<raport title="Pollustat Obiegi wewnętrzne M-Bus" filename="pollustat-mbus.rap" order="10"/>
</param>
<param name="Pollustat M-Bus:Obiegi wewnętrzne:Numer fabryczny MSW" short_name="Nmsw" draw_name="-" unit="-"
prec="3" mbus:transform="msw" mbus:special="prev">
<raport title="Pollustat Obiegi wewnętrzne M-Bus" filename="pollustat-mbus.rap" order="11"/>
</param>
<param name="Pollustat M-Bus:Obiegi wewnętrzne:dummy" short_name="-" draw_name="-" unit="-" prec="0" />
</unit>
</device>
| Poprzedni | Spis treści | Następny |
| Uniwersalny daemon do komunikacji z urządzeniami w protokole M-Bus | Początek rozdziału | Daemon do odczytu danych ze stacji meteorologicznej Davis Vantage Pro |