logo
Language

Wizualizacja Scada: Napięcie, Moc, Wejścia, Wyjścia oraz Temperatura

W dzisiejszym wpisie przedstawię jak graficznie zilustrować informacje odbierane z poszczególnych urządzeń przy pomocy uScady.

Plik użytego JS wraz z zapisem licencji znajduję się w pliku gauge.min.css

Soft >= v1.00

Urządzenia wykorzystane do wizualizacji:

– LANtick: wejścia, wyjścia

– Nano Temp: temperatura

– Lumel N30P: napięcie, moc

Wykorzystane elementy

1. uScada

2. Nano Temp

3. Lantick 4-4

4. Miernik Lumel N30P

5. Zasilacze PoE

6. Switch i patchcord’y (kable LAN)

Schemat podłączenia

 

 

Zasada działania wraz z konfiguracją

W omawianym przykładzie moduł μScada (Master) odpytuje po Modbus’ie TCP wartości z adresów rejestrów odebranych od modułu Nano Temp (Slave), który przez przyłączony czujnik wysyła aktualną wartość temperatury powietrza, z modułu LANtick 4-4 (Slave) zostają odbierane stany wejść oraz wyjść, wraz z możliwością zmiany stanu wyjść. Został również dołączony miernik Lumel N30P (Slave) odpowiadający za pomiar napięcia i mocy pobieranej przez urządzenie. Miernik posiada zaimplementowany protokół komunikacyjny Modbus RTU. Do pamięci μScady zostały zapisane odpowiednie pliki i napisane odpowiednie skrypty.

Konfiguracja

Na początku należy załączyć MODBUS TCP w modułach: Nano Temp oraz LANtick.

Fabryczne dane logowania do Nano Temp i LANtick:

user: admin

hasło: admin00

W μScada zaczynamy od konfiguracji pliku POINTS.xml (w instrukcji zostało zawarte jak go znaleźć i co oznaczają poszczególne tagi).

Zaczynamy od zdefiniowania ilości grup punktów. W naszym przypadku jest to 5 grup. Odpowiednio:

1. Grupa punktów dla odczytu napięcia.

Definiujemy nazwy widoczne w pliku comm.xml:

– nazwę grupy punktów <id> np. Miernik_n

– numer od którego rozpoczynamy numerowanie <id_start> np. 1

– ilość punktów w grupie <len> np. 2

Z uwagi na to, że w dokumentacji miernika widnieje zapis, że:

Wartość jest umieszczona w dwóch kolejnych rejestrach 16 bitowych.
Definiujemy 2 punkty w grupie.

– wybieramy protokół <protocol> dla modułu N30P- RTU

– adres fizyczny Modbus <dev_addr> np. 1

– ustawienie komendy <cmd> MB_HOLD

– ustawienie adresu rejestrów <address> – należy sprawdzić w dokumentacji, jakie adresy odpowiadają za napięcie- 7019

Należy pamiętać, że niekiedy adresacja w Modbus jest przesunięta o 1. Tak jest w mierniku Lumel N30P.

Dzieje się tak, ponieważ adresy rejestru modbus zaczynają się od 1, a adresy w ramce danych od 0. Jest to częsta przyczyna powstawania błędów w czasie programowania.

– typ dostępu <access> np. r – tylko odczyt

2. Grupa punktów dla odczytu mocy.

– nazwę grupy punktów <id> np. Miernik_p

– numer od którego rozpoczynamy numerowanie <id_start> np. 1

– ilość punktów w grupie <len> np. 2

– wybieramy protokół <protocol> dla modułu N30P- RTU

– adres fizyczny Modbus <dev_addr> np. 1

– ustawienie komendy Modbus <cmd> MB_HOLD

– ustawienie adresu rejestrów <address> – należy sprawdzić w dokumentacji, jakie adresy odpowiadają za moc- 7023

– typ dostępu <access> np. r – tylko odczyt

3. Grupa punktów dla odczytu stanu wejść.

– nazwę grupy punktów <id> np. Miernik_p

– numer od którego rozpoczynamy numerowanie <id_start> np. 1

– ilość punktów w grupie <len> np. 4 (z uwagi na 4 wejścia)

– wybieramy protokół <protocol> dla modułu LANtick- TCP

– adres fizyczny Modbus <dev_addr> np. 1

– ustawienie komendy Modbus <cmd> MB_COIL

– ustawienie adresu rejestrów <address> – należy sprawdzić w dokumentacji, jakie adresy odpowiadają za odczyt wejść- 1004

W przedstawionych modułach Inveo adresy Modbus zostały ujednolicone i nie są przesunięte.

W LANtick 4-4 wyjścia są numerowane jako 1, 2, 3, 4, a wejścia 5, 6, 7, 8.

– typ dostępu <access> np. r – tylko odczyt

– adres IP urządzenia, które odpytujemy <ip_addr> (można go odpowiednio ustawić)

– port ip- 502

4. Grupa punktów dla odczytu i ustawienia stanu wyjść.

– nazwę grupy punktów <id> np. LanTick_Wyj_nr_

– numer od którego rozpoczynamy numerowanie <id_start> np. 1

– ilość punktów w grupie <len> np. 4 (z uwagi na 4 wyjścia)

– wybieramy protokół <protocol> dla modułu LANtick- TCP

– adres fizyczny Modbus <dev_addr> np. 1

– ustawienie komendy Modbus <cmd> MB_COIL

– ustawienie adresu rejestrów <address> – należy sprawdzić w dokumentacji, jakie adresy odpowiadają za odczyt wyjść- 1000

– typ dostępu <access> np. rw – odczyt i zapis

– adres IP urządzenia, które odpytujemy <ip_addr> 192.168.111.60

– port ip- 502

5. Grupa punktów dla odczytu temperatury.

– nazwę grupy punktów <id> np. Temperatura_

– numer od którego rozpoczynamy numerowanie <id_start> np. 1

– ilość punktów w grupie <len> 1

– wybieramy protokół <protocol> dla modułu Nano Temp- TCP

– adres fizyczny Modbus <dev_addr> np. 1

– ustawienie komendy Modbus <cmd> MB_MULTIHOLD

– ustawienie adresu rejestrów <address> – należy sprawdzić w dokumentacji- adres rejestru 4004 odpowiada za temperaturę x10

– typ dostępu <access> np. rw – odczyt i zapis

– adres IP urządzenia, które odpytujemy <ip_addr> 192.168.111.15

– port ip- 502

 

Gdy wszystkie grupy zostały zdefiniowane należy uruchomić ponownie moduł, aby zmiany zostały zaktualizowane.

W celu sprawdzenia, czy wszystko przebiegło pomyślnie można sprawdzić plik comm.xml. W przeglądarkę wpisujemy adresIPurządzenia/comm.xml.

Zaznaczone linie dają nam informacje ile sekund wcześniej nastąpiło poprawne odpytanie z Modbusa. Jeżeli czas od ostatniej odpowiedzi cały czas rośnie (40-50 sekund) trzeba poprawić plik POINTS.xml, bądź sprawdzić dane urządzenie czy jest poprawnie podpięte.

Kolejny krokiem jest wgranie odpowiednich skryptów i plików obrazów do katalogu WWW.

Na koniec zajmujemy się edycją pliku index.htm.

W omawianym przykładzie zdefiniowaliśmy odnośniki do poszczególnych skryptów i zmienne w sekcji nagłówkowej.

Następnie zdefiniowaliśmy zawartość strony.

Na samym początku są zapisane informacje odnośnie stylu nagłówka i samego tekstu.

Elementem <canvas> dostosowujemy wygląd miernika, podpis, wartości max i min, podziałki, opóźnienia, kolory itp.

id=gauge3 odpowiada za wskaźnik dotyczący pomiaru mocy

id=gauge2 odpowiada za wskaźnik dotyczący pomiaru napięcia

id=gauge1 odpowiada za wskaźnik dotyczący pomiaru temperatury

Poniżej zdefiniowanego odczytu temperatury rozpoczyna się definicja wyglądu przycisków informujących o stanie wyjść oraz zdarzeniach występujących po ich naciśnięciu. W tym przypadku po naciśnięciu przycisku zostaje wywołana funkcja sendData(nr wejścia, stan na jaki ma zostać ustawiony przekaźnik (wł/wył)).

Ostatnim elementem wizualnym są ikony informujące o stanie wejść LANtick.

 

Teraz zajmiemy się wykorzystanymi funkcjami:

Funkcja updateStatus zajmuje się pobraniem danych z pliku xml’a. W pętli for sprawdzamy tablice lantick1 odpowiadającą za stan wyjść i określającą jaki obrazek ma zostać wyświetlony (0-OFF, 1- ON). Kolejna pętla odpowiada za wejścia.

 

Powyższy kod odpowiada z pobranie wartości temperatury z pliku comm.xml i podzielenie jej przez 10, aby otrzymać interesującą nas wartość.

 

W tym momencie ominiemy linie kody dotyczące napięcia i mocy, aby wpierw wytłumaczyć występującą w nich funkcję “function ieee32ToFloat(intval)”. Funkcja to odpowiada za konwersję wartości z ieee (32bity) na wartość float- zmiennoprzecinkową. Dzięki temu otrzymujemy znane dla człowieka wartości napięcia i mocy.

Wracając do ominiętych linii kodu:

Wpierw definiujemy zmienne v1 oraz v2 i przypisujemy im wartości z odczytanego pliku xml. Zmienna v1 odpowiada za pierwszy punkt w grupie (16bit), v2 za drugi punkt (również 16 bit). Sprowadzamy te wartości do jednej zmiennej o nazwie v. W zmiennej f zostaje zapisana przekonwertowana wartość po użyciu funkcji ieee32ToFloat(). Ostatnim krokiem jest zapisanie przekonwertowanej wartości do zmiennej, która jest wyświetlana jako licznik.

Postępujemy analogicznie w przypadku odczytu mocy.

W ten sposób wizualizacja została ukończona.

 

Pliki do pobrania

Zasoby plików- wizualizacja

 

POINTS.XML

 

index.htm