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

Nasza strona korzysta z plików Cookie zgodnie z Polityką Prywatności.

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close