tMDS-16 to moduł do pomiaru temperatury przeznaczony do systemów opartych na protokole Modbus RTU. Wyposażony jest w dwa niezależne interfejsy 1-Wire, z których każdy obsługuje do 8 czujników temperatury DS18B20, co daje możliwość podłączenia maksymalnie 16 czujników.
Dane pomiarowe udostępniane są przez rejestry Modbus, które zawierają zarówno bieżące odczyty temperatury, jak i odpowiadające im wartości offsetów kalibracyjnych, co zapewnia dokładne i spójne wyniki pomiarów.
  Urządzenie zostało zaprojektowane głównie jako rozszerzenie dla LK4 lub LK3.5+ (również kompatybilne z LK3.9), umożliwiając skalowalny i rozproszony pomiar temperatury.
  Gotowy do użycia plik konfiguracyjny dla tych urządzeń dostępny jest na stronie produktu tMDS-16, co pozwala na szybką integrację bez dodatkowej konfiguracji.
Domyślnie urządzenie posiada adres Modbus Slave ID = 1, który można zmienić przez konsolę USB.
| Zasilanie | 5-12 V DC (złącze) 5 V (USB) | 
|---|---|
| Obsługa czujników | Do 2 × 8 czujników DS18B20 | 
| Interfejsy | 1-Wire: 2 magistrale przez złącze RJ12 i 3-pinowe złącze śrubowe, Modbus RTU (RS485), Serial (przez USB; 115200 baud) | 
| Wymiary | 74 x 40 x 30 mm (bez uchwytu DIN) | 
| Waga | 44 g | 
tMDS-16 bezproblemowo integruje się z urządzeniami LK4 oraz LK3.5+. Może być zasilany bezpośrednio z wyjść 5V i GND kontrolera LK. Następnie należy podłączyć go — samodzielnie lub wraz z innymi urządzeniami Modbus — do złącz Modbus A+ i B− w urządzeniu LK, aby nawiązać komunikację.
Po podłączeniu skonfiguruj niestandardowy moduł Modbus w LK, korzystając z gotowego pliku konfiguracyjnego dostępnego w sekcji Do pobrania. Plik ten można łatwo dostosować do własnych potrzeb, np. ograniczając odczyt do wybranych czujników lub offsetów kalibracyjnych.
Aby zaktualizować oprogramowanie, urządzenie tMDS-16 należy uruchomić w trybie bootloadera. W tym trybie urządzenie pojawia się jako nośnik pamięci masowej o nazwie RPI-RP2 po podłączeniu do komputera. Wystarczy skopiować nowy plik z firmware do tego nośnika. Po zakończeniu kopiowania urządzenie automatycznie się zrestartuje i wznowi normalną pracę z nowym oprogramowaniem.
Tryb bootloadera można włączyć na dwa sposoby:
bootloader.💡 Pliki z oprogramowaniem dostępne są w sekcji Do pobrania.
Przycisk funkcyjny na urządzeniu tMDS-16 umożliwia szybkie i intuicyjne wykonanie podstawowych operacji konfiguracyjnych — bez konieczności podłączania przez USB. To rozwiązanie sprawdza się idealnie w przypadku szybkiej konfiguracji w terenie.
Przycisk znajduje się obok złączy magistrali 1-Wire, a dioda LED statusu znajduje się pomiędzy nimi. Dioda informuje, jaka funkcja zostanie uruchomiona w zależności od długości przytrzymania przycisku.
Podczas przytrzymywania przycisku, dioda LED miga, sygnalizując wybraną akcję:
| Czas przytrzymania | Sygnał LED | Wywołana akcja | 
|---|---|---|
| < 2 sekundy | 1 krótkie mignięcie | update_sensors– wykrycie i przypisanie czujników | 
| 2–5 sekund | 2 mignięcia po 2 sekundach | set_offsets– autokalibracja wszystkich czujników (offsety zapisywane automatycznie) | 
| 5–10 sekund | 3 mignięcia po 5 sekundach | reset_sensors– wyczyszczenie przypisań czujników i offsetów | 
| > 10 sekund | Brak działania | Anulowanie (przycisk przytrzymany zbyt długo) | 
  Aby wywołać wybraną funkcję, zwolnij przycisk zaraz po odpowiednim sygnale LED.
  Jeśli przycisk zostanie przytrzymany zbyt długo (>10 s), żadna akcja nie zostanie wykonana.
ℹ️ W celu bardziej zaawansowanej konfiguracji i diagnostyki, skorzystaj z konsoli USB (opisana w następnej sekcji).
Aby zmienić ustawienia, musisz podłączyć tMDS-16 do komputera przez USB. Urządzenie może być zasilane przez USB, więc nie są potrzebne żadne dodatkowe połączenia zasilania.
Aby nawiązać połączenie z licznikiem impulsów, będziesz potrzebować aplikacji obsługującej komunikację szeregową. Popularne opcje to:
      Wyświetlenie dostępnych portów:
      Uruchom pyserial-ports, aby wyświetlić dostępne porty COM przed podłączeniem urządzenia. Wynik może wyglądać tak:
    
COM1
COM3
COM15
COM16
COM17
      Podłącz urządzenie
      Podłącz tMDS-16 i uruchom ponownie polecenie. Nowy port COM (np. COM11) będzie reprezentował podłączone urządzenie.
    
      Połącz z tMDS-16
      Użyj następujących parametrów połączenia:
    
Przykładowe polecenie:
pyserial-miniterm COM11 115200
      Wysyłanie poleceń
      Po połączeniu możesz wydawać polecenia do urządzenia. Każde polecenie musi być zakończone klawiszem Enter. Przydatnym poleceniem jest ? lub help, które wyświetla listę wszystkich dostępnych poleceń (opisanych poniżej).
    
| Polecenie | Opis | 
|---|---|
| address? | a? | Odczytuje aktualny adres Modbus (Slave ID). | 
| address=X | a=X | Ustawia adres Modbus. Parametry: X – adres do ustawienia, liczba z zakresu <1, 255>. | 
| offsetX? | oX? | Odczytuje offset kalibracyjny dla czujnika DSX. X: numer czujnika <1, 16>. | 
| offsetX=Y | oX=Y | Ustawia offset dla czujnika. X: numer czujnika <1, 16>, Y: wartość offsetu <-32768, 32767>. | 
| update_sensors | us | Aktualizuje listę czujników – wykrywa i przypisuje podłączone czujniki. | 
| set_offsets | so | Automatycznie oblicza offsety dla wszystkich aktywnych czujników. | 
| reset_sensors | Resetuje przypisania ID czujników i ich offsety. | 
| read_sensors | rs | Wyświetla aktualne odczyty temperatury z czujników. | 
| save_config | sc | Zapisuje konfigurację do pamięci Flash. Należy użyć po zmianie adresu Modbus i offsetów. | 
| read_registers | rr | Odczytuje wartości rejestrów Modbus. | 
| read_definitions | rd | Odczytuje definicje rejestrów Modbus: nazwa, adres, typ. | 
| bootloader | Uruchamia urządzenie w trybie bootloadera w celu aktualizacji oprogramowania. Po podłączeniu do komputera urządzenie pojawi się jako dysk o nazwie RPI-RP2, na który należy skopiować plik firmware z rozszerzeniem uf2. Następnie urządzenie automatycznie zrestartuje się i uruchomi w trybie normalnej pracy. | 
| restart | Restartuje urządzenie. | 
| verbose=X | v=X | Włącza lub wyłącza tryb szczegółowy (verbose), który wyświetla więcej komunikatów. | 
| help | ? | Wyświetla pomoc z listą dostępnych poleceń. | 
Poniżej przedstawiono praktyczne przykłady konfiguracji i obsługi tMDS-16 za pomocą konsoli. Scenariusze te obejmują najczęstsze zadania integracyjne i kalibracyjne.
Podczas używania wielu urządzeń Modbus na jednej magistrali, należy przypisać każdemu unikalny adres.
address=5Następnie zapisz nową konfigurację:
save_configAby ręcznie dostosować odczyty poszczególnych czujników, użyj offsetów indywidualnych.
Przykład: ustawienie offsetu −0.5°C dla czujnika nr 3:
offset3=-0.5Zapisz zmiany:
save_configAby wyrównać odczyty wszystkich podłączonych czujników DS18B20, użyj komendy:
set_offsetsPolecenie oblicza średnią temperaturę ze wszystkich aktywnych czujników i ustawia offsety, które dopasowują każdy czujnik do tej wartości. Pozwala to zniwelować drobne różnice fabryczne i zwiększa spójność pomiarów w różnych środowiskach.
🛈 Przed uruchomieniem tej komendy zaleca się umieszczenie wszystkich czujników w jednym miejscu, przy stabilnej temperaturze. Odczekaj chwilę, aż czujniki się wyrównają, a następnie wykonaj kalibrację.
Komenda automatycznie zapisuje wyliczone offsety do pamięci Flash.
Aby wyświetlić odczyty temperatury w konsoli:
read_sensorsPo podłączeniu nowych czujników lub wymianie starych, zaktualizuj listę:
update_sensorsAby zresetować przypisania ID czujników i ich offsety:
reset_sensorsAby wyświetlić aktualne wartości rejestrów:
read_registersAby wyświetlić listę rejestrów z nazwami, typami i adresami:
read_definitions
  Poniżej przedstawiono listę rejestrów Modbus dostępnych w urządzeniu.
  Lista odpowiada wynikowi komendy read_definitions i zawiera nazwy, adresy, typy i dzielniki.
| Name                           | Addr | Type   | Func         | Divisor |
| ------------------------------ | ---- | ------ | ------------ | ------- |
| uptime                         | 3000 | uint32 | 0x04 (IREG)  |         |
| ds1                            | 3002 | int32  | 0x04 (IREG)  |      10 |
| ds2                            | 3004 | int32  | 0x04 (IREG)  |      10 |
| ds3                            | 3006 | int32  | 0x04 (IREG)  |      10 |
| ds4                            | 3008 | int32  | 0x04 (IREG)  |      10 |
| ds5                            | 3010 | int32  | 0x04 (IREG)  |      10 |
| ds6                            | 3012 | int32  | 0x04 (IREG)  |      10 |
| ds7                            | 3014 | int32  | 0x04 (IREG)  |      10 |
| ds8                            | 3016 | int32  | 0x04 (IREG)  |      10 |
| ds9                            | 3018 | int32  | 0x04 (IREG)  |      10 |
| ds10                           | 3020 | int32  | 0x04 (IREG)  |      10 |
| ds11                           | 3022 | int32  | 0x04 (IREG)  |      10 |
| ds12                           | 3024 | int32  | 0x04 (IREG)  |      10 |
| ds13                           | 3026 | int32  | 0x04 (IREG)  |      10 |
| ds14                           | 3028 | int32  | 0x04 (IREG)  |      10 |
| ds15                           | 3030 | int32  | 0x04 (IREG)  |      10 |
| ds16                           | 3032 | int32  | 0x04 (IREG)  |      10 |
| ds1_readErrors                 | 3034 | uint32 | 0x04 (IREG)  |         |
| ds2_readErrors                 | 3036 | uint32 | 0x04 (IREG)  |         |
| ds3_readErrors                 | 3038 | uint32 | 0x04 (IREG)  |         |
| ds4_readErrors                 | 3040 | uint32 | 0x04 (IREG)  |         |
| ds5_readErrors                 | 3042 | uint32 | 0x04 (IREG)  |         |
| ds6_readErrors                 | 3044 | uint32 | 0x04 (IREG)  |         |
| ds7_readErrors                 | 3046 | uint32 | 0x04 (IREG)  |         |
| ds8_readErrors                 | 3048 | uint32 | 0x04 (IREG)  |         |
| ds9_readErrors                 | 3050 | uint32 | 0x04 (IREG)  |         |
| ds10_readErrors                | 3052 | uint32 | 0x04 (IREG)  |         |
| ds11_readErrors                | 3054 | uint32 | 0x04 (IREG)  |         |
| ds12_readErrors                | 3056 | uint32 | 0x04 (IREG)  |         |
| ds13_readErrors                | 3058 | uint32 | 0x04 (IREG)  |         |
| ds14_readErrors                | 3060 | uint32 | 0x04 (IREG)  |         |
| ds15_readErrors                | 3062 | uint32 | 0x04 (IREG)  |         |
| ds16_readErrors                | 3064 | uint32 | 0x04 (IREG)  |         |
| version_major                  | 3100 | uint16 | 0x04 (IREG)  |         |
| version_minor                  | 3101 | uint16 | 0x04 (IREG)  |         |
| version_patch                  | 3102 | uint16 | 0x04 (IREG)  |         |
| address                        | 4000 | uint16 | 0x03 (HREG)  |         |
| offset1                        | 4001 | int32  | 0x03 (HREG)  |      10 |
| offset2                        | 4003 | int32  | 0x03 (HREG)  |      10 |
| offset3                        | 4005 | int32  | 0x03 (HREG)  |      10 |
| offset4                        | 4007 | int32  | 0x03 (HREG)  |      10 |
| offset5                        | 4009 | int32  | 0x03 (HREG)  |      10 |
| offset6                        | 4011 | int32  | 0x03 (HREG)  |      10 |
| offset7                        | 4013 | int32  | 0x03 (HREG)  |      10 |
| offset8                        | 4015 | int32  | 0x03 (HREG)  |      10 |
| offset9                        | 4017 | int32  | 0x03 (HREG)  |      10 |
| offset10                       | 4019 | int32  | 0x03 (HREG)  |      10 |
| offset11                       | 4021 | int32  | 0x03 (HREG)  |      10 |
| offset12                       | 4023 | int32  | 0x03 (HREG)  |      10 |
| offset13                       | 4025 | int32  | 0x03 (HREG)  |      10 |
| offset14                       | 4027 | int32  | 0x03 (HREG)  |      10 |
| offset15                       | 4029 | int32  | 0x03 (HREG)  |      10 |
| offset16                       | 4031 | int32  | 0x03 (HREG)  |      10 |