Witam.
Ostatnio zastanawiałem się nad możliwościami Modbusa w zakresie adresowania 16-bitowego urządzeń slave.
Przeszukałem internet wzdłuż i wszerz i znalazłem kilka rozwiązań "extended modbus addressing". Okazało się, że coś takiego istnieje, że są urządzenia, które to obsługują, ale kilka spraw mi się nie spodobało:
- urządzeń obsługujących rozszerzone adresowanie można policzyć na palcach
- z tego co udało mi się zrozumieć, adresowanie rozszerzone nie jest do końca kompatybilne z czystym Modbusem. Związane jest to ze zmodyfikowaniem samego protokołu - np. po prostu wysłanie 16-bitów zamiast 8-bitów adresu.
Ja natomiast poszukuję rozwiązania, które byłoby w pełni kompatybilne z Modbusem, a posiadało rozszerzone adresowanie slave.
Ktoś z was spotkał się z obsługą takiej funkcjonalności w urządzeniach i czy kiedyś potrzebował większego adresowania w Modbusie?
Dzisiaj rano wpadłem na pomysł, który byłby w pełni kompatybilny, a mianowicie:
- każde urządzenie obsługujące EMA, posiada dwa wewnętrzne rejestry 8-bitowe. W pierwszym przechowywany jest górna połówka adresu urządzenia, a w drugim aktualnie aktywna górna połówka adresu wykorzystywanego przez Modbus Master. Niech pierwszy nazywa się MB_ADDR_HI, a drugi MB_SEL_ADDR_HI.
- jeżeli MB_ADDR_HI == 0x00, to urządzenie pracuje w trybie adresowania 8-bitowego. Jeżeli jest to wartość != 0x00, to pracuje w trybie EMA.
- Modbus Master pierwotnie broadcastuje zapis do rejestru MB_SEL_ADDR_HI wartość górnej połówki adresów, do których urządzeń chce uzyskać dostęp. Urządzenia wspierające EMA, wpisują sobie tą wartość do rejestru i nasłuchują kolejnych transmisji.
- Modbus Master komunikuje się teraz "po staremu" wykorzystując 8-bitowe adresowanie. Urządzenia EMA przy odbieraniu danych weryfikują dolną połówkę adresu z aktualnie wysłaną oraz górną połówkę z tą broadcastowaną. Jeżeli obydwa adresy się zgadzają, to odsyła odpowiedź.
Zalety uważam za bardzo duże - pełna kompatybilność urządzeń standardowych z 8-bitowym adresowaniem z tymi z 16-bitowym. Dodatkowo jedne urządzenia z drugimi mogą pracować na tej samej linii bez żadnych kolizji, oczywiście pod warunkiem, że adres rejestru broadcastowego nie nadpisze jakiegoś ważnego adresu innego urządzenia nie wspierającego EMA. Dodatkowo nie trzeba stosować specjalnie przygotowanego Modbus Mastera, tylko wystarczy prosty zabieg w oprogramowaniu sterownika, aby zaadresować urządzenia > 255.
Co o tym myślicie, ma sens? czy może macie jakieś inne propozycje lub są jakieś opracowane metody?
Ostatnio zastanawiałem się nad możliwościami Modbusa w zakresie adresowania 16-bitowego urządzeń slave.
Przeszukałem internet wzdłuż i wszerz i znalazłem kilka rozwiązań "extended modbus addressing". Okazało się, że coś takiego istnieje, że są urządzenia, które to obsługują, ale kilka spraw mi się nie spodobało:
- urządzeń obsługujących rozszerzone adresowanie można policzyć na palcach
- z tego co udało mi się zrozumieć, adresowanie rozszerzone nie jest do końca kompatybilne z czystym Modbusem. Związane jest to ze zmodyfikowaniem samego protokołu - np. po prostu wysłanie 16-bitów zamiast 8-bitów adresu.
Ja natomiast poszukuję rozwiązania, które byłoby w pełni kompatybilne z Modbusem, a posiadało rozszerzone adresowanie slave.
Ktoś z was spotkał się z obsługą takiej funkcjonalności w urządzeniach i czy kiedyś potrzebował większego adresowania w Modbusie?
Dzisiaj rano wpadłem na pomysł, który byłby w pełni kompatybilny, a mianowicie:
- każde urządzenie obsługujące EMA, posiada dwa wewnętrzne rejestry 8-bitowe. W pierwszym przechowywany jest górna połówka adresu urządzenia, a w drugim aktualnie aktywna górna połówka adresu wykorzystywanego przez Modbus Master. Niech pierwszy nazywa się MB_ADDR_HI, a drugi MB_SEL_ADDR_HI.
- jeżeli MB_ADDR_HI == 0x00, to urządzenie pracuje w trybie adresowania 8-bitowego. Jeżeli jest to wartość != 0x00, to pracuje w trybie EMA.
- Modbus Master pierwotnie broadcastuje zapis do rejestru MB_SEL_ADDR_HI wartość górnej połówki adresów, do których urządzeń chce uzyskać dostęp. Urządzenia wspierające EMA, wpisują sobie tą wartość do rejestru i nasłuchują kolejnych transmisji.
- Modbus Master komunikuje się teraz "po staremu" wykorzystując 8-bitowe adresowanie. Urządzenia EMA przy odbieraniu danych weryfikują dolną połówkę adresu z aktualnie wysłaną oraz górną połówkę z tą broadcastowaną. Jeżeli obydwa adresy się zgadzają, to odsyła odpowiedź.
Zalety uważam za bardzo duże - pełna kompatybilność urządzeń standardowych z 8-bitowym adresowaniem z tymi z 16-bitowym. Dodatkowo jedne urządzenia z drugimi mogą pracować na tej samej linii bez żadnych kolizji, oczywiście pod warunkiem, że adres rejestru broadcastowego nie nadpisze jakiegoś ważnego adresu innego urządzenia nie wspierającego EMA. Dodatkowo nie trzeba stosować specjalnie przygotowanego Modbus Mastera, tylko wystarczy prosty zabieg w oprogramowaniu sterownika, aby zaadresować urządzenia > 255.
Co o tym myślicie, ma sens? czy może macie jakieś inne propozycje lub są jakieś opracowane metody?