Magistrala M-Bus została wprowadzona w 1979 roku przez firmę Modicon (obecnie Schneider Electric). Protkół został opisany szczegółowo w dokumentacji.
Najczęściej spotykanym zastosowaniem jest przesył małej ilości danych na dalekie odległości wewnątrz obiektu. Przykładowo, umożliwia to zbieranie danych z urządeń, jak np liczniki.
Magitrala pracuje na warstwie 7 modelu OSI (warstwa aplikacji), co oznacza, że umożliwia przesyłanie informacji pomiędzy urządzeniami w różnych typach magistrali/sieci. Jest więc możliwe podłączenie magistrali do sieci LAN przez bramkę, w takim przypadku komunikacja odbywa się przez TCP/IP.
Warstwa fizyczna
Magistrala składa się z dwóch przewodów służących do przesyłu danych. Każde urządzenie podłączone do magistrali musi mieć wyprowadzone 2 porty, Rx i Tx. Rx odpowiada za odbiór danych, a Tx za ich wysyłanie. Tak więc Tx slave'ów muszą być podłączone do Rx mastera, a Rx slave'ów łączy się z Tx mastera.
MASTER |
Rx | <=> | Tx | SLAVE |
Tx | <=> | Rx | ||
Dane przesyłane są bajtami( po 8 bitów ).
Transmisja jednego bajtu odbywa się poprzez nadawanie bitów w następującej kolejności:
1b | start - informuje o początku transmisji, ma wartość '1' |
8b | przesyłany bajt w kolejności od najmłodszego do najstarszego ( gdy potraktujemy bajt jako liczbę dwójkową najmłodszy bit to ten, który decyduje o parzystości tej liczby ) |
1b | kontrola parzystości - informuje, czy liczba jedynek w wysłanym bajcie była parzysta czy nie, służy do weryfikacji poprawności, nieuwzględniany, pełni funkcję dodatkowego bitu stopu |
1b | start - przerwa pomiędzy nadawaniem kolejnych ramek, ma wartość '0' |
Tak więc aby wysłać 8b danych, trzeba przesłać 11 bitów. Oznacza to, że faktyczna prędkość transmisji jest o ok 27% niższa niż szybkość wysłania bitu. Jest to wada wszystkich protkołów używających tego przestarzałego już standardu przesyłania danych.
Master -> Slave
Transmisja danych od mastera( urządzenia zarzadzającego magistralą ) do
slave'ów(pozostałych urządzeń) odbywa się poprzez zmiany poziomu napięcia
na linii. 24V oznacza przesłanie '0', a 36V - '1'.
Slave -> Master
Slave'mi na magistrali mogą być nieskomplikowane urządzenia, np czujniki. Do wysłania danych za pomocą zmian poziomu napięcia potrzeba dwóch źródeł napięcia. Aby niepotrzebnie nie komplikować prostych urządzeń, za utrzymanie poziomu napięcia na linii odpowiada master. Slave'y mogą jedynie wymusić niskie napięcie poprzez zwarcie do masy. Podczas przesyłania danych od slave'ów, master próbuje utrzymywać na magistrali napięcie. Jeśli udaje się to, oznacza to odebranie przez niego '1'. Natomiast gdy slave zewrze magistralę do masy, nadaje '0'.
Prędkość
Szybkość przesyłu danych określa baudrate. Informuje on, ile bitów na
sekundę urządzenie może wysłać. Powinien zawierać się przedziale <300,9600>.
Im niższy baudrate, tym transmisja wolniejsza, ale odporniejsza na
zakłócenia. Ponadto, pojemność linii nie powinna przekroczyć 180nF, co w praktyce
ogranicza jej długość do ok 2km( przy pojemności skrętki 80nF/km ).
W celu eleminacji zakłóceń, magistrala może pracować także w trybie 4-przewodowym( 4W ). Linia przesyłowa składa się wtedy z dwóch skręconych par przewodów i sygnały w obu kierunkach przes są różnicowo, co pozwala na wzajemne znoszenie się zakłóceń.
Ramki
Pojedynczy znak:
1 bajt - 0xE5( 229 ) wartość stała
wysłanie pojedynczego znaku, służy to do potwierdzenie odbioru danych
Pusta ramka:
1B | 0x10( 16d ) | stała | |
1B | C | funkcja pakietu, informuje co oznaczają dane | |
1B | A | adres, pod który wysyłana jest ramka | |
2B | CRC | suma kontrolna, służy do sprawdzenia poprawności danych | |
1B | 0x16( 22d ) | stała |
Krótka ramka bez danych, z sumą kontrolną
Może być wykorzystania do przesłania komunikatu lub komedy, zawierającej się w funkcji pakietu
Ramka danych:
1B | 0x68( 104d ) | stała | |
1B | L | długość =ilość danych + 3( C + A + CI ) | |
1B | L | długość - dla pewności powtórzona | |
1B | C | funkcja | |
1B | A | adres | |
1B | 0x68( 104 ) | stała | |
1B | CI | dodatkowe informacje, komenda dla urządzenia dokumentacja definiuje kilka komend, które mogą być przekazane tym polem jak np reset, zmiana baud rate czy żądanie odczytania danych, ale zależy to tylko od komunikujących się urządeń ( nie wpływa na przebieg transmisji danego pakietu ) |
|
<0,252>B | dane | ||
2B | CRC | suma kontrolna | |
1B | 0x16( 22d ) | stała |
Ramka służy do transmisji danych, zawiera sumę kontrolną, co pozwala
zweryfikować ich poprawność
Ramka kontrolna:
Ramka danych o danych długości 0B, służy tylko do przekazania komendy.
Adresowanie
Adres na magistrali mieści się w 1 bajcie, czyli jest to liczba
z przedziału <0,255>. Możliwe adresy na magistrali:
0 | ten adres przyjmują nieskonfigurowane urządzenia |
<1,250> | adresy slave'ów |
251,252 | zarezerwowane do wykorzystania w przyszłości |
253 | oznacza, że dane zaadresowane są w wyższej warstwie, czyli adresu należy szukać w innej części pakietu |
254 | adres rozgłoszeniowy( broadcast ), odbiera każdy slave, odpowiada swoim adresem |
255 | broadcast, odbiera każdy slave, bez odpowiedzi |
Ilość adresów ogranicza liczbę slave'ów podłączonych do jednej
magistrali do 250.
W celu podłączenia większej liczby urządzeń najczęściej stosuje się
transmitery, np zbierające dane z magistrali i wysyłające do sieci LAN.
Adres na mogistrali staje się wtedy ostatnim bajtem adresu IP.
Adresy można ustalić ręcznie, ale jeśli konfiguracja mastera i slave'ów
na to pozwala, można przydzielić je automatycznie. Wykorzystywane są w tym celu
32-bitowe identyfikatory każdego urządzenia. Składają się one w systemie szesnastkowym
z cyfr 0-9, np 0x12345678. Cyfry F są przez urządzenia traktowane jakby
mogła być tam dowolna inna cyfra, np urządzenia o adresach 0x47111111 i 0x48111111
odpowiedzą na zapytanie dla adresu 0x4FFFFFFF. Master wykonuje odpowiednie
zapytania i w ten sposób wyszukuje podłączone urządzenia.
przykład:
master pyta magistralę o grupę adresów 0x4FFFFFFF. Zgłaszają się dwa
urządzenia:
0x47111111 i 0x48111111.
Master wyłapuje konflikt i dzieli przedział adresów na mniejsze aż oddzieli od siebie wszystkie urządzenia, po czym przyporządkowuje im adresy.