Używamy plików cookies (tzw. ciasteczka) by spersonalizować treść i ogłoszenia oraz by analizować ruch na stronie.  W sposób automatyczny dzielimy się informacjami o Twoim użyciu tego portalu z dostawcami ogłoszeń, którzy mogą połączyć te informacje z informacjami, które im udzieliłaś/łeś lub, które sami zebrali. Korzystanie z witryny bez zmiany ustawień dotyczących cookies oznacza, że będą one zamieszczane w Państwa urządzeniu końcowym.  Możecie Państwo dokonać w każdym czasie zmiany ustawień dotyczących cookies zmieniając opcje przeglądarki.

9. Wykorzystanie zegara czasu rzeczywistego

W tej części kursu opiszę:

  • Tworzenie zmiennych globalnych
  • Zasady tworzenia odrębnych procesów w drzewie programów i konfigurowanie ich
  • Odczytywanie zegara czasu rzeczywistego

Niejszy artykuł bazuje na pojęciach i plikach omawianych w poprzednich częściach - zachęcam więc, by czytać całość od samego początku

Sprawmy by sterownik wiedział, która jest godzina i reagował odpowiednio na zaplanowane wcześniej zdarzenia.

Odczytywanie wartości wbudowanego zegara wykonywane jest funkcją SysRtcGetTime(). Jako że wykonanie jej obciąża procesor i nie ma praktycznego sensu by aktualizować czas częściej niż 1 sekundę, stworzymy do tego zadania odrębny proces.

1. Tworzymy Globalną Zmienną, która będzie w przyszłości dostępna ze wszystkich procesów programu: Zakładka Resources->Global Variables->Global_Variables i wpisujemy
VAR_GLOBAL

  CURRENT_TIME : DATE_AND_TIME;

END_VAR

1

2. Tworzymy nowy program o nazwie „ReadClock”: Zakładka POUs->prawy klawisz myszy->Add Object.

2

3. Konfigurujemy zasady wykonywania nowego programu: Zakłada Resources->Task configuration.

a) Dodajemy zadanie wykonywania głównego programu: Prawy klawisz myszy na „Task configuration->Append Task, podajemy nazwę „Main” i określamy typ jako „freewheeling”, czyli działające bez przerwy.

3

Dodajemy wywołanie programu, który ma być realizowany w ramach tego zadania: prawy klawisz myszy na Main->Append Program Call->przycisk z „…” i wybieramy PLC_PRG;

4

b. Dodajemy zadanie do obsługi odczytów zegara: prawy klawisz na myszy na poprzednim zadaniu („Main”)->Insert Task, wpisujemy Name=ReadClock, Priority=10, Type=cyclic, Properties, Interval = T#1s, tworząc tym samym zadanie, które uruchamiać się będzie co 1 sekundę.

5

Pozostaje nam już tylko dodać wywołanie programu realizowanego w ramach tego zadania: prawy klawisz myszy na ReadClock->Append Program Call->Przycisk z „…” i wybieramy ReadClock();

6

Czas napisać program ReadClock: Zakładka POUs, podwójne kliknięcie na ReadClock (PRG).

W definicjach nie wpisujemy nic, w programie wystarczy 1 linia:

CURRENT_TIME := SysRtcGetTime(TRUE);

Problem jednak w tym, że nasz program nie zna tej funkcji… pochodzi ona z biblioteki, którą trzeba najpierw dodać: Zakładka Resources->Library Manager->prawy klawisz myszy na liście zainstalowanych bilbiotek->Additional Library
W katalogu „CoDeSys V2.3/Targets/WAGO/Libraries/32_Bit” wybieramy SysLibRtc.lib.

Dodajmy jeszcze jedno pole do wiazualizacji VIS_SETTINGS, które pokazywać będzie aktualny czas sterownika.  Dodajemy prostokąt i konfigurujemy:

  • Text -> Content: "%s"
  • Variables -> Textdisplay: "CURRENT_TIME" (jest to zmienna globalna, nie trzeba więc podawać nazwy programu z którego pochodzi)

7

Program jest gotowy do kompilacji, wgrania i uruchomienia.

Oto plik programu z omawianym przykładem.

Ostatnia uwaga – procesy/programy poza PLC_PRG nie działają w trybie symulacji (Online->Simulation mode)