M-BUS
Telegramy
Podczas ręcznej diagnostyki najpierw trzeba rozpoznać typ wiadomości. Pierwszy bajt zwykle odróżnia krótką ramkę, długą ramkę oraz jednobajtowe potwierdzenie E5.
| Pojedynczy znak |
Krótka ramka |
Ramka sterująca |
Długa ramka |
| E5h |
Start 10h |
Start 68h |
Start 68h |
|
Pole C |
Pole L = 3 |
Pole L |
|
Pole A |
Pole L = 3 |
Pole L |
|
suma kontrolna |
Start 68h |
Start 68h |
|
Stop 16h |
Pole C |
Pole C |
|
|
Pole A |
Pole A |
|
|
Pole CI |
Pole CI |
|
|
suma kontrolna |
Dane użytkownika |
|
|
Stop 16h |
(0-252 bajty) |
|
|
|
suma kontrolna |
|
|
|
Stop 16h |
Pojedynczy znak
Pojedynczy bajt E5 oznacza potwierdzenie bez dodatkowych danych. W diagnostyce trzeba odróżnić go od odpowiedzi zawierającej rzeczywiste wartości pomiarowe.
| Właściwość |
Wartość i znaczenie |
| Wartość |
E5h |
| Długość |
1 Byte |
| Typowy kierunek |
Slave → Master jako potwierdzenie odebranego polecenia. |
RX
E5
Jednobajtowe potwierdzenie odbioru bez części danych.
Krótka ramka
Krótka ramka ma stałą długość i służy do prostych wiadomości sterujących. Typowa postać to 10 C A CS 16, gdzie C to pole sterujące, A adres, CS suma kontrolna, a 16 kończy ramkę.
| Start |
C |
A |
CS |
Stop |
10h |
kod sterujący |
adres |
(C+A)mod 256 |
16h |
| Element |
Kontrola przy dekodowaniu |
10h |
Pierwszy bajt musi być bajtem startu krótkiej ramki. Inna wartość oznacza inny typ wiadomości albo błąd odbioru. |
C |
Określa procedurę, na przykład SND_NKE, REQ_UD1 albo REQ_UD2. Znaczenie bitów ocenia się według kierunku master/slave. |
A |
Musi odpowiadać docelowemu adresowi podstawowemu albo adresowi broadcast zgodnie z celem zapytania. |
CS |
Najpierw sumuje się tylko bajty C i A, a następnie bierze dolne 8 bitów wyniku, czyli modulo 256. Bajty start i stop nie są wliczane. |
TX
10 5B 01 5C 16
Zapytanie o dane z urządzenia o adresie podstawowym 01.
Ramka sterująca
Ramka sterująca używa bajtu startu 68h, ale ma stałą długość L = 3. Przenosi tylko pola C, A i CI, czyli informację sterującą bez danych użytkownika.
W diagnostyce pojawia się na przykład przy poleceniach ustawiających albo wybierających urządzenie, które nie przenoszą wartości pomiarowych.
| Start |
L |
L |
Start |
C |
A |
CI |
CS |
Stop |
68h |
03h |
03h |
68h |
kod sterujący |
adres |
kod aplikacyjny |
(C+A+CI)mod 256 |
16h |
| Zastosowanie |
Znaczenie techniczne |
| Wybór urządzenia |
Master może użyć CI i powiązanych reguł do przygotowania slave do dalszej komunikacji bez wysyłania danych pomiarowych w tej ramce. |
| Polecenie aplikacyjne bez DATA |
Ramka niesie informację w polu CI. Gdy polecenie wymaga parametrów albo danych aplikacyjnych, używa się ramki długiej. |
| Walidacja |
Oba bajty L muszą mieć wartość 03h, drugi start musi być 68h, a suma kontrolna jest liczona tylko z C, A i CI jako modulo 256. |
TX
68 03 03 68 53 01 51 A5 16
Ramka sterująca ze stałą długością L = 3.
Długa ramka
Długa ramka przenosi część danych. Typowa postać to 68 L L 68 C A CI DATA CS 16. Para L określa długość od C do końca danych, a CI identyfikuje typ danych aplikacyjnych.
| Start |
L |
L |
Start |
C |
A |
CI |
DATA |
CS |
Stop |
68h |
L |
L |
68h |
sterowanie |
adres |
typ danych |
0-252 Byte |
(C+A+CI+ΣDATA)mod 256 |
16h |
| Krok walidacji |
Reguła |
| Start i długość |
Pierwszy i czwarty bajt muszą mieć wartość 68h, a oba bajty L muszą być identyczne. |
| Zakres L |
L obejmuje C, A, CI i DATA. Dlatego minimalna długa ramka bez DATA ma L = 3, a każdy bajt DATA zwiększa L o 1. |
| Suma kontrolna |
CS liczy się jako modulo 256 z sumy bajtów C, A, CI oraz wszystkich bajtów DATA. Start, L, samo CS i stop nie są wliczane. |
| Interpretacja DATA |
DATA nie wolno czytać bez CI. Dopiero CI określa, czy ładunek jest strukturą zmienną, stałą, raportem błędu, alarmem albo innym znaczeniem aplikacyjnym. |
RX
68 15 15 68 08 01 72 78 56 34 12 24 40 01 07 02 00 00 00 04 00 10 27 00 00 38 16
Odpowiedź urządzenia z nagłówkiem danych zmiennych i jednym rekordem danych.
Dekodowanie danych
Dekodowanie przebiega od ramki do danych: najpierw sprawdza się start, długość i sumę kontrolną, potem pole sterujące C, adres A, pole CI, a na końcu rekordy danych DIF/VIF.
| Część |
Znaczenie |
C |
Kierunek i typ zapytania albo odpowiedzi. |
A |
Adres podstawowy urządzenia na magistrali. |
CI |
Typ danych aplikacyjnych, na przykład odpowiedź zmienna z rekordami danych. |
DIF/VIF |
Kodowanie wartości, funkcji, znaczenia i jednostki rekordu danych. |
Pole L
Pole L określa długość zmiennej części ramki długiej albo sterującej. W długiej ramce po pierwszym bajcie startu 68h występują dwa identyczne bajty L, a po nich drugi bajt startu 68h.
Wartość L liczy się od pola C do ostatniego bajtu DATA włącznie. Nie obejmuje bajtów startu 68h, samych pól L, sumy kontrolnej CS ani bajtu stop 16h. Jeśli obie wartości L różnią się, ramka jest błędna.
| Ramka |
Postać |
Znaczenie L |
| Ramka sterująca |
68 03 03 68 C A CI CS 16 |
Stała długość 3, ponieważ ramka zawiera tylko C, A i CI. |
| Długa ramka |
68 L L 68 C A CI DATA CS 16 |
Zmienna długość obszaru C, A, CI i DATA. |
| Przykład |
Obliczenie L |
68 03 03 68 53 01 51 A5 16 |
L = 3, ponieważ liczą się tylko bajty 53h, 01h i 51h. |
68 13 13 68 08 05 73 ... CS 16 |
L = 13h, czyli 19 bajtów od pola C 08h do ostatniego bajtu części danych. |
Podczas ręcznego dekodowania pole L jest dobrym pierwszym filtrem błędów. Jeśli długość się nie zgadza, interpretowanie DIF/VIF nie ma sensu, ponieważ przesunięcie danych zwykle psuje resztę telegramu.
Pole C
Pole C, nazywane także Control Field albo Function Field, zawiera parametry sterujące ramki. Określa kierunek przepływu danych, a przez dolne bity funkcyjne także właściwy cel wiadomości.
W diagnostyce pole C szybko pokazuje, czy ramka jest inicjalizacją, zapisem do urządzenia, żądaniem danych albo odpowiedzią urządzenia slave. W krótkiej ramce znajduje się za bajtem startu 10h, a w ramce sterującej i długiej za drugim bajtem startu 68h. Wartość pola C wchodzi do sumy kontrolnej.
| Kierunek |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
| Master → Slave |
0 |
1 |
FCB |
FCV |
F3 |
F2 |
F1 |
F0 |
| Slave → Master |
0 |
0 |
ACD |
DFC |
F3 |
F2 |
F1 |
F0 |
| Bity |
Nazwa |
Dotyczy kierunku |
Znaczenie w komunikacji |
7-6 |
wzorzec kierunku |
oba kierunki |
Wartość 01b oznacza master → slave, wartość 00b oznacza slave → master. |
5 |
FCB / ACD |
według kierunku |
U mastera jest to bit zliczania ramki; u slave żądanie przekazania danych priorytetowych Class 1. |
4 |
FCV / DFC |
według kierunku |
U mastera potwierdza ważność FCB; u slave steruje przepływem danych i informuje, że urządzenie nie jest gotowe przyjąć kolejnych danych. |
3-0 |
F3-F0 |
oba kierunki |
Kod funkcji procedury, na przykład inicjalizacja, żądanie danych albo odpowiedź z danymi. |
W kierunku master → slave bit FCB przy poprawnej komunikacji przełącza się między 0 i 1. Jeśli master nie otrzyma odpowiedzi na poprzednią ramkę, powtarza tę samą ramkę z tym samym FCB, a slave powinien ponownie zwrócić tę samą odpowiedź. Bit FCV wskazuje, czy FCB jest ważny; przy FCV = 0 bit FCB jest ignorowany.
W kierunku slave → master bity 5 i 4 mają inne znaczenie. ACD = 1 sygnalizuje, że slave chce przekazać dane priorytetowe klasy Class 1. DFC = 1 oznacza sterowanie przepływem danych: slave nie jest gotowy przyjąć kolejnych danych.
Bity F0 do F3 kodują właściwą funkcję wiadomości. Warstwa łącza M-BUS używa dwóch podstawowych procedur: wysłanie z potwierdzeniem SND/CON oraz żądanie z odpowiedzią REQ/RSP.
| Nazwa |
Pole C bin. |
Pole C hex. |
Ramka |
Opis |
SND_NKE |
0100 0000 |
40 |
krótka |
Inicjalizacja stacji uczestniczącej. |
SND_UD |
01F1 0011 |
53/73 |
długa/sterująca |
Wysłanie danych ze stacji sterującej do stacji uczestniczącej. |
REQ_UD2 |
01F1 1011 |
5B/7B |
krótka |
Żądanie zwykłych danych Class 2 od stacji uczestniczącej. |
REQ_UD1 |
01F1 1010 |
5A/7A |
krótka |
Żądanie priorytetowych danych Class 1 od stacji uczestniczącej. |
RSP_UD |
00AD 1000 |
08/18/28/38 |
długa/sterująca |
Wysłanie danych ze stacji uczestniczącej do stacji sterującej po żądaniu. |
Pole A
Pole A jest adresem urządzenia na magistrali M-BUS. Master używa go do określenia, do którego licznika albo konwertera jest skierowany telegram, a slave zwraca ten sam adres w odpowiedzi.
W diagnostyce serwisowej pole A jest pierwszym miejscem kontroli, czy ustawiony adres podstawowy zgadza się z odpowiedzią urządzenia. Jeśli adres się różni, może odpowiadać inne urządzenie albo w programie ustawiono zły adres.
| HEX |
DEC |
Znaczenie |
Odpowiedź |
00h |
0 |
Domyślny albo nieprzypisany adres podstawowy urządzenia. |
Odpowiedź przyjdzie, jeśli urządzenie używa adresu 0. |
01h-FAh |
1-250 |
Typowe adresy podstawowe urządzeń w zakresie od 1 do 250. |
Odpowiada urządzenie ze zgodnym adresem podstawowym. |
FDh |
253 |
Broadcast dla adresowania wtórnego. Konkretne urządzenie wybiera się danymi aplikacyjnymi, a nie bezpośrednio polem A. |
Odpowiedź przyjdzie od urządzenia wybranego adresem wtórnym. |
FEh |
254 |
Broadcast testowy. Odpowiedzieć mogą wszystkie urządzenia, dlatego używa się go głównie przy jednym urządzeniu na magistrali. |
Odpowiedź może przyjść od wszystkich urządzeń; przy wielu urządzeniach grozi kolizja. |
FFh |
255 |
Adres rozgłoszeniowy dla wiadomości do wszystkich urządzeń bez zwykłej indywidualnej odpowiedzi. |
Odpowiedź nie przyjdzie. |
| Tryb adresowania |
Co sprawdzić |
Ryzyko serwisowe |
| Adres podstawowy 0-250 |
Zgodność pola A w zapytaniu i odpowiedzi, ustawienie adresu w urządzeniu oraz kolizję zduplikowanych adresów. |
Dwa urządzenia z tym samym adresem podstawowym mogą odpowiedzieć jednocześnie i uszkodzić odpowiedź. |
| Adresowanie wtórne przez FDh |
Wybór urządzenia nie znajduje się w samym polu A, lecz w danych aplikacyjnych telegramu wyboru. |
Bez poprawnego wyboru adresu wtórnego żadne urządzenie może nie odpowiedzieć, mimo że jest fizycznie podłączone. |
| Broadcast FEh i FFh |
FEh stosuj głównie do testu pojedynczego urządzenia; FFh jest wiadomością do wszystkich bez zwykłej indywidualnej odpowiedzi. |
Na magistrali z wieloma urządzeniami FEh może spowodować kolizję odpowiedzi. |
TX
10 5B 01 5C 16
Pole A ma wartość 01h, więc telegram jest skierowany do urządzenia o adresie podstawowym 1.
Pole CI
Pole CI, czyli Control Information, określa typ danych aplikacyjnych w telegramie oraz kolejność danych w części aplikacyjnej.
Dla rekordów wielobajtowych EN1434-3 definiuje dwa możliwe porządki bajtów. Decyduje bit 2 pola CI, liczony od bitu 0, czyli wartość 4. Ten bit jest nazywany bitem M albo bitem trybu.
| Tryb |
Bit M |
Kolejność bajtów |
Uwaga |
| Tryb 1 |
0 |
Najmniej znaczący bajt jest przesyłany jako pierwszy. |
Zalecany tryb dla nowych aplikacji. |
| Tryb 2 |
1 |
Najbardziej znaczący bajt jest przesyłany jako pierwszy. |
Zachowany ze względu na kompatybilność. |
| Co określa CI |
Skutek dla dekodera |
| Typ części aplikacyjnej |
Te same bajty DATA mogą znaczyć coś innego zależnie od CI. Dekoder po C i A musi najpierw ocenić CI, a dopiero potem wybrać następny parser. |
| Kolejność wartości wielobajtowych |
Bit trybu wybiera porządek little-endian albo big-endian w rekordach aplikacyjnych. W zwykłych nowych implementacjach oczekuje się Mode 1. |
| Kierunek użycia kodów |
Niektóre kody CI używa master przy zapisie albo wyborze urządzeń, inne używa slave w odpowiedziach RSP_UD. Dlatego CI zawsze czyta się razem z polem C. |
Kody używane przez master
| Mode 1 |
Mode 2 |
Zastosowanie |
Zdefiniowano w |
51h | 55h | Wysłanie danych. | EN1434-3 |
52h | 56h | Wybór urządzeń slave. | Usergroup 07/1993 |
50h | | Reset aplikacji. | Usergroup 03/1994 |
54h | | Akcja synchronizacji. | propozycja |
B8h | | Ustawienie prędkości 300 baud. | Usergroup 07/1993 |
B9h | | Ustawienie prędkości 600 baud. | Usergroup 07/1993 |
BAh | | Ustawienie prędkości 1200 baud. | Usergroup 07/1993 |
BBh | | Ustawienie prędkości 2400 baud. | Usergroup 07/1993 |
BCh | | Ustawienie prędkości 4800 baud. | Usergroup 07/1993 |
BDh | | Ustawienie prędkości 9600 baud. | Usergroup 07/1993 |
BEh | | Ustawienie prędkości 19200 baud. | propozycja |
BFh | | Ustawienie prędkości 38400 baud. | propozycja |
B1h | | Żądanie odczytu pełnej zawartości RAM. | propozycja Techem |
B2h | | Wysłanie danych użytkownika, niestandardowy zapis do RAM. | propozycja Techem |
B3h | | Uruchomienie testowego trybu kalibracji. | Usergroup 07/1993 |
B4h | | Odczyt EEPROM. | propozycja Techem |
B6h | | Uruchomienie testu oprogramowania. | propozycja Techem |
90h-97h | | Kody używane do haszowania. | przestarzałe, niezalecane |
Reset aplikacji CI = 50h
Kod CI 50h pozwala masterowi zresetować warstwę aplikacyjną w urządzeniu slave. Po odebraniu slave sam decyduje, które parametry zmienić, na przykład domyślne dane wyjściowe. Reset wysłany jako SND_UD z CI = 50h jest odpowiednikiem resetu warstwy łącza SND_NKE.
Po CI = 50h mogą występować parametry opcjonalne. Pierwszy parametr to 8-bitowy subkod resetu aplikacji: górne cztery bity wybierają typ telegramu albo aplikację, a dolne cztery bity numer subtelegramu. Zero w dolnych czterech bitach oznacza żądanie wszystkich subtelegramów.
Slave obsługujący tylko jeden typ telegramu może zignorować reset aplikacji i dodane parametry, ale musi potwierdzić polecenie bajtem E5.
| Górne 4 bity |
Opis |
Przykład |
0000b | Wszystko | |
0001b | Dane użytkownika | zużycie |
0010b | Proste rozliczanie | wartości bieżące i z ustaloną datą wraz z datami |
0011b | Rozszerzone rozliczanie | wartości historyczne |
0100b | Rozliczanie wielotaryfowe | |
0101b | Wartości chwilowe | regulacja |
0110b | Wartości zarządzania obciążeniem | zarządzanie |
0111b | Zarezerwowane | |
1000b | Instalacja i uruchomienie | adres magistrali, stałe daty |
1001b | Testowanie | wartości wysokiej rozdzielczości |
1010b | Kalibracja | |
1011b | Produkcja | |
1100b | Rozwój | |
1101b | Autotest | |
1110b | Zarezerwowane | |
1111b | Zarezerwowane | |
TX
68 04 04 68 53 FE 50 10 B1 16
Master wysyła rozszerzony reset aplikacji do wszystkich urządzeń slave i żąda wszystkich telegramów typu dane użytkownika.
RX
E5
Slave potwierdza reset pojedynczym bajtem E5.
Akcja synchronizacji CI = 54h
CI 54h służy do funkcji synchronizacji po stronie slave i mastera, na przykład do synchronizacji zegara. Pozostałe wymienione kody służą do zmiany prędkości, wysyłania danych i wyboru urządzeń slave.
Kody używane przez slave
| CI M=0 |
CI M=1 |
Zastosowanie |
Zdefiniowano w |
70h | | Zgłoszenie ogólnych błędów aplikacyjnych. | Usergroup 03/1994 |
71h | | Zgłoszenie stanu alarmowego. | Usergroup 03/1994 |
72h | 76h | Odpowiedź z danymi zmiennymi. | EN1434-3 |
73h | 77h | Odpowiedź z danymi stałymi. | EN1434-3 |
W praktyce kody te interpretuje się według kategorii odpowiedzi: dane stałe, dane zmienne, ogólny błąd aplikacji albo stan alarmowy.
Stała struktura danych CI = 73h/77h
Stała struktura danych jest używana w kierunku slave → master w długiej ramce RSP_UD. Wartości CI 73h i 77h informują dekoder, że za polem CI nie występują zmienne rekordy DIF/VIF, lecz stały blok z identyfikacją, statusem i dwoma licznikami.
Ponieważ stała struktura może przenosić tylko dwa liczniki o z góry określonej długości i jest mniej opisowa niż struktura zmienna, nie jest odpowiednia dla nowych rozszerzalnych aplikacji. W istniejących licznikach trzeba ją jednak poprawnie rozpoznawać i dekodować.
| Nr ident. |
Access No. |
Status |
Medium/Jednostki |
Licznik 1 |
Licznik 2 |
4 Byte |
1 Byte |
1 Byte |
2 Byte |
4 Byte |
4 Byte |
| Pole |
Kodowanie |
Znaczenie |
| Numer identyfikacyjny |
8 cyfr packed BCD w 4 bajtach |
Numer fabryczny albo seryjny w zakresie od 00000000 do 99999999. |
Access No. |
unsigned binary |
Licznik dostępu zwiększany po każdej odpowiedzi RSP_UD, pomagający odróżnić nowe dane od powtórzenia. |
| Status |
flagi bitowe |
Określa kodowanie liczników, wartości z ustaloną datą i błędy urządzenia. |
| Medium/Jednostki |
LSByte first |
Przenosi wspólne mierzone medium i jednostki obu liczników. Sześć dolnych bitów każdego bajtu określa jednostkę odpowiedniego licznika, a górne bity obu bajtów razem kodują medium. |
| Liczniki 1 i 2 |
4 Byte |
Wartości są kodowane jako BCD albo signed binary zgodnie z bitem 0 pola Status. |
| Bit Status |
Znaczenie przy 1 |
Znaczenie przy 0 |
0 | Liczniki są kodowane jako signed binary. | Liczniki są kodowane jako BCD. |
1 | Liczniki są zapisane na ustaloną datę. | Liczniki są wartościami aktualnymi. |
2 | Niskie zasilanie. | Zasilanie nie jest zgłaszane jako niskie. |
3 | Błąd trwały. | Brak błędu trwałego. |
4 | Błąd tymczasowy. | Brak błędu tymczasowego. |
5-7 | Znaczenie zależne od producenta. | Znaczenie zależne od producenta. |
RX
68 13 13 68 08 05 73 78 56 34 12 0A 00 E9 7E 01 00 00 00 35 01 00 00 3C 16
RSP_UD ze stałą strukturą danych: adres 5, CI 73h, numer identyfikacyjny 12345678, dwa liczniki.
Zmienna struktura danych
Kody CI 72h i 76h oznaczają w długiej ramce RSP_UD odpowiedź ze zmienną strukturą danych. Po polach C, A i CI część aplikacyjna zaczyna się stałym nagłówkiem danych, a dalej zawiera zmienną liczbę rekordów danych.
Stały nagłówek
12 Byte
Identyfikacja urządzenia, producent, wersja, medium, numer dostępu, status i sygnatura.
Rekordy danych
DIB + VIB + DATA
Powtarzane standardowe rekordy z własną długością, funkcją, jednostką i wartością.
MDH
1 Byte
Oznacza przejście do części specyficznej dla producenta, jeśli występuje.
Dane producenta
zmienna długość
Obszar, którego nie da się wiarygodnie interpretować bez dokumentacji konkretnego producenta.
| Część |
Długość |
Znaczenie |
| Stały nagłówek danych |
12 Byte |
Identyfikacja urządzenia i informacje statusowe obowiązujące dla całej odpowiedzi. |
| Zmienne bloki danych |
zmienna liczba |
Pojedyncze rekordy danych w postaci DIB, VIB i danych. Każdy rekord niesie własną długość, funkcję, jednostkę i znaczenie. |
MDH |
1 Byte |
Manufacturer Data Header oddziela standardowo opisane rekordy od części specyficznej dla producenta. |
| Dane producenta |
zmienna liczba |
Wolny obszar zdefiniowany przez producenta urządzenia. Bez dokumentacji producenta nie da się go ogólnie dekodować tak jak standardowych rekordów danych. |
Stały nagłówek danych odpowiedzi zmiennej
Pierwsze dwanaście bajtów danych użytkownika tworzy blok o stałej długości i stałej kolejności pól. Dopiero za tym nagłówkiem następują zmienne rekordy danych.
| Nr ident. |
Producent |
Wersja |
Medium |
Access No. |
Status |
Sygnatura |
4 Byte |
2 Byte |
1 Byte |
1 Byte |
1 Byte |
1 Byte |
2 Byte |
| Pole |
Długość |
Znaczenie |
| Numer identyfikacyjny |
4 Byte |
W zmiennej strukturze danych jest to numer klienta zakodowany jako osiem cyfr packed BCD, czyli w zakresie od 00000000 do 99999999. Może być ustawiony podczas produkcji, ale może też być później zmienny; jeśli potrzebny jest niezmienny numer fabryczny, przesyła się go jako oddzielny rekord, na przykład DIF = 0Ch i VIF = 78h. |
| Producent |
2 Byte |
Dwubajtowa wartość unsigned binary wyliczona z trzyliterowego ID producenta według EN 61107. Używa się wielkich liter, a wartość składa się z pozycji liter w alfabecie.
ID = ([ASCII(1) - 64] * 32 * 32)
+ ([ASCII(2) - 64] * 32)
+ [ASCII(3) - 64]
|
| Wersja |
1 Byte |
Określa generację albo wersję licznika. Dokładne znaczenie zależy od producenta urządzenia. |
| Medium |
1 Byte |
Typ mierzonego medium. W przeciwieństwie do stałej struktury danych medium w odpowiedzi zmiennej jest kodowane całym bajtem. |
Access No. |
1 Byte |
Numer dostępu jest beznakowym binarnym licznikiem odpowiedzi. Zwykle zwiększa się po każdej odpowiedzi RSP_UD i pomaga odróżnić nową odpowiedź od powtórzonej. |
| Status |
1 Byte |
Status zawiera bity stanu urządzenia. W odpowiedzi zmiennej dwa najniższe bity służą do sygnalizacji błędów aplikacyjnych; pozostałe bity mają takie samo znaczenie jak flagi statusu znane ze stałej struktury danych. |
| Sygnatura |
2 Byte |
Pole jest zarezerwowane dla przyszłych zastosowań szyfrowania. Gdy nie jest używane, zwykle ma wartość 00 00h. |
| Bit statusu |
Znaczenie w odpowiedzi zmiennej |
0-1 | Błąd aplikacji albo stan według specyfikacji urządzenia i powiązanych reguł M-BUS. |
2 | Niskie zasilanie urządzenia. |
3 | Trwały błąd urządzenia. |
4 | Tymczasowy błąd urządzenia. |
5-7 | Flagi specyficzne dla producenta. Bez dokumentacji urządzenia nie należy ich interpretować jako standardowych błędów. |
| Bajty nagłówka |
Pole |
Znaczenie po dekodowaniu |
78 56 34 12 | Numer identyfikacyjny | Numer packed BCD 12345678. |
24 40 | Producent | Dwubajtowy kod producenta EN 61107 przesyłany w nagłówku. |
01 | Wersja | Wersja albo generacja licznika według producenta. |
07 | Medium | Kod mierzonego medium. |
02 | Access No. | Drugi numer sekwencyjny odpowiedzi w cyklu urządzenia. |
00 | Status | Brak standardowo sygnalizowanego błędu we flagach statusu. |
00 00 | Sygnatura | Sygnatura nie jest użyta. |
Rekordy DATA
Za stałym 12-bajtowym nagłówkiem następuje jeden albo więcej rekordów danych. Każdy rekord jest opisany własnym blokiem DIB i VIB; dopiero za nimi znajdują się właściwe bajty wartości.
DIB
DIF + DIFE...
Opisuje format wartości, funkcję wartości, numer pamięci, taryfę i opcjonalne dalsze rozszerzenie.
VIB
VIF + VIFE...
Opisuje wielkość, jednostkę, skalę i dodatkowe znaczenie wartości.
DATA
0 do n bajtów
Zawiera właściwą wartość. Liczba bajtów i kodowanie wynikają z dolnego półbajtu DIF.
| DIB |
VIB |
DATA |
DIF + DIFE... |
VIF + VIFE... |
wartość według DIF |
| Część rekordu |
Długość |
Znaczenie |
DIF |
1 Byte |
Data Information Field określa długość i kodowanie wartości, funkcję wartości oraz kontynuację do DIFE. |
DIFE |
0 albo więcej bajtów |
Rozszerza DIB głównie o kolejne bity numeru pamięci i taryfy. Jeśli w poprzednim DIF albo DIFE ustawiony jest bit rozszerzenia, następuje kolejny DIFE. |
VIF |
1 Byte |
Value Information Field określa wielkość fizyczną, jednostkę i mnożnik wartości. Bit rozszerzenia wskazuje, czy następuje VIFE. |
VIFE |
0 albo więcej bajtów |
Rozszerza VIB o dodatkowe informacje o jednostce albo znaczeniu wartości. Kolejne bajty VIFE mogą występować zgodnie z bitami rozszerzenia. |
DATA |
według DIF |
Właściwe bajty wartości. Liczbę bajtów i kodowanie określa dolny półbajt DIF. Kolejność bajtów wartości wielobajtowej zależy od trybu w polu CI; w nowych aplikacjach używa się Mode 1, czyli najmniej znaczący bajt jako pierwszy. |
DIB i VIB szczegółowo
Rekordu danych nie odczytuje się według stałej długości całego rekordu, lecz krok po kroku. Najpierw składa się DIB, potem VIB, a dopiero potem właściwą wartość DATA zgodnie z dolnymi bitami DIF.
| Skrót |
Pełna nazwa |
Zawartość |
DIB |
Data Information Block |
Blok informacji o danych. Składa się z jednego DIF i opcjonalnych bajtów DIFE. |
DIF |
Data Information Field |
Pierwszy bajt DIB. Określa kodowanie i długość DATA, funkcję wartości, najniższy bit numeru pamięci oraz czy następuje DIFE. |
DIFE |
Data Information Field Extension |
Rozszerzenie DIF. Dodaje kolejne bity numeru pamięci, taryfę, podjednostkę i ewentualnie wskazuje następny DIFE. |
VIB |
Value Information Block |
Blok informacji o znaczeniu wartości. Składa się z jednego VIF i opcjonalnych bajtów VIFE. |
VIF |
Value Information Field |
Pierwszy bajt VIB. Określa wielkość, jednostkę, skalę wartości oraz czy następuje VIFE. |
VIFE |
Value Information Field Extension |
Rozszerzenie VIF. Doprecyzowuje jednostkę albo znaczenie wartości i może być kontynuowane kolejnym VIFE. |
Kolejność odczytu rekordu danych
| Krok |
Czytana część |
Reguła |
1 | DIF | Odczytuje się pierwszy bajt rekordu. Wartości specjalne 0Fh, 1Fh i 2Fh obsługuje się przed zwykłym dekodowaniem. |
2 | DIFE... | Jeśli w DIF ustawiony jest bit 7, następuje DIFE. Jeśli ten DIFE także ma ustawiony bit 7, odczytuje się kolejny DIFE. |
3 | VIF | Po zakończeniu DIB odczytuje się VIF, który określa jednostkę i skalę wartości. |
4 | VIFE... | Jeśli w VIF ustawiony jest bit 7, następuje VIFE. Łańcuch trwa, aż ostatni VIFE ma bit 7 wyzerowany. |
5 | DATA | Na końcu odczytuje się liczbę bajtów DATA zgodnie z dolnymi czterema bitami DIF. |
Układ bitów DIF
| 7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
| DIFE |
Storage 0 |
Funkcja |
Pole danych |
| Bity |
Nazwa |
Znaczenie |
7 | bit rozszerzenia | Wartość 1 oznacza, że za DIF następuje co najmniej jeden DIFE. |
6 | numer pamięci bit 0 | Najniższy bit numeru pamięci, czyli pierwsze rozróżnienie wartości aktualnej albo historycznej. |
5-4 | funkcja wartości | Określa, czy jest to wartość chwilowa, maksymalna, minimalna albo wartość w stanie błędu. |
3-0 | pole danych | Określa liczbę bajtów DATA i ich kodowanie. |
Układ bitów DIFE
| 7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
| DIFE |
Podjednostka |
Taryfa |
Storage |
| Bity |
Nazwa |
Znaczenie |
7 | bit rozszerzenia | Wartość 1 oznacza, że następuje kolejny DIFE. |
6 | podjednostka | Rozróżnia podjednostkę albo kanał licznika, jeśli urządzenie z tego korzysta. |
5-4 | taryfa | Bity taryfy dla wartości wielotaryfowych. |
3-0 | numer pamięci | Kolejne bity numeru pamięci. Każdy następny DIFE dodaje kolejne cztery bity. |
| Wynik z DIB |
Składanie |
Użycie przy dekodowaniu |
| Numer pamięci |
DIF bit 6 + DIFE bity 3-0... |
Rozróżnia wartości aktualne, historyczne i inne zapisane zestawy wartości. |
| Funkcja wartości |
DIF bity 5-4 |
Określa wartość chwilową, maksymalną, minimalną albo w stanie błędu. |
| Taryfa |
DIFE bity 5-4... |
Rozróżnia rejestry taryfowe w licznikach wielotaryfowych. |
| Podjednostka |
DIFE bit 6... |
Rozróżnia kanał, część licznika albo podjednostkę, jeśli urządzenie jej używa. |
Układ bitów VIF i VIFE
| Pole |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
VIF |
VIFE |
Kod wielkości, jednostki i skali |
VIFE |
VIFE |
Kod uzupełniający VIF |
| Pole |
Bity |
Znaczenie |
VIF | 7 | Bit rozszerzenia. Wartość 1 oznacza, że za VIF następuje VIFE. |
VIF | 6-0 | Kod wielkości, jednostki i skali wartości, na przykład energia, objętość, przepływ, temperatura albo data. |
VIFE | 7 | Bit rozszerzenia. Wartość 1 oznacza, że następuje kolejny VIFE. |
VIFE | 6-0 | Kod uzupełniający do VIF. Doprecyzowuje jednostkę, skalę, znaczenie czasowe albo specyficzne dla producenta znaczenie wartości. |
Podstawowy VIF - główne grupy jednostek
| Bity VIF 6-0 |
Wielkość |
Podstawa jednostki |
Skala |
00h-07h | Energia | Wh | według kodu w zakresie |
08h-0Fh | Energia | J | według kodu w zakresie |
10h-17h | Objętość | m3 | według kodu w zakresie |
18h-1Fh | Masa | kg | według kodu w zakresie |
20h-23h | Czas włączenia | s / min / h / d | jednostka wybierana kodem |
24h-27h | Czas pracy | s / min / h / d | jednostka wybierana kodem |
28h-2Fh | Moc | W | według kodu w zakresie |
30h-37h | Moc | J/h | według kodu w zakresie |
38h-3Fh | Przepływ objętościowy | m3/h | według kodu w zakresie |
40h-47h | Przepływ objętościowy | m3/min | według kodu w zakresie |
48h-4Fh | Przepływ objętościowy | m3/s | według kodu w zakresie |
50h-57h | Przepływ masowy | kg/h | według kodu w zakresie |
58h-5Bh | Temperatura zasilania | °C | według kodu w zakresie |
5Ch-5Fh | Temperatura powrotu | °C | według kodu w zakresie |
60h-63h | Różnica temperatur | K | według kodu w zakresie |
64h-67h | Temperatura zewnętrzna | °C | według kodu w zakresie |
68h-6Bh | Ciśnienie | bar | według kodu w zakresie |
6Ch | Data | | specjalne kodowanie daty |
6Dh | Data i czas | | specjalne kodowanie daty i czasu |
6Eh | Jednostki HCA | | bez jednostki fizycznej |
70h-73h | Czas uśredniania | s / min / h / d | jednostka wybierana kodem |
74h-77h | Czas aktualności | s / min / h / d | jednostka wybierana kodem |
78h | Numer fabryczny | | wartość identyfikacyjna |
7Ah | Adres magistrali | | adres w danych |
Specjalne wartości DIF
| DIF |
Znaczenie |
0Fh | Początek danych specyficznych dla producenta; reszty telegramu nie czyta się już jako standardowych rekordów DIF/VIF. |
1Fh | Znacznik, że następują kolejne rekordy, zwykle w następnym telegramie albo bloku. |
2Fh | Bajt wypełniający. Podczas dekodowania jest pomijany i nie stanowi rekordu danych. |
DIF i długość DATA
| Pole danych DIF |
Długość DATA |
Kodowanie |
0000b / 0h | 0 Byte | bez danych |
0001b / 1h | 1 Byte | 8-bitowa liczba całkowita |
0010b / 2h | 2 Byte | 16-bitowa liczba całkowita |
0011b / 3h | 3 Byte | 24-bitowa liczba całkowita |
0100b / 4h | 4 Byte | 32-bitowa liczba całkowita |
0101b / 5h | 4 Byte | 32-bitowa liczba rzeczywista |
0110b / 6h | 6 Byte | 48-bitowa liczba całkowita |
0111b / 7h | 8 Byte | 64-bitowa liczba całkowita |
1000b / 8h | 0 Byte | wybór do odczytu |
1001b / 9h | 1 Byte | 2 cyfry BCD |
1010b / Ah | 2 Byte | 4 cyfry BCD |
1011b / Bh | 3 Byte | 6 cyfr BCD |
1100b / Ch | 4 Byte | 8 cyfr BCD |
1101b / Dh | zmienna | zmienna długość |
1110b / Eh | 6 Byte | 12 cyfr BCD |
1111b / Fh | specjalna | funkcje specjalne |
Funkcja wartości w DIF
| Bity 5-4 |
Funkcja |
Znaczenie |
00b | wartość chwilowa | zwykła aktualna wartość mierzona |
01b | wartość maksymalna | zapisane maksimum dla danego okresu albo pamięci |
10b | wartość minimalna | zapisane minimum dla danego okresu albo pamięci |
11b | wartość podczas błędu | wartość obowiązująca albo zapisana podczas stanu błędu |