Działanie programu - kolejność wykonywania bloków funkcyjnych
Program w Simultus wykonywany jest cyklicznie. Kolejność realizacji bloków funkcyjnych zależy od ich wzajemnych połączeń oraz – w przypadku bloków niezależnych – od ich położenia na diagramie. W trybie pracy z emulatorem sterownika program podzielony jest na sekcje STARTUP (wykonywana jednokrotnie po uruchomieniu RUN), CONTROL oraz PLC (wykonywane cyklicznie). W trybie bez emulatora wykonywana jest wyłącznie sekcja symulacyjna (SIM), bez faz sprzętowych I/O. Czas trwania cyklu określany jest w ustawieniach symulacji (Settings → Simulation).
W obszarze diagramu bloków funkcyjnych znajduje się program działania symulacji oraz sterownika. Program tworzony jest przy pomocy bloków funkcyjnych połączonych ze sobą liniami reprezentującymi wymianę informacji między blokami. Bardzo ważnym jest zapoznanie się z zasadami tworzenie programu, gdyż od znajomości tego zagadnienia zależy prawidłowe działanie stworzonego programu.
UWAGA: Nieprawidłowo napisany program może się przyczynić do nieoczekiwanego lub nieprzewidzianego zachowania się sterownika, co może spowodować niebezpieczny wypadek!!! Należy zapoznać się z poniższymi zasadami tworzenia programów przy pomocy bloków funkcyjnych w programie narzędziowym Simultus.
Bloki funkcyjne są przez kompilator podzielone na dwie grupy: A i B. Grupa A to bloki, których kolejność zależy od połączeń między blokami. Grupa B to bloki, które nie mają wyjść lub ich wyjścia nie są podłączone. Kolejność wykonywania tych bloków zalezy od ich położenia na diagramie. Najpierw są wykonywane bloki, które są położone wyżej. Jeżeli bloki tej grupy znajdują się na tym samym poziomie diagramu to kolejność ich wykonania zależy od odległości od lewej strony zgodnie z poniższym rysunkiem:
Ilustracja pokazuje dwa różne mechanizmy ustalania kolejności wykonywania bloków, ale z punktu widzenia projektanta najważniejsze są ich konsekwencje praktyczne.
1️⃣ Bloki zależne od połączeń (grupa A)
W przypadku bloków, których wyjścia są podłączone do wejść innych bloków, program tworzy rzeczywistą zależność logiczną. Oznacza to, że:
-
projektant może sterować kolejnością wykonania poprzez sposób prowadzenia połączeń,
-
struktura połączeń wpływa bezpośrednio na logikę wykonania,
-
zmiana topologii diagramu może zmienić kolejność wykonania bez zmiany samych bloków.
To sprawia, że diagram staje się nie tylko schematem logicznym, ale również mechanizmem sterującym kolejnością przetwarzania.
2️⃣ Bloki niezależne (grupa B)
Bloki bez połączeń wyjściowych do innych bloków nie tworzą łańcucha zależności. W ich przypadku program nie ma „wskazówek logicznych”, dlatego stosuje porządek geometryczny.
W praktyce oznacza to, że:
-
przesunięcie bloku na ekranie może zmienić jego miejsce w sekwencji,
-
dwa identyczne bloki bez połączeń mogą działać w innej kolejności tylko z powodu ich położenia,
-
rozmieszczenie graficzne ma znaczenie wykonawcze, a nie tylko estetyczne.
3️⃣ Znaczenie dla projektowania większych programów
W większych projektach mieszane występowanie bloków zależnych i niezależnych może powodować:
-
trudne do zauważenia różnice w czasie reakcji,
-
opóźnienia o jeden cykl wykonania,
-
efekty uboczne przy równoległych operacjach na tych samych rejestrach.
Dlatego w praktyce zaleca się:
-
świadome grupowanie bloków zależnych,
-
unikanie „luźnych” bloków operujących na tych samych zmiennych,
-
kontrolowanie kolejności za pomocą funkcji sprawdzania sekwencji.
4️⃣ Wniosek projektowy
Ilustracja pokazuje, że w Simultus:
-
logika połączeń definiuje kolejność wykonania,
-
brak połączeń powoduje przejście na regułę geometryczną,
-
projektant ma realny wpływ na deterministyczność programu poprzez strukturę diagramu.
To istotne przy modelowaniu procesów dynamicznych, liczników, timerów oraz operacji na wspólnych rejestrach.
kolejność reazlizacji bloków można sprawdzić zaznaczając przycisk '123...' w menu 'program':

