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 przechodzi na 1 sekundę do stanu aktywnego i wystawia na swoim wyjściu wartość true. 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 przechodzi na 1 sekundę do stanu aktywnego.
  • W stanie aktywnym zbocze narastające na tag1 przerywa aktywację i natychmiast rozpoczyna zliczanie nowej sekwencji.
  • W stanie aktywnym 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 jest aktualnie w stanie aktywnym, to takie zdarzenie przerywa aktywację 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:

  • false w stanie oczekiwania
  • true przez 1 sekundę po wykryciu pełnej, poprawnej sekwencji

Opis widoczny pod bloczkiem odzwierciedla jego aktualny stan:

  • false (waiting for tagX) oznacza stan oczekiwania na kolejny tag sekwencji
  • true (sequence active) oznacza stan aktywny 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 aktywację wyjścia na 1 sekundę.
  • Sekwencja tag1, tag3 nie powoduje aktywacji, ponieważ pominięto tag2.
  • Sekwencja tag1, tag2, tag2, tag3 powoduje aktywację, ponieważ powtórzenie ostatnio zaakceptowanego taga jest ignorowane.
  • Sekwencja tag1, tag2, tag1, tag3 nie powoduje aktywacji, ponieważ nowe tag1 rozpoczyna nową sekwencję i zrywa poprzednią próbę.