tMPC-04 - Licznik impulsów z interfejsem Modbus

tMPC-04 to 4-wejściowy licznik impulsów z interfejsem Modbus RTU przeznaczony do współpracy z licznikami wyposażonymi w wyjścia impulsowe.

Liczba impulsów, obliczona energia oraz szacowana moc są dostępne poprzez rejestry Modbus.

Urządzenie może być używane z licznikami energii elektrycznej, ale może również mierzyć inne wielkości, takie jak zużycie wody lub gazu. Przeliczenie na te jednostki odbywa się na podstawie współczynników wprowadzanych przez użytkownika (np. impulsy na kWh), przy czym domyślna wartość wynosi 1000 impulsów na jednostkę.

Specyfikacja techniczna

Parametr Wartość
Zasilanie 5–12 V DC (złącze)
5 V (USB)
Wejścia impulsowe 4 wejścia
Progi poziomu wejścia Low = 0 – 1.0 V, High = 1.3 – 25 V
Maksymalna częstotliwość zliczania ~2000 Hz (do 4000 Hz bez estymacji mocy)
Interfejsy Modbus RTU (RS485),
Serial (przez USB; 115200 baud)
Wymiary 74 × 40 × 23 mm (bez uchwytu DIN)
Waga 42 g

Domyślna konfiguracja

Po wyjęciu z pudełka tMPC-04 jest wstępnie skonfigurowany z następującymi ustawieniami:

Jeśli te ustawienia odpowiadają parametrom Twoich liczników, urządzenie jest gotowe do natychmiastowego użycia. W przeciwnym przypadku, np. przy pracy z wieloma licznikami impulsów lub innymi współczynnikami przeliczeniowymi, przejdź do sekcji Zaawansowana konfiguracja.

Szybka konfiguracja adresu Modbus

Nowsze rewizje sprzętowe tMPC-04 posiadają przycisk funkcyjny umożliwiający szybką konfigurację adresu Modbus.

Jeśli chcesz zmienić adres Modbus, możesz to zrobić za pomocą wbudowanego przycisku funkcyjnego oraz diody LED znajdujących się na płytce PCB. Przycisk znajduje się przy krawędzi płytki przeciwnej do strony, na której znajdują się port USB oraz złącza Modbus i zasilania.

Aby odczytać aktualny adres:

  1. Naciśnij przycisk jeden raz.
  2. Dioda LED zamiga, wskazując adres.
    (Na przykład 2 mignięcia = adres 2.)

Aby ustawić nowy adres:

  1. Naciśnij i przytrzymaj przycisk.
  2. Po 2 sekundach dioda LED mignie raz.
  3. Przytrzymaj — dioda będzie migać raz na sekundę, maksymalnie do 5 razy.
  4. Zwolnij przycisk po liczbie mignięć odpowiadającej żądanemu adresowi.
    (Na przykład, dla adresu 3, zwolnij przycisk po trzecim mignięciu.)

⚠️ Jeśli przytrzymasz przycisk dłużej niż 7 sekund, procedura zostanie anulowana i zmiany nie zostaną wprowadzone.

Dodatkowe opcje konfiguracji znajdziesz w sekcji Zaawansowana konfiguracja.

Integracja z LK

Moduł tMPC-04 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 liczniki impulsów, energię lub moc.

Aktualizacja firmware

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.

Włączanie trybu bootloadera

Tryb bootloadera można włączyć na dwa sposoby:

Pliki firmware są dostępne w sekcji Do pobrania.

Zaawansowana konfiguracja

Aby zmienić ustawienia, należy podłączyć tMPC-04 do komputera przez USB. Urządzenie może być zasilane przez USB, więc dodatkowe zasilanie nie jest wymagane.

Wymagane oprogramowanie

Do nawiązania połączenia z urządzeniem potrzebny jest program obsługujący komunikację szeregową. Popularne narzędzia to:

