Skip to content

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 set z bloczka command uruchamia generator. Jeśli generator już pracuje, sekwencja zostaje rozpoczęta ponownie od fazy pracy, a licznik impulsów jest inicjalizowany od początku.
  • Komenda reset z bloczka command zatrzymuje 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 -> true
  • falling: reakcja na zmianę true -> false
  • both: reakcja na każdą zmianę wartości logicznej
  • true: reakcja na każdą wiadomość, której nowa wartość jest logicznym true
  • false: reakcja na każdą wiadomość, której nowa wartość jest logicznym false
  • null: reakcja na każdą wiadomość, której nowa wartość to null
  • none: 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 idle wszystkie 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:

  • idle oznacza, że generator jest zatrzymany
  • active oznacza, ż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 = 1000 i sleeping_time = 500 generator 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 stanu idle.
  • Dla impulses = 3 generator wykona trzy fazy pracy rozdzielone trzema fazami przerwy i dopiero po zakończeniu ostatniej przerwy zatrzyma się.
  • Dla impulses = 0 generator będzie przechodził naprzemiennie między fazą pracy i fazą przerwy bez końca, dopóki nie otrzyma komendy reset z bloczka command albo sygnału zatrzymującego zgodnego z wybranym trybem pracy.
  • W trybie dlatch z input_edge = rising pierwsze zbocze narastające uruchomi generator, a kolejne zbocze narastające zatrzyma go.
  • W trybie oneshot z input_edge = rising zbocze narastające uruchomi generator tylko wtedy, gdy jest on w stanie idle. Dalsze zbocza narastające pojawiające się podczas pracy zostaną zignorowane.
  • W trybie edgereset z impulses = 5 i input_edge = rising kolejne 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 leveldriven wartość 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.