impulse-generator
Opis
Bloczek impulse-generator generuje sekwencję impulsów czasowych składającą się z naprzemiennych faz pracy i przerwy. Może zostać uruchomiony komendą wysłaną z bloczka command, zboczem, poziomem logicznym albo automatycznie po starcie projektu, jeśli jego wejście nie jest do niczego podłączone.
W czasie pracy bloczek udostępnia osobne wyjścia informujące o fazie pracy, fazie przerwy oraz o tym, czy generator jest aktualnie aktywny. Jeśli parametr impulses ma wartość 0, generator pracuje bez końca aż do otrzymania komendy reset z bloczka command. Dla skończonej liczby impulsów generator przechodzi po każdym impulsie również przez fazę przerwy i dopiero po zakończeniu ostatniej przerwy wraca do stanu bezczynności.
Parametry konfiguracyjne
| Nazwa parametru | Wartość |
|---|---|
input_edge |
Parametr obowiązkowy określający warunek wyzwolenia wejścia dla trybów pracy reagujących na zdarzenia wejściowe. Obsługiwane są wartości: rising, falling, both, true, false, null, none. W praktyce najczęściej używane są zbocza rising, falling albo both. |
impulses |
Parametr obowiązkowy określający liczbę impulsów do wygenerowania. Dozwolone są wartości od 0 do 18446744073709551615. Wartość 0 oznacza pracę ciągłą, bez automatycznego zatrzymania. |
working_time |
Parametr obowiązkowy określający czas trwania fazy pracy jednego impulsu w milisekundach. Dozwolony zakres to od 100 ms do 1209600000 ms (czyli 14 dni). |
sleeping_time |
Parametr obowiązkowy określający czas trwania przerwy pomiędzy kolejnymi impulsami w milisekundach. Dozwolony zakres to od 100 ms do 1209600000 ms (czyli 14 dni). |
working_mode |
Parametr opcjonalny określający sposób sterowania wejściem. Obsługiwane wartości to: dlatch, oneshot, edgereset, leveldriven. |
Obsługa wejścia
Bloczek obsługuje dwie komendy z bloczka command niezależnie od ustawionego working_mode:
- Komenda
setz bloczkacommanduruchamia generator. Jeśli generator już pracuje, sekwencja zostaje rozpoczęta ponownie od fazy pracy, a licznik impulsów jest inicjalizowany od początku. - Komenda
resetz bloczkacommandzatrzymuje generator i przełącza go do stanu bezczynności.
Jeśli do wejścia bloczka nie jest podłączony żaden inny bloczek, generator uruchamia się samoczynnie po zakończeniu inicjalizacji projektu.
W trybach dlatch, oneshot i edgereset sposób reakcji na wejście zależy od parametru input_edge:
rising: reakcja na zmianęfalse -> truefalling: reakcja na zmianętrue -> falseboth: reakcja na każdą zmianę wartości logicznejtrue: reakcja na każdą wiadomość, której nowa wartość jest logicznym truefalse: reakcja na każdą wiadomość, której nowa wartość jest logicznym falsenull: reakcja na każdą wiadomość, której nowa wartość tonullnone: brak reakcji na zwykłe zdarzenia wejściowe
Wartości wejściowe inne niż obsługiwane przez dany warunek wyzwolenia są ignorowane. W szczególności dla rising, falling, both, true i false bloczek wymaga wartości dających się interpretować logicznie, natomiast dla null reaguje wyłącznie na wartość null.
Pozostałe sygnały wejściowe są obsługiwane zgodnie z parametrem working_mode:
| Tryb pracy | Opis działania |
|---|---|
Uruchamiany i zatrzymywany zboczem (dlatch) |
Każde zdarzenie spełniające warunek z input_edge przełącza generator między stanami start/stop. Gdy generator jest zatrzymany, takie zdarzenie go uruchamia. Gdy generator już pracuje, to samo zdarzenie go zatrzymuje. |
Uruchamiany zboczem (oneshot) |
Zdarzenie spełniające warunek z input_edge uruchamia generator tylko wtedy, gdy jest on w stanie bezczynności. Zdarzenia wejściowe pojawiające się w trakcie pracy są ignorowane. |
Przedłużany zboczem (edgereset) |
Zdarzenie spełniające warunek z input_edge uruchamia generator, jeśli jest zatrzymany. Jeśli generator już pracuje, kolejne zdarzenie nie restartuje bieżącej fazy ani nie zeruje bieżącego timera, lecz odnawia licznik pozostałych impulsów do wartości wynikającej z konfiguracji, dzięki czemu generator pracuje dłużej. |
Sterowany stanem (leveldriven) |
Wartość logiczna true uruchamia generator, jeśli nie jest jeszcze aktywny. Wartość logiczna false zatrzymuje generator. W tym trybie parametr input_edge nie bierze udziału w podejmowaniu decyzji o starcie i zatrzymaniu, a wartości inne niż logiczne są ignorowane. |
Bloczek nie wymaga stosowania wejść oznaczanych za pomocą bloczka tag.
Wyjścia bloczka
| Numer i nazwa wyjścia | Opis wyjścia |
|---|---|
| 1. Faza pracy. | Zwraca wartość true tylko wtedy, gdy generator znajduje się w fazie pracy impulsu. W pozostałych stanach zwracana jest wartość false. |
| 2. Faza przerwy. | Zwraca wartość true tylko wtedy, gdy generator znajduje się w fazie przerwy pomiędzy impulsami. W pozostałych stanach zwracana jest wartość false. |
| 3. Aktywność generatora. | Zwraca wartość true, gdy generator jest aktywny, czyli znajduje się w fazie pracy albo w fazie przerwy. W stanie bezczynności zwracana jest wartość false. |
Zależność pomiędzy wyjściami jest następująca:
- w stanie
idlewszystkie trzy wyjścia mają wartość false - w fazie pracy wyjścia mają odpowiednio wartości: true, false, true
- w fazie przerwy wyjścia mają odpowiednio wartości: false, true, true
Opis statusu bloczka
Opis widoczny pod bloczkiem przyjmuje jedną z dwóch wartości:
idleoznacza, że generator jest zatrzymanyactiveoznacza, że generator aktualnie pracuje albo znajduje się w fazie przerwy
Status active nie rozróżnia fazy pracy i fazy przerwy. Do ich rozróżnienia służą wyjścia bloczka.
Błędy widoczne dla użytkownika
Bloczek może pokazywać następujące komunikaty błędów:
| Kod błędu | Opis błędu |
|---|---|
Invalid edge configuration. |
Parametr input_edge jest niepoprawny albo nie został podany. |
Invalid impulses number configuration. |
Parametr impulses ma niepoprawną wartość. |
Invalid working_time configuration. |
Parametr working_time ma wartość spoza dozwolonego zakresu od 100 ms do 14 dni. |
Invalid sleeping_time configuration. |
Parametr sleeping_time ma wartość spoza dozwolonego zakresu od 100 ms do 14 dni. |
Invalid working_mode configuration. |
Parametr working_mode ma wartość inną niż dlatch, oneshot, edgereset albo leveldriven. |
Failed to create timer. |
W czasie uruchamiania generatora nie udało się utworzyć wewnętrznego timera odpowiedzialnego za odmierzanie czasu. |
Failed to start timer. |
Nie udało się uruchomić timera podczas startu generatora albo przejścia między fazą pracy i przerwy. |
Failed to stop timer. |
Nie udało się zatrzymać timera podczas wyłączania generatora. |
Komunikaty Failed to ... oznaczają wewnętrzny problem z działaniem bloczka, a nie błąd wartości podanej przez użytkownika. Jeśli taki problem występuje stale, warto sprawdzić konfigurację projektu i połączenia bloczka, a następnie zgłosić usterkę.
Przykłady działania
- Dla
impulses = 1,working_time = 1000isleeping_time = 500generator po uruchomieniu przejdzie przez fazę pracy trwającą około 1 s, następnie przez fazę przerwy trwającą około 0,5 s, po czym wróci do stanuidle. - Dla
impulses = 3generator wykona trzy fazy pracy rozdzielone trzema fazami przerwy i dopiero po zakończeniu ostatniej przerwy zatrzyma się. - Dla
impulses = 0generator będzie przechodził naprzemiennie między fazą pracy i fazą przerwy bez końca, dopóki nie otrzyma komendyresetz bloczkacommandalbo sygnału zatrzymującego zgodnego z wybranym trybem pracy. - W trybie
dlatchzinput_edge = risingpierwsze zbocze narastające uruchomi generator, a kolejne zbocze narastające zatrzyma go. - W trybie
oneshotzinput_edge = risingzbocze narastające uruchomi generator tylko wtedy, gdy jest on w stanieidle. Dalsze zbocza narastające pojawiające się podczas pracy zostaną zignorowane. - W trybie
edgeresetzimpulses = 5iinput_edge = risingkolejne zbocze narastające odebrane podczas pracy nie rozpocznie bieżącej fazy od nowa, ale przedłuży całkowity czas działania generatora przez odnowienie licznika pozostałych impulsów. - W trybie
leveldrivenwartość true uruchamia generator, a wartość false go zatrzymuje. Wartości inne niż logiczne są w tym trybie ignorowane. - Jeśli wejście bloczka nie jest do niczego podłączone, generator uruchamia się automatycznie po zakończeniu inicjalizacji projektu.