Skip to content

sequence-detector

Bloczek sequence-detector służy do wykrywania sekwencji zboczy narastających pojawiających się kolejno na wejściach oznaczonych za pomocą bloczków „tag”. Po poprawnym wykryciu pełnej sekwencji bloczek emituje na swoim wyjściu impuls logiczny true -> false, a przez 1 sekundę pokazuje komunikat informujący o zakończeniu sekwencji. Bloczek może być wykorzystany na przykład do wykrywania kierunku ruchu osoby przechodzącej kolejno obok kilku czujników.

Parametry konfiguracyjne

Nazwa parametru Wartość
Maksymalny czas trwania sekwencji (time_limit) Pole numeryczne określające maksymalny czas, w którym musi zostać wykryta pełna sekwencja tag1, tag2, ..., tagN. Wartość minimalna to 0.1 sekundy, wartość maksymalna to 64800 sekund (czyli 18 godzin). Krok 0.1 sekundy.

Obsługa wejścia

Bloczek sequence-detector obsługuje wyłącznie wejścia oznaczone za pomocą bloczków „tag”. Wejścia muszą być skonfigurowane jako ciąg kolejnych tagów rozpoczynający się od tag1. Do bloczka muszą być podłączone co najmniej dwa tagi, a maksymalnie dwadzieścia tagów.

Poprawne przykłady konfiguracji wejść:

  • tag1, tag2
  • tag1, tag2, tag3
  • tag1, tag2, ..., tag20

Niepoprawne przykłady konfiguracji wejść:

  • tylko tag1
  • tag2, tag3
  • tag1, tag3
  • podłączenie do wejścia co najmniej jednego bloczka innego niż tag

Bloczek reaguje wyłącznie na zbocza narastające. W stanie oczekiwania czeka na zbocze narastające na wejściu tag1. Po jego wykryciu rozpoczyna odmierzanie czasu określonego parametrem time_limit i oczekuje kolejno na zbocza narastające na wejściach tag2, tag3, aż do ostatniego skonfigurowanego taga.

Zasady działania:

  • Zbocze narastające na tag1 zawsze rozpoczyna nową sekwencję i restartuje odmierzanie czasu jej trwania.
  • Powtórzenie ostatnio poprawnie zaakceptowanego taga jest ignorowane.
  • Jeśli pojawi się zbocze narastające na tagu innym niż oczekiwany kolejny tag, bieżąca próba wykrycia sekwencji zostaje anulowana.
  • Jeśli pełna sekwencja nie zostanie wykryta w czasie określonym parametrem time_limit, bloczek wraca do stanu oczekiwania.
  • Po wykryciu pełnej sekwencji bloczek emituje impuls logiczny na wyjściu i przez 1 sekundę pokazuje komunikat Sequence completed..
  • Podczas wyświetlania komunikatu Sequence completed. zbocze narastające na tag1 przerywa ten stan i natychmiast rozpoczyna zliczanie nowej sekwencji.
  • Podczas wyświetlania komunikatu Sequence completed. wszystkie zbocza narastające na wejściach innych niż tag1 są ignorowane.

Poniższa tabela opisuje znaczenie wejść:

Numer i nazwa wejścia Opis działania
tag1: Pierwszy element sekwencji. Zbocze narastające na wejściu tag1 rozpoczyna nową sekwencję i uruchamia odmierzanie czasu określonego parametrem time_limit. Jeśli bloczek aktualnie wyświetla komunikat Sequence completed. albo odmierza czas bieżącej próby, takie zdarzenie przerywa poprzedni stan i od razu rozpoczyna nową sekwencję.
tag2 ... tagN: Kolejne elementy sekwencji. Zbocza narastające na kolejnych wejściach muszą pojawiać się w prawidłowej kolejności. Powtórzenie ostatnio zaakceptowanego taga jest ignorowane. Pojawienie się taga innego niż oczekiwany kolejny powoduje anulowanie bieżącej próby wykrycia sekwencji.

Wyjścia bloczka

Bloczek posiada jedno wyjście logiczne emitujące impuls po wykryciu pełnej, poprawnej sekwencji:

  • zbocze narastające false -> true
  • bezpośrednio po nim zbocze opadające true -> false

Opis widoczny pod bloczkiem odzwierciedla jego aktualny stan:

  • Waiting for tagX. oznacza stan oczekiwania na kolejny tag sekwencji
  • Sequence completed. oznacza 1-sekundowy komunikat po poprawnym wykryciu pełnej sekwencji

Błędy zwracane przez bloczek

Bloczek sequence-detector może zwracać następujące błędy:

Kod błędu Opis błędu
Invalid time_limit configuration. Parametr time_limit jest niepoprawny. Należy ustawić wartość liczbową dodatnią z krokiem 0.1 sekundy, nie większą niż 64800 sekund.
Too many tagX connections. Do wejścia podłączono więcej niż jeden bloczek tag o tym samym numerze X.
Missing required tag connections. Do bloczka podłączono mniej niż dwa kolejne tagi rozpoczynające się od tag1.
Non-tag block connected. Do wejścia bloczka podłączono bloczek innego typu niż tag.
Missing tagX connection. W konfiguracji wejść występuje luka w numeracji tagów i brakuje kolejnego oczekiwanego taga X.
Invalid project. Wystąpił wewnętrzny problem z dostępem do projektu logiki podczas inicjalizacji bloczka.

Przykłady działania

Zakładając, że do bloczka podłączone są wejścia tag1, tag2 i tag3:

  • Sekwencja tag1, tag2, tag3 wykryta w czasie krótszym niż time_limit powoduje emisję impulsu na wyjściu oraz wyświetlenie komunikatu Sequence completed. przez 1 sekundę.
  • Sekwencja tag1, tag3 nie powoduje emisji impulsu, ponieważ pominięto tag2.
  • Sekwencja tag1, tag2, tag2, tag3 powoduje emisję impulsu, ponieważ powtórzenie ostatnio zaakceptowanego taga jest ignorowane.
  • Sekwencja tag1, tag2, tag1, tag3 nie powoduje emisji impulsu, ponieważ nowe tag1 rozpoczyna nową sekwencję i zrywa poprzednią próbę.