Przycisk wyświetla kolejność wykonywania bloków funkcyjnych po kompilacji programu, zgodnie z zasadami opisanymi w tym rozdziale.
Czas cyklu symulacji ustawiany jest w zakładce 'Ustawienia' pod przyciskiem 'Symulacja':

W okienku dialogowym 'simulation settings' można ustawić tryb czasu rzeczywistego oraz czas odstępu między kolejnymi cyklami (okres):

Czas rzeczywisty oznacza, że każdy cykl jest uruchamiany co określony okres czasu (ustawiany w powyższym okienku dialogowym w mikrosekundach).
Brak zaznaczenia czasu rzeczywistego oznacza, że kolejny cykl rozpocznie się zaraz po zakończeniu poprzedniego. W tej sytuacji symulacja będzie działała najszybciej jak może na danym komputerze.
Okno „Simulation settings” definiuje sposób pracy środowiska symulacyjnego Simultus. Ustawienia te mają bezpośredni wpływ na długość cyklu wykonywania programu, jego powtarzalność oraz zachowanie bloków skryptowych.
1️⃣ Simulation period
Real time
Opcja ta powoduje próbę wykonywania symulacji w czasie rzeczywistym.
Należy jednak zwrócić uwagę na ostrzeżenie widoczne w oknie:
Włączenie trybu real time nie gwarantuje pracy w czasie rzeczywistym.
System operacyjny może:
-
wprowadzać opóźnienia między cyklami,
-
wydłużać czas trwania cyklu,
-
powodować nieregularność odstępów czasowych.
Symulacja nie jest systemem czasu rzeczywistego klasy RTOS.
Period [µs]
Parametr ten określa nominalny czas jednego cyklu symulacji.
Przykład:
-
1000 µs = 1 ms
-
oznacza próbę wykonania całego cyklu (Control + PLC + bezczynność) co 1 ms.
Jeżeli wykonanie bloków trwa krócej niż ustawiony okres:
-
program przechodzi w stan „bezczynności” do końca okresu.
Jeżeli wykonanie trwa dłużej:
-
następny cykl rozpoczyna się z opóźnieniem.
To ustawienie bezpośrednio definiuje tempo działania symulowanego sterownika.
2️⃣ Simulation timeout
Stop the simulation after time
Pozwala zatrzymać symulację po określonym czasie (w mikrosekundach).
Jest to przydatne przy:
-
testach algorytmów,
-
analizie krótkich procesów dynamicznych,
-
automatycznych scenariuszach testowych.
Stop the emulator
Zatrzymuje emulator po osiągnięciu warunku zakończenia symulacji.
3️⃣ LUA – obsługa skryptów
Stop simulation on script error
W przypadku błędu w bloku skryptowym (LUA) symulacja zostaje zatrzymana.
Zalecane ustawienie przy testowaniu nowych bloków skryptowych, aby uniknąć:
-
niekontrolowanego działania programu,
-
propagacji błędnych danych.
Scripts execution timeouts
Określają maksymalny czas wykonywania:
-
Global script
-
Block script
Podane wartości (w µs) zabezpieczają symulację przed zawieszeniem spowodowanym:
-
pętlą nieskończoną,
-
zbyt złożonym obliczeniem,
-
błędną logiką skryptu.
Jeżeli czas zostanie przekroczony — wykonywanie zostanie przerwane.
To ważny mechanizm bezpieczeństwa symulacji.
4️⃣ Modbus
Sekcja ta określa tryb komunikacji Modbus TCP/IP.
Dostępne opcje:
-
Disabled – komunikacja wyłączona
-
Emulator – komunikacja z emulatorem
-
Simulation – komunikacja w trybie symulacyjnym
Adres IP (np. 127.0.0.1) wskazuje lokalny host.
To ustawienie ma znaczenie przy:
-
testowaniu integracji systemów,
-
komunikacji z zewnętrznymi sterownikami,
-
symulacji rozproszonych systemów sterowania.
Znaczenie tych ustawień dla rozdziału o cyklu wykonywania
Najważniejszy parametr z punktu widzenia kolejności i czasu wykonania bloków to:
Simulation period
To on definiuje:
-
długość pełnego cyklu programu,
-
częstotliwość wykonywania bloków,
-
odstęp między kolejnymi iteracjami diagramu.
Diagram cyklu wykonywania programu należy interpretować w kontekście tego parametru.
Wniosek inżynierski
Okno „Simulation settings” nie jest jedynie konfiguracją symulacji — definiuje ono:
-
rytm pracy programu,
-
maksymalną częstotliwość reakcji logiki,
-
ograniczenia czasowe bloków skryptowych,
-
stabilność i powtarzalność testów.
Ustawienia te powinny być świadomie dobrane w zależności od:
-
charakteru modelowanego procesu,
-
wymagań czasowych,
-
rodzaju używanego sterownika (emulator / PLC zewnętrzny).
Cykl wykonywania programu bez emulatora sterownika
1️⃣ Kontekst pracy bez emulatora
Gdy nie jest używany wewnętrzny emulator sterownika PLC (blok funkcyjny 4S2A) - to jest najczęśtszy przypadek, Simultus działa wyłącznie jako:
-
środowisko symulacji logicznej, albo
-
środowisko projektowe / wizualizacyjne współpracujące z zewnętrznym sterownikiem.
W tym trybie:
-
nie istnieją fizyczne wejścia X ani wyjścia Y,
-
nie występuje odczyt ani zapis I/O,
-
nie ma cyklu sterownika PLC w rozumieniu wykonawczym.
Wszystkie zmienne mają charakter wewnętrzny (logicznymodelowy).
2️⃣ Charakter wykonywanych zmiennych
W trybie bez emulatora operujemy wyłącznie na:
-
rejestrach wirtualnych (VR),
-
markerach wirtualnych (VM),
-
zmiennych wewnętrznych bloków funkcyjnych,
-
sygnałach logicznych generowanych przez bloki (np. przyciski, timery, skrypty).
Zmienne te nie reprezentują fizycznych sygnałów sprzętowych, lecz stan modelu.
3️⃣ Uproszczony cykl symulacyjny (bez emulatora)
Model cyklu wygląda następująco:
Start symulacji
Wykonanie bloków funkcyjnych
(kolejność zależna od:
1) połączeń logicznych,
2) położenia bloków na diagramie)
↓
Aktualizacja zmiennych wewnętrznych
↓
Bezczynność do końca okresu symulacji
↓
Następny cykl symulacji
Nie występuje tu:
❌ odczyt wejść X
❌ zapis wyjść Y
❌ synchronizacja z fizycznym sprzętem
4️⃣ Brak faz sprzętowych
W trybie bez emulatora nie istnieją:
-
faza PLC,
-
faza I/O,
-
faza synchronizacji sprzętowej.
Każdy cykl jest czysto obliczeniowy i dotyczy wyłącznie logiki modelu.
5️⃣ Brak inicjalizacji sprzętowej
Nie istnieje również:
-
inicjalizacja sprzętu,
-
inicjalizacja wejść/wyjść,
-
sprzętowy „startup”.
Jeżeli program wymaga zachowania jednorazowego startu (np. ustawienia wartości początkowych), musi to być jawnie zaimplementowane w logice programu (np. marker inicjalizacji).
6️⃣ Zależność od czasu symulacji
Jedynym elementem czasowym determinującym cykl jest:
Settings → Simulation → Simulation period
Parametr ten określa:
-
jak często wykonywany jest cały diagram,
-
tempo zmian zmiennych wewnętrznych,
-
rozdzielczość czasową symulowanego modelu.
7️⃣ Praca z zewnętrznym sterownikiem PLC (dla porządku)
Jeżeli Simultus współpracuje z zewnętrznym, fizycznym sterownikiem PLC (np. FATEK, TRIO lub innych poprzez MODBUS):
-
cykl sterowania realizowany jest w sterowniku,
-
X i Y istnieją po stronie PLC, nie po stronie Simultus,
-
Simultus jedynie:
-
wymienia dane,
-
wizualizuje stany,
-
umożliwia monitorowanie.
-
Diagram cyklu Simultusa nie opisuje wtedy cyklu PLC, a jedynie cykl symulacyjno-komunikacyjny.
Podczas działania symulacji istnieje możliwość sprawdzenia rzeczywistego czasu trwania poprzedniego cyklu poprzez wykorzystanie bloku funkcyjnego SYS_DATA z zakładki 'Timery i liczniki':

