17.2. Badanie konfiguracji nowo podłączanego urządzenia

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ę:

  1. 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.

  2. 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>
                            

Po wykonaniu powyższych kroków daemon powinien być gotowy do współpracy z nowo podłączonym urządzeniem oraz z systemem SZARP.