tMDS-16 to moduł pomiaru temperatury z interfejsem Modbus RTU. Wyposażony jest w dwie niezależne magistrale 1-Wire, z których każda może obsłużyć do 8 czujników temperatury DS18B20, co daje łącznie możliwość podłączenia do 16 czujników.
Dane pomiarowe są udostępniane za pośrednictwem rejestrów Modbus, które zawierają zarówno bieżące odczyty z czujników, jak i odpowiadające im wartości offsetów używane do kalibracji. Kalibracja zapewnia dokładne i spójne pomiary dla wszystkich podłączonych czujników.
tMDS-16 jest przeznaczony przede wszystkim do pracy jako moduł rozszerzeń dla urządzeń LK4 lub LK3.5+ (również kompatybilny z LK3.9), umożliwiając skalowalny i rozproszony pomiar temperatury.
Dostępny jest gotowy plik konfiguracyjny dla tych urządzeń, pozwalający na szybkie i bezproblemowe uruchomienie.
Domyślnie urządzenie używa adresu Modbus Slave ID 1, który można zmienić za pomocą konsoli szeregowej na USB.
| Parametr | Wartość |
|---|---|
| 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 RJ12 i 3-pozycyjną listwę zaciskową, Modbus RTU (RS485), Serial (przez USB; 115200 baud) |
| Wymiary | 74 × 40 × 28 mm (bez uchwytu DIN) |
| Waga | 44 g |
Moduł tMDS-16 bezproblemowo integruje się z urządzeniami LK4 i LK3.5+. Można go zasilać bezpośrednio z kontrolera LK za pomocą wyjść 5 V i GND. Następnie należy go podłączyć – samodzielnie lub razem z innymi urządzeniami Modbus – do zacisków Modbus A+ i B− kontrolera LK, aby nawiązać komunikację.
Po podłączeniu skonfiguruj niestandardowy moduł Modbus w LK, korzystając z gotowego presetu konfiguracyjnego dostępnego w sekcji Do pobrania. Preset można łatwo zmodyfikować tak, aby odczytywać tylko potrzebne parametry, np. wybrane czujniki temperatury lub offsety kalibracyjne.
Aby zaktualizować firmware, urządzenie musi zostać uruchomione w trybie bootloadera. W tym trybie po podłączeniu do komputera pojawi się jako urządzenie pamięci masowej o nazwie RPI-RP2. Wystarczy skopiować plik nowego firmware na ten nośnik. Po przesłaniu, urządzenie automatycznie uruchomi się ponownie i wznowi normalną pracę z nowym firmware.
Tryb bootloadera można włączyć na dwa sposoby:
Przez konsolę USB
Podłącz urządzenie do komputera i otwórz konsolę szeregową (patrz sekcja Zaawansowana konfiguracja).
Następnie wyślij polecenie bootloader.
Połączenie zostanie przerwane, a urządzenie uruchomi się ponownie w trybie bootloadera.
Za pomocą pól stykowych JP2 (metoda sprzętowa)
Otwórz obudowę urządzenia, aby uzyskać dostęp do JP2 jumper pad — dwóch sąsiadujących pól stykowych na płytce PCB.
Tymczasowo zewrzyj oba pola (np. pęsetą lub innym metalowym narzędziem) przed podłączeniem urządzenia do komputera przez USB.
Przytrzymaj zwarcie przez chwilę podczas uruchamiania urządzenia. Gdy urządzenie wejdzie w tryb bootloadera, usuń zwarcie.
W starszych rewizjach sprzętowych zamiast tego używany jest przycisk FLASH / SW znajdujący się na płytce PCB.
Należy go nacisnąć i przytrzymać przed podłączeniem urządzenia do komputera przez USB, a następnie zwolnić po wejściu urządzenia w tryb bootloadera.
Pliki firmware są dostępne w sekcji Do pobrania.
Przycisk funkcyjny na tMDS-16 umożliwia wygodne wykonywanie podstawowych czynności konfiguracyjnych bez konieczności podłączania urządzenia do komputera.
Przycisk znajduje się przy krawędzi płytki przeciwnej do strony, na której znajdują się port USB oraz złącza Modbus i zasilania.
Dioda LED obok przycisku wskazuje, która funkcja zostanie wykonana, w zależności od czasu przytrzymania przycisku.
Po przytrzymaniu przycisku dioda LED zacznie migać, sygnalizując wybraną akcję:
| Czas przytrzymania | Sygnalizacja LED | Wykonana akcja |
|---|---|---|
| < 2 sekundy | 1 krótkie mignięcie krótko po naciśnięciu | update_sensors – wykrywa i przypisuje podłączone czujniki |
| 2 - 5 sekund | 2 mignięcia po 2 sekundach | set_offsets – automatycznie kalibruje wszystkie czujniki (offsety zapisywane automatycznie) |
| 5 - 10 sekund | 3 mignięcia po 5 sekundach | reset_sensors – usuwa wszystkie przypisania czujników i offsetów |
| > 10 sekund | Brak akcji | anulowanie (przycisk przytrzymany zbyt długo) |
Aby wykonać daną funkcję, należy zwolnić przycisk natychmiast po pojawieniu się odpowiedniej sekwencji błysków.
Jeśli przycisk zostanie przytrzymany zbyt długo (>10 s), nie zostanie podjęta żadna akcja.
ℹ️ Aby przeprowadzić bardziej zaawansowaną konfigurację i diagnostykę, użyj konsoli USB, jak opisano w następnej sekcji.
Aby zmienić ustawienia, należy podłączyć tMDS-16 do komputera przez USB. Urządzenie może być zasilane przez USB, więc dodatkowe zasilanie nie jest wymagane.
Do nawiązania połączenia z urządzeniem potrzebny jest program obsługujący komunikację szeregową. Popularne narzędzia 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ć następująco:
COM1
COM3
COM15
COM16
COM17
Podłącz urządzenie
Podłącz tMDS-16 i uruchom polecenie ponownie. Nowy port COM (np. COM11) będzie odpowiadał podłączonemu urządzeniu.
Połącz się z tMDS-16
Użyj następujących parametrów połączenia:
Przykładowe polecenie:
pyserial-miniterm COM11 115200
Wysyłanie poleceń
Po nawiązaniu połączenia możesz wysyłać polecenia do urządzenia. Każde polecenie należy zakończyć klawiszem Enter. Przydatnym poleceniem jest ? lub help, które wyświetla listę dostępnych poleceń (opisanych poniżej).
| Polecenie | Opis |
|---|---|
| address? | a? | Odczytuje adres Modbus (Slave ID). |
| address=X | a=X | Ustawia adres Modbus. Parametry: X – adres do ustawienia, liczba <1, 255>. |
| offsetX? | oX? | Odczytuje wartość offsetu dla DSX. Parametry: X – numer czujnika <1, 16>. |
| offsetX=Y | oX=Y | Ustawia wartość offsetu. Parametry: X – numer czujnika <1, 16>; Y – wartość offsetu, liczba <-3_276.8, 3_276.7>. |
| idX? | iX? | Odczytuje identyfikator czujnika DSX. Parametry: X – numer czujnika <1, 16>. |
| idX=Y | iX=Y | Ustawia identyfikator czujnika. Parametry: X – numer czujnika <1, 16>; Y – identyfikator w formacie AA:AA:AA:AA:AA:AA:AA:AA. |
| update_sensors | us | Aktualizuje listę czujników – wykrywa i przypisuje czujniki. |
| set_offsets | so | Automatycznie oblicza offsety dla wszystkich aktywnych czujników. |
| reset_sensors | Resetuje identyfikatory czujników oraz ich offsety. |
| read_sensors | rs | Odczytuje aktualne wartości z czujników. |
| save_config | sc | Zapisuje konfigurację do pamięci Flash. Należy użyć po zmianie adresu Modbus lub 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 firmware. Po podłączeniu do komputera pojawi się jako urządzenie pamięci masowej o nazwie RPI-RP2, do którego należy skopiować plik firmware z rozszerzeniem uf2. Następnie urządzenie uruchomi się ponownie w trybie normalnej pracy. |
| restart | Uruchamia ponownie 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 komunikat pomocy z listą dostępnych poleceń. |
Poniżej znajdują się praktyczne przykłady konfiguracji i użytkowania tMDS-16 za pośrednictwem konsoli.
Jeżeli na jednej magistrali pracuje kilka urządzeń Modbus, każde z nich musi mieć unikalny adres.
Przykład:
address=5
save_config
Ustawia adres urządzenia na 5 i zapisuje konfigurację w pamięci Flash.
Jeżeli czujnik wykazuje stały błąd względem wzorcowego termometru, można skorygować odczyt poleceniem offsetX=Y.
Przykład:
offset3=-0.5
save_config
Powoduje korektę −0.5 °C dla czujnika DS3.
Jeżeli wszystkie czujniki znajdują się w tym samym środowisku o znanej temperaturze, można automatycznie wyliczyć offsety:
set_offsets
Urządzenie zmierzy aktualne temperatury i obliczy offsety tak, aby wszystkie czujniki wskazywały tę samą wartość.
Polecenie automatycznie zapisuje wyliczone offsety w pamięci Flash.
Aby wyświetlić aktualne odczyty z czujników:
read_sensors
Jeśli czujniki zostały dodane lub usunięte, można odświeżyć listę:
update_sensors
Aby całkowicie wyczyścić zapisane identyfikatory i offsety czujników:
reset_sensors
Aby wyświetlić definicje rejestrów oraz ich aktualne wartości:
read_definitions
read_registers
Polecenia te są przydatne przy diagnostyce lub podczas integracji z oprogramowaniem Modbus.
Poniżej znajduje się lista rejestrów Modbus dostępnych w urządzeniu.
Zawartość odpowiada wynikowi polecenia read_definitions i zawiera nazwy rejestrów, adresy, typy oraz 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 |