Sugerujemy zapoznanie się z podrozdziałem Okno główne programu, w którym znaduje się opis najważniejszych elementów menu.
Różnice między sekcjami CONTROL i PLC
W trybie pracy z emulatorem sterownika program wykonywany jest cyklicznie w dwóch głównych sekcjach: CONTROL oraz PLC.
Obie sekcje są funkcjonalnie identyczne — mogą zawierać te same bloki funkcyjne, operacje logiczne, matematyczne, timery, liczniki czy skrypty. Nie różnią się typem dostępnych elementów.
Różnica dotyczy kolejności wykonania i stabilności czasowej.
1️⃣ Sekcja CONTROL
-
Wykonywana jest zawsze jako pierwsza w każdym cyklu.
-
Jej start jest bezpośrednio powiązany z początkiem cyklu sterownika.
-
Charakteryzuje się najbardziej stabilnym czasem rozpoczęcia wykonania.
Znaczenie praktyczne
Jeżeli dana część algorytmu:
-
wymaga stabilnego okresu wykonywania,
-
ma być realizowana w stałym rytmie cyklu,
-
jest wrażliwa na jitter czasowy,
należy ją umieścić w sekcji CONTROL.
Sekcja ta stanowi czasowo najbardziej deterministyczną część programu.
2️⃣ Sekcja PLC
-
Wykonywana jest po zakończeniu sekcji CONTROL.
-
Jej rozpoczęcie zależy od czasu trwania wykonania sekcji CONTROL.
-
Może wykazywać większą zmienność momentu startu w ramach cyklu.
Znaczenie praktyczne
Sekcja PLC nadaje się do:
-
operacji mniej krytycznych czasowo,
-
przetwarzania pomocniczego,
-
komunikacji,
-
działań, których dokładny moment rozpoczęcia w cyklu nie jest krytyczny.
3️⃣ Kluczowa różnica
| Cecha | CONTROL | PLC |
|---|---|---|
| Zawartość bloków | Dowolna | Dowolna |
| Kolejność w cyklu | Pierwsza | Druga |
| Stabilność startu | Najbardziej stabilna | Zależna od CONTROL |
| Zalecane użycie | Logika wymagająca stałego cyklu | Logika mniej wrażliwa czasowo |
4️⃣ Wniosek projektowy
Jeżeli jakaś funkcjonalność:
-
musi być wykonywana z możliwie stałym czasem cyklu,
-
powinna rozpoczynać się możliwie blisko początku cyklu,
należy umieścić ją w sekcji CONTROL.
Sekcja PLC jest wykonywana później, dlatego jej moment startu jest przesunięty o czas potrzebny na realizację sekcji CONTROL.
5️⃣ Uwaga
Podział ten ma znaczenie wyłącznie w trybie pracy z emulatorem sterownika.
W trybie bez emulatora nie występuje rozdział na CONTROL i PLC.