Przykładowy proces konfiguracji

  1. 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
  2. Podłącz urządzenie
    Podłącz tMPC-04 i uruchom polecenie ponownie. Nowy port COM (np. COM11) będzie odpowiadał podłączonemu urządzeniu.

  3. Połącz się z tMPC-04
    Użyj następujących parametrów połączenia:

    • Baud rate: 115200
    • Byte size: 8 bits
    • Parity: None
    • Stop bits: 1

    Przykładowe polecenie:

    pyserial-miniterm COM11 115200
  4. 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).

Lista poleceń

Polecenie Opis
address? | a? Odczytuje adres Modbus (Slave ID).
address=X | a=X Ustawia adres Modbus. Parametry: X – adres do ustawienia, liczba <1, 255>.
debounce_time? | d? Odczytuje czas debounce dla liczników impulsów (w ms).
debounce_time=X | d=X Ustawia czas debounce dla liczników impulsów. Określa minimalną długość impulsu – krótsze impulsy będą ignorowane i nie będą zliczane. Parametry: X – wartość w ms, liczba <0, 65_535>, dla 0 funkcja jest wyłączona.
power_estimation? | pe? Odczytuje flagę estymacji mocy dla liczników impulsów (0 – OFF, 1 – ON).
power_estimation=X | pe=X Ustawia flagę estymacji mocy dla liczników impulsów. Określa czy estymacja mocy jest włączona. Można ją wyłączyć, jeśli nie jest potrzebna lub aby zwiększyć zakres pomiaru częstotliwości impulsów z ~2 kHz do ~4 kHz (ograniczenie wynikające z długości i kształtu impulsu nadal obowiązuje). Parametry: X – wartość 0 – OFF / 1 – ON, liczba <0, 1>.
auto_save? | as? Odczytuje wartość funkcji autozapisu. Jest to interwał w sekundach, w którym liczniki są zapisywane do pamięci.
auto_save=X | as=X Ustawia wartość funkcji autozapisu. Parametry: X – czas w sekundach, liczba <0, 65_535>, dla 0 funkcja jest wyłączona.
counter_cfX? | ccfX? Odczytuje współczynnik przeliczeniowy dla licznika impulsów. Parametry: X – numer licznika <1, 4>.
counter_cfX=Y | ccfX=Y Ustawia współczynnik przeliczeniowy dla licznika impulsów: liczba impulsów na jednostkę, np. imp/kWh. Parametry: X – numer licznika <1, 4>; Y – liczba impulsów, liczba <1, 65_535>.
counterX? | cX? Odczytuje wartość licznika impulsów, czyli liczbę zliczonych impulsów. Parametry: X – numer licznika <1, 4>.
counterX=Y | cX=Y Ustawia wartość licznika impulsów. Parametry: X – numer licznika <1, 4>; Y – liczba impulsów, liczba <0, 1_073_741_823>.
read_status | rs Odczytuje zapisany stan liczników.
save_config | sc Zapisuje konfigurację do pamięci Flash. Należy użyć po zmianie adresu Modbus, współczynników przeliczeniowych liczników, czasu debounce oraz ustawień autozapisu, aby zachować je po restarcie.
save_status | ss Zapisuje stan liczników impulsów do pamięci Flash. Należy użyć po zmianie wartości liczników (liczby impulsów), aby zachować je po restarcie.
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 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 komunikat pomocy z listą dostępnych poleceń.

Typowe przypadki użycia

Niektóre polecenia są przydatne tylko w określonych sytuacjach.

Adresowanie Modbus
W przypadku używania wielu urządzeń tMPC-04 na jednej magistrali Modbus lub razem z innym urządzeniem o tym samym adresie, zaleca się zmianę adresu za pomocą polecenia address=X, aby każde urządzenie miało unikalny adres.

Czas debounce
Jeżeli urządzenie zlicza nadmiarowe impulsy, polecenie debounce_time=X pozwoli zignorować impulsy krótsze od określonego czasu trwania.

Automatyczny zapis
Jeśli konieczne jest zachowanie wartości liczników w przypadku zaniku zasilania, należy użyć polecenia auto_save=X. Powoduje ono okresowe zapisywanie stanu energii do pamięci trwałej.
Należy pamiętać o zużyciu pamięci Flash, ponieważ ma ona ograniczoną liczbę cykli zapisu (szacowaną na około 100 tys.). Dlatego korzystając z tej funkcji, interwał powinien być dobrany jako rozsądny kompromis. Na przykład, wartość 300 sekund powinna wystarczyć na około rok działania, a 1800 sekund na ponad 5,5 roku. Urządzenia wykorzystują system plików z równoważeniem zużycia, co znacznie zwiększa oczekiwaną liczbę zapisów (nasze urządzenie testowe wykonało już ponad 440 tys. zapisów bez błędów).

Zapisywanie zmian
Po zmianie ustawień za pomocą poleceń address=X, debounce_time=X, power_estimation=X, auto_save=X lub counter_cfX=Y, należy użyć polecenia save_config, aby zapisać konfigurację w pamięci trwałej. W przeciwnym razie zmiany zostaną utracone po zaniku zasilania lub ponownym uruchomieniu urządzenia.

Dokładność pomiaru

Dokładność pomiaru impulsów zależy od częstotliwości, czasu trwania impulsu oraz czasów narastania i opadania sygnału.

W normalnym trybie pracy z estymacją mocy długość impulsu nie powinna być krótsza niż 0.34 ms.
W trybie wysokiej prędkości (bez estymacji mocy) impuls może mieć długość nawet 0.19 ms.

Dla większości zastosowań błąd pomiaru nie powinien przekraczać 0.1%. W naszych testach ewentualny błąd wynosił 1–2 impulsy więcej lub mniej.

Rejestry 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)  |         |
| counter1                       | 3002 | uint32 | 0x04 (IREG)  |         |
| counter2                       | 3004 | uint32 | 0x04 (IREG)  |         |
| counter3                       | 3006 | uint32 | 0x04 (IREG)  |         |
| counter4                       | 3008 | uint32 | 0x04 (IREG)  |         |
| counter1_energy                | 3010 | uint32 | 0x04 (IREG)  |    1000 |
| counter2_energy                | 3012 | uint32 | 0x04 (IREG)  |    1000 |
| counter3_energy                | 3014 | uint32 | 0x04 (IREG)  |    1000 |
| counter4_energy                | 3016 | uint32 | 0x04 (IREG)  |    1000 |
| counter1_power                 | 3018 | uint32 | 0x04 (IREG)  |    1000 |
| counter2_power                 | 3020 | uint32 | 0x04 (IREG)  |    1000 |
| counter3_power                 | 3022 | uint32 | 0x04 (IREG)  |    1000 |
| counter4_power                 | 3024 | uint32 | 0x04 (IREG)  |    1000 |
| version_major                  | 3100 | uint16 | 0x04 (IREG)  |         |
| version_minor                  | 3101 | uint16 | 0x04 (IREG)  |         |
| version_patch                  | 3102 | uint16 | 0x04 (IREG)  |         |
| address                        | 4000 | uint16 | 0x03 (HREG)  |         |
| debounce_time                  | 4001 | uint16 | 0x03 (HREG)  |         |
| counter1_conversion_factor     | 4002 | uint16 | 0x03 (HREG)  |         |
| counter2_conversion_factor     | 4003 | uint16 | 0x03 (HREG)  |         |
| counter3_conversion_factor     | 4004 | uint16 | 0x03 (HREG)  |         |
| counter4_conversion_factor     | 4005 | uint16 | 0x03 (HREG)  |         |
| auto_save                      | 4006 | uint16 | 0x03 (HREG)  |         |
| power_estimation               | 4007 | uint16 | 0x03 (HREG)  |         |