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, tag2tag1, tag2, tag3tag1, tag2, ..., tag20
Niepoprawne przykłady konfiguracji wejść:
- tylko
tag1 tag2, tag3tag1, 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 sekwencjitrue (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, tag3wykryta w czasie krótszym niż time_limit powoduje aktywację wyjścia na 1 sekundę. - Sekwencja
tag1, tag3nie powoduje aktywacji, ponieważ pominięto tag2. - Sekwencja
tag1, tag2, tag2, tag3powoduje aktywację, ponieważ powtórzenie ostatnio zaakceptowanego taga jest ignorowane. - Sekwencja
tag1, tag2, tag1, tag3nie powoduje aktywacji, ponieważ nowe tag1 rozpoczyna nową sekwencję i zrywa poprzednią próbę.