Do Projektu iAutomatyka dołączyli:

https://iautomatyka.pl/wp-content/uploads/2019/08/DSC04692-2.jpg

WYSYŁANIE SMSÓW Z POZIOMU PLC #3 – POPRAWA JAKOŚCI WIADOMOŚCI I PODSTAWOWA DIAGNOSTYKA


W poprzednich odcinkach:

Wysyłanie SMSów z PLC #1 | Wysyłanie SMSów z PLC #2

W poprzednich 2 artykułach zbudowaliśmy układ umożliwiający wysyłanie SMSów ze sterownika PLC. Na tym etapie nasz układ wysyła SMS-y napisane na wyświetlaczu na numer, który również został podany na HMI. Jednak wciąż mamy dwa problemy do załatwienia. Po pierwsze – mamy dołączone dwa dziwne znaki do wiadomości, po drugie – nie mamy żadnej kontroli nad błędami. Zajmiemy się tym w tym poradniku.

Usunięcie niechcianych znaków z wiadomości

Zacznijmy od znaków. Moduł je wysyła, ponieważ źle sobie radzi ze zmiennymi typu string. Rozwiązaniem tego jest podanie zmiennej w tablicy znaków. Ustalmy plan działania:

1. Wpisujemy numer i treść na wyświetlaczu (w typie string);

2. PLC przetwarza stringi na tablice charów;

3. PLC przesyła tablice do modułu, który wysyła SMS.

Założenie jest dobre, jednak nie możemy tak zrobić, spotykamy się tutaj z brutalną ścianą rzeczywistości. Wyobraźmy sobie taką sytuację: Piszemy SMS-a o treści: Silnik indukcyjny. PLC przerabia stringa HMI_SMS na tablicę znaków PLC_SMS. SMS doszedł, więc wysyłamy kolejnego, tym razem o treści: Proces. I znowu PLC przerabia HMI_SMS na tablicę znaków PLC_SMS, a moduł wysyła wiadomość. Jaki SMS dojdzie do odbiorcy? Proces indukcyjny. Zmienne typu string same się czyszczą, z tablicami znaków jest inaczej, dlatego trzeba zawsze ją „wyzerować” po udanym wysłaniu.

Zacznijmy programowanie. Przechodzimy do naszego bloku danych, gdzie dodajemy dwie tablice znaków: Empty oraz Text i nadajemy im taką samą długość (zgodną z długością SMS-ów, które będziemy wysyłać). Dodamy jeszcze Text_HMI, która będzie zbierała treść SMS-a od wyświetlacza. Pomijamy zmienną odpowiedzialną za numer telefonu, ona może być stringiem.

Na rysunku 2 widać, że daliśmy do tablicy Empty własny tekst. Zrobiliśmy to, aby każdy nasz SMS miał stały nagłówek. Gdybyśmy nie chcieli żadnego nagłówka, tablica zostałaby pusta.

Przejdźmy teraz do Main Blocku. Dodajemy nowy Network, który zaczniemy stykiem inicjującym wysłanie SMS-a. Za nim wstawiamy blok zmiany stringa w tablicę charów.

Warto tu dodać, że używamy zmiennej o adresie M8.3, ale odradzamy używanie pamięci M o bajtach poniżej 10, ponieważ są tam ukryte zmienne systemowe.

Do bloku zmiany stringa na tablicę charów musimy dołączyć dodane przez nas zmienne, czyli:

1. String z treścią wpisaną w HMI;

2. Numer elementu, od którego zaczynamy konwersję typu, czyli – jeśli nie mamy stałego nagłówka, wpisujemy tam zero, jeśli mamy stały nagłówek, to wpisujemy tam numer, na którym kończy się nagłówek (patrzy – rysunek 2, podpunkt 3). Warto tu też pamiętać o dodatkowym pustym elemencie na spację;

3. Tablica charów, którą PLC wyśle jako SMS-a;

Z prawej strony mamy jeszcze licznik, nie wykorzystujemy go w projekcie, ale TIA wymaga, aby go zdefiniować, dlatego dajemy tam jakąś zmienną pomocniczą typu Word.

Zrobiliśmy trochę zmian w zmiennych, między innymi w HMI. Przejdźmy do Root screena i wejdźmy do bloku I/O, który zbiera treść wiadomości. Musimy podłączyć ten blok ze stringiem, który utworzyliśmy w naszym bloku danych.

Brakuje nam  jeszcze jednej rzeczy, mamy zmianę stringa na tablicę charów, ale musimy jeszcze móc zamienić tablicę charów na tablicę charów (po wysłanu SMS-a zmieniamy Text na Empty, aby „wyczyścić” domyślną tablicę).

 Jest kilka metod aby to osiągnąć, my lubimy tworzyć własne narzędzia, więc napiszemy blok funkcyjny w języku SCL, który podmieni nasze tablice.

W bloku potrzebujemy tylko jedną linijkę kodu – podmianę elementów jednej tablicy na elementy drugiej. Komenda, która zmieni części Textu na części Empty to:

„Data_block_1”.Text := „Data_block_1”.Empty;


Musimy teraz zaimplementować czyszczenie tablicy. Zrobimy to po udanym rozłączeniu (które i tak następuje po wysłaniu). Implementacja tego jest banalna, co widać na zrzucie poniżej.

Musimy jeszcze zaktualizować blok wysyłający SMS-a tak, aby treść wiadomości brał z  naszej tablicy charów, a nie ze stringa, który wpisujemy do HMI.

I gotowe, możemy teraz wysyłać SMS-y bez żadnych niechcianych znaków.

Zabezpieczenie przed zawieszeniem się modułu

Czas na drugi problem, który dzisiaj rozwiążemy. Zrobimy mechanizm, który pomoże w przypadku zawieszenia się modułu w trakcie wysyłania (co może się zdarzyć w przypadku „czkawki” sieci). Będziemy się tu inspirować mikroprocesorowym Watchdogiem (układem, który resetuje mikrokontroler, gdy ten się zawiesi).

Skoro korzystamy też z panelu HMI, możemy dołożyć wizualizację tego mechanizmu. Zrobimy to w formie sygnalizowania stanów pracy (stan połączenia, stan wysyłania i stan rozłączania).

Aby sygnalizacja naszych trzech stanów działała dobrze, musimy stworzyć trzy zmienne bitowe: „udane połączenie”, „udane wysłanie”, „udane rozłączenie”. Zmienne te – jak ich nazwy wskazują – powinny się ustawić, gdy ich procesy zostaną wykonane. Robimy to prostymi instrukcjami logicznymi.

Potrzebujemy też zmiennej bitowej „Nie wysłano”, która ustawi się, jeśli pojawi się błąd i SMS nie zostanie wysłany.

Na powyższym zrzucie widać zastosowanie zmiennej „Nie wysłano”, inicjuje ona rozłączenie układu w przypadku problemu z wysłaniem wiadomości.

Przejdźmy teraz do wywołania zmiennej „Nie wysłano”. Założenie jest następujące – po połączeniu z siecią czekamy określony czas na wysłanie SMS-a, jeśli wysłanie nie nastąpi w tym czasie, ustawiamy bit „Nie wysłano”, który inicjuje awaryjne rozłączenie modułu z siecią.

Musimy też pamiętać, że skoro ustawiamy różne bity, należy je zresetować po całym procesie (w tym przypadku po rozłączeniu modułu z siecią).

Przejdźmy teraz do wizualizacji diagnostyki na HMI. Na naszym ekranie dodajemy graficzne pola I/O i ustawiamy je według uznania. Musimy też dodać do nich opisy (czyli pola tekstowe, robiliśmy to już w poprzednim poradniku).

Podobnie jak w poprzednim poradniku musimy też dodać HMI tagi naszych zmiennych, które będą odwoływały się do PLC tagów. Robimy to z poprzednio utworzonymi zmiennymi bitowymi.

Następnie łączymy dodane pola I/O ze stworzonymi HMI tagami.

Teraz przejdziemy do grafik prezentujących stan. Rozwijamy listę Graphics list w zakładce Contents w ekranie Properies. Musimy dodać nową listę grafik.

Po stworzeniu własnej listy grafik i nadaniu jej nazwy przechodzimy do okna konfiguracji.


Zajmujemy się wizualizacją zmiennych typu bool, więc musimy ustawić sobie zakres zmian zmiennej na 0-1, robimy to, wybierając opcję Bit w zakładce Selection.

W kolejnym kroku musimy dodać grafiki, które będą się wyświetlały przy różnych stanach bitu. My dobraliśmy obrazy z folderu pokazanego poniżej.

Przy tworzeniu tego poradnika przyjęliśmy jedną listę grafik do każdego bitu sygnalizującego udany proces, dlatego daliśmy ją do każdego pola I/O. Jeśli chcecie dać inną listę do każdego pola, nie ma w tym żadnego problemu, stwórzcie listy tak jak poprzednio i dodajcie je do pól. Należy jeszcze pamiętać, żeby każde pole I/O miało bit, który chcemy pokazywać.

W analogiczny sposób stworzyliśmy drugą listę, która sygnalizuje błąd (wyżej wymieniony jako „Nie wysłano”).

Po przygotowaniu wszystkich list grafik, paneli I/O i konfiguracji tych elementów, została jeszcze jedna rzecz do zrobienia. Domyślnie dane zmiennych między HMI a PLC aktualizują się co sekundę, jest to za wolno dla naszych celów (wysłanie SMS-a trwa zwykle krócej niż sekundę, więc możemy tego nie zobaczyć na HMI). Musimy to zmniejszyć do najkrótszego czasu odświeżania – 100ms. Możemy to zrobić, zmieniając Acquisition cycle w HMI tags.

No to tyle. Udało nam się zrobić działający system wysyłający SMS-y o dowolnej treści, wizualizację procesu i system zabezpieczający przed zawieszeniem. Oczywiście motyw sterownika wysyłającego wiadomości można wykorzystać na wiele sposób, my daliśmy tylko podstawowe przykłady zastosowania, zostawiając resztę użytkownikom.

Wysyłanie SMS-ów to jednak tylko połowa możliwości tego modułu. Do omówienia zostaje nam jeszcze możliwość odbierana wiadomości przez PLC, także do tematu jeszcze wrócimy.

Artykuł został nagrodzony w Konkursie iAutomatyka – edycja Wrzesień 2019

Nagrodę Bluza OUTHORN + zestaw gadżetów dostarcza ambasador konkursu, firma Pepperl+Fuchs. 



Utworzono: / Kategoria: , , ,

Reklama



PRZECZYTAJ RÓWNIEŻ



NAJNOWSZE PUBLIKACJE OD UŻYTKOWNIKÓW I FIRM

Reklama



POLECANE FIRMY I PRODUKTY