WSTĘP
Niniejszy kurs skierowany jest do wszystkich osób chcących zapoznać sią z budową i działaniem sterowników PLC. W chwili obecnej sterowanie stanowi podstawę każdej produkcji w większych i mniejszych zakładach . Ze względu na znacznie , w ciągu ostatnich lat , zmniejszone ceny a zwiększoną różnorodność sterowników PLC stanowią one podstawę wszystkich układów sterowania automatycznego.
Opracowanie to skierowane jest w równym stopniu do początkujących w tym zakresie automatyków jak i innych osób - elektryków - mechaników , dla których wiedza o działaniu sterownika PLC jest niezbędna w pracy , czy hobbystów chcących zautomatyzować dowolne urządzenie .
Sterownik PLC
Sterownik PLC ( Programable Logic Controller ) w dosłownym tłumaczeniu oznacza Programowalny Sterownik Logiczny w wolnym tłumaczeniu Sterownik Swobodnie Programowalny czyli sterownik , którego działanie zależne jest od wprowadzonego programu i nie ma z góry narzuconego algorytmu pracy.
Na potrzeby tego opracowania przyjąć należy , że Sterownik PLC to "czarna skrzynka " , która posiada określone właściwości oraz peryferia typu wejścia i wyjścia
Wejścia - Tutaj podawane są wszystkie sygnały wchodzące do sterownika - mogą być to sygnały różnorodnego typu :
Dyskretne - przyjmujące wartości 0 lub 1
Zwykle są to sygnały napięciowe , przy czym za standart przyjęto napięcia 24 V i 230V co nie oznacza ,że nie występują inne w specjalizowanych modułach.
Analogowe - mogą przybierać dowolne wartości . Występują zarówno sygnały napięciowe jak i prądowe , podstawowe to
Prądowe od 0/4mA do 20mA , sygnał 4÷20mA został wprowadzony ze względu na umożliwienie wykrycia przerwy (awarii) pomiaru.
Napięciowe 0 ÷ 10V
Wspólną właściwością dla obu typów sygnałów analogowych jest ich rozdzielczość , którą określa się w ilości bitów których trzeba użyć do przedstawienia wartości . Tak na przykład rozdzielczość 8 bitów oznacza , że sygnał 0÷10V w sterowniku będzie "widziany" jako wartość 0 ÷ 255 , więcej o tym w rozdziale typy danych
Wyjścia - sterują urządzeniami do nich podłączonymi .Typy wyjść są podobne jak wejść tzn
Dyskretne - przyjmujące wartości 0 lub 1
w znacznej większości sterowników są to sygnały napięciowe lub bezpotencjałowe.
Tranzystorowe - elementem przełączającym jest tranzystor a napięcie zależne jest od konkretnego typu sterownika w przewżającej mierze 24 V DC
Przekaźnikowe - elementem przełączającym jest przekaźnik i jedynym ograniczeniem załączanego sygnału są parametry przekaźnika (wyjścia bezpotencjałowe )
Triaki - stosowane gdy napięcie wynosi 230V a wymagana jest duża szybkość przełączeń
Analogowe - mogą przybierać dowolne wartości . Występują zarówno sygnały napięciowe jak i prądowe ,analogicznie jak w przypadku wejść.
Sterownik - a własciwie jego środek to nic innego jak mniejszy lub większy procesor z pamięcią oraz zaimplementowany system operacyjny czyli komputer. Zadaniem tego elementu jest przetworzenie wprowadzonego programu i na podstawie stanu wejść odpowiednio zgodnie z programem ustawić wyjścia .
PODSTAWY
|
|
Typy i rodzaje danych.
W tym rozdziale opiszemy typy i zakresy danych występujących w programach . Z rozdziałem tym warto dokładnie się zapoznać , gdyż informacje tu zawarte są niezbędne przy pisaniu programów na sterowniki PLC na każdym etapie.
Typy danych
W naszym przypadku danymi są wszystkie informacje przychodzące do sterownika „I” ( wejścia cyfrowe, analogowe itd. ), wychodzące ze sterownika „Q” (wyjścia cyfrowe .... itd. ) oraz wewnętrzne sterownika „M” ( zmienne czyli markery ) .
Podstawową jednostką „miary” jest bit może on przyjmować tylko dwie wartości - 0 lub 1 kolejne jednostki składają się z odpowiedniej ilości bitów. jak w tabeli poniżej
oznaczenie |
typ danej |
ilość bitów |
zakres wartości |
opis |
BOOL |
Boolean |
1 |
0-1 |
Zmienne tego typu mogą przyjmować tylko dwie wartości czyli "0" lub "1" . |
BYTE |
ciąg 8 bitów |
8 |
nie posiada wartości numerycznej |
|
WORD |
ciąg 16 bitów |
16 |
nie posiada wartości numerycznej |
|
DWORD |
ciąg 32 bitów |
32 |
nie posiada wartości numerycznej |
|
LWORD |
ciąg 64 bitów |
64 |
nie posiada wartości numerycznej |
|
Typy zmiennych o wartości wyrażonej w systemie dziesiętnym , są to liczby całkowite ( integer ), których wartość wyliczana jest ze stanu odpowiednich bitów (konwersja z zapisu dwójkowego na zapis dziesiętny) |
||||
SINT |
short integer |
8 |
-128 : 127 |
"Krótka" liczba całkowita . |
INT |
integer |
16 |
-32 768 : 32 767 |
Liczba całkowita . |
DINT |
double integer |
32 |
-231 : (231-1) |
"Podwójna" liczba całkowita . |
LINT |
long integer |
64 |
-263 : (263-1) |
"Długa" liczba całkowita . |
USINT |
unsigned Short integer |
8 |
0 : 255 |
"Krótka" liczba całkowita nieznakowana ( przyjmuje tylko wartości dodatnie). |
UINT |
unsigned integer |
16 |
0 : 65535 |
Liczba całkowita nieznakowana ( przyjmuje tylko wartości dodatnie). |
UDINT |
unsigned double integer |
32 |
0 : (232-1) |
" Podwójna "liczba całkowita nieznakowana ( przyjmuje tylko wartości dodatnie). |
ULINT |
unsigned long integer |
64 |
0 : (264-1) |
" długa "liczba całkowita nieznakowana ( przyjmuje tylko wartości dodatnie). |
|
||||
STRING |
|
- |
- |
Dowolne znaki czyli litery i cyfry , jednak cyfry będą traktowane jako znak a nie określona wartość . |
TIME |
czas |
- |
|
typ danej występujący w timerach format zapisu T#XdXhXmXsXms gdzie X to określona wartość i kolejno d- dni, h-godziny,m-minuty, s-sekundy, ms- milisekundy |
Pamięć sterownika
Pamięć w sterowniku PLC podzielona jest na dwa główne obszary :
- Obszar pamięci programu , tutaj przechowywany jest kod wprowadzonego programu
- Obszar pamięci danych w której , przechowywane są wszystkie dane wykorzystywane przez sterownik , a dokładniej przez wprowadzony program
Sposób oznaczania i adresowania komórek pamięci przedstawia diagram poniżej :
Poniżej tabela przedstawiająca strukturę pamięci w której przechowywane są dane.
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
M0.0 |
M0.1 |
M0.2 |
M0.3 |
M0.4 |
M0.5 |
M0.6 |
M0.7 |
M1.0 |
M1.1 |
M1.2 |
M1.3 |
M1.4 |
M1.5 |
M1.6 |
M1.7 |
MB 0 |
MB 1 |
||||||||||||||
MW0 |
M4.0 |
M4.1 |
M4.2 |
M4.3 |
M4.4 |
M4.5 |
M4.6 |
M4.7 |
M5.0 |
M5.1 |
M5.2 |
M5.3 |
M5.4 |
M5.5 |
M5.6 |
M5.7 |
MB 4 |
MB 5 |
||||||||||||||
MW4 |
Jak widać w tabeli powyżej, i należy o tym zawsze pamiętać, marker nr 0 typu WORD ( MW0 ) składa się z bajtów 0 i 1 (MB0 i MB1) te z kolei z bitów 0.0 do 0.7 i 1.0 do 1.7 . , analogicznie następne MW2 , MW4 itd.
Adresując komórkę typu WORD jako adres podajemy numer „młodszego” bajta .
Wpisanie konkretnej wartości liczbowej w kodzie dziesiętnym np. 50 :
powoduje odpowiednie ustawienie bitów w bajcie MB0.0 w tym przypadku
wartość danej = 50 |
|||||||
MB 0.0 = 50 ( usint ) |
|||||||
M0.0 |
M0.1 |
M0.2 |
M0.3 |
M0.4 |
M0.5 |
M0.6 |
M0.7 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
wynikające z konwersji wartości dziesiętnej na dwójkową .
Warto zwrócić uwagę na sposób numeracji bitów , ale także zmiennych typu BYTE , WORD , która rozpoczyna się od 0. Czyli bit pierwszy w kolejności (najmłodszy) będzie miał oznaczenie np M0.0 a nie jak wydawałoby się w sposób naturalny M 0.1.Dotyczy to również pozostałych typów zmiennych.
Często popełnianym przez początkujących programistów błędem jest wpisanie wartości w bajta np. jak wyżej a potem wykorzystanie w programie bitu wchodzącego w skład tego samego bajta co powoduje zmianę jego wartości i to w sposób znaczący.
Na przykład ustawienie „1” w markerze M0.0 spowoduje zmianę wartości MB0 z 50 na 51 jednak już zmiana na „1” w markerze M0.7 zmieni wartość w MB0 na 178. Sterownik wszystkie dane zachowuje w kodzie dwójkowym i tylko w zależności od zadeklarowanego typu markera odpowiednio je przedstawia. Szerzej zajmiemy się tym zagadnieniem w rozdziale o operacjach na bitach.
Kolejną rzeczą na którą należy zwracać szczególną uwagę jest zakres wartości jakie mogą przyjmować zmienne . Jako , że każda zmienna ma określoną wartość maksymalną zdarzyć się może "przekręcenie " wartości . Na przykład dodanie 1 do zmiennej typu USINT ( 0 : 255) kiedy posiada już wartość równą 255 spowoduje ustawienie w tej zmiennej wartości 0 a nie 256
Timery
Timery ( przekaźniki czasowe ) - Funkcje realizujące zależności czasowe w sterowniku . Norma IEC 61131-3 przewiduje jako podstawowe trzy rodzaje timerów
TON Time on delay (opóźnione załączenie)
TOF Time off delay (opóźnione wyłączenie)
TP Time pulse (impuls) .
Przy pomocy tych trzech typów można zbudować właściwie każde uzależnienie czasowe . Poniżej omówimy poszczególne typy .
TON - Opóźnione załączenie ( Time ON Delay )
TON reprezentacja graficzna
TON wykres czasowy
EN - Enable - uruchomienie bloku - typ danej - BOOL
PT - Preset Time - nastawiany czas działania - typ danej - TIME
QV-Output Value - aktualnie odmierzany czas - typ danej - TIME
Q - Output - wyjście bloku - typ danej - BOOL
Działanie bloku wygląda następująco : po podaniu sygnału „1” na wejście EN rozpoczyna się odmierzanie nastawionego czasu PT po jego odmierzeniu zostaje załączone wyjście Q . Wyjście zostaje wyłączone ( deaktywowane ) w przypadku zmiany stanu na wejściu EN na „0” .
TOF- Opóźnione wyłączenie ( Time OFf Delay )
TOF reprezentacja graficzna
TOF wykres czasowy
EN- Enable - uruchomienie bloku - typ danej - BOOL
PT-Preset Time - nastawiany czas działania - typ danej - TIME
QV - Output Value - aktualnie odmierzany czas - typ danej - TIME
Q- Output - wyjście bloku - typ danej - BOOL
Działanie bloku wygląda następująco : po podaniu sygnału „1” na wejście EN zostaje załączone wyście Q po zmianie sygnału z „1” na „0” rozpoczyna się odmierzanie nastawionego czasu PT . Wyjście Q zostaje wyłączone ( deaktywowane ) dopiero po odliczeniu nastawionego czasu .
TP- impuls czasowy ( Time Pulse )
TP reprezentacja graficzna
TP wykres czasowy
EN - Enable - uruchomienie bloku - typ danej - BOOL
PT- Preset Time - nastawiany czas działania - typ danej - TIME
QV- Output Value - aktualnie odmierzany czas - typ danej - TIME
Q - Output - wyjście bloku - typ danej - BOOL
Działanie bloku wygląda następująco : po podaniu sygnału „1” na wejście EN zostaje załączone wyjście Q oraz rozpoczyna się odmierzanie nastawionego czasu PT . Wyjście zostaje wyłączone ( deaktywowane ) po odliczeniu nastawionego czasu
Przykład1 : Proste załączenia wyjścia z opóźnieniem.
widok programu
Sposób działania : W przykładzie tym po podaniu sygnału „1” na wejście I 0.0 rozpoczęte zostanie odmierzanie czasu w timerze T 01 , po jego upłynięciu zostanie załączone wyjście Q 0.0 . Warto zauważyć , że wyjście nie zostanie załączone jeżeli czas trwania sygnału „1” na wejściu I 0.0 nie będzie odpowiednio długi - większy niż ustawiony w timerze T 0.1
Przykład 2 :
Kombinacja dwóch rodzaji timer'ów. Załączenie z opóźnieniem na określony czas, praca cykliczna.
widok programu
Przebiegi czasowe
Sposób działania : W przykładzie tym po podaniu sygnału „1” na wejście I 0.0 rozpoczęte zostanie odmierzanie czasu w timerze T 01 , po jego upłynięciu zostanie załączone wyjście Q 0.0 i jednocześnie zacznie być odmierzany czas w timerze T 02 po upłynięciu którego wyjście Q 0.0 zostanie wyłączone i dopóki wejście I0.0 będzie aktywne cykl będzie się powtarzał od początku. Przerwanie działania możliwe jest tylko w momencie odmierzania czasu przez timer T01 ( Q0.1 wyłączone) , jeżeli wyjście Q0.1 zostanie załączone, pozostanie już takie do upłynięcia czasu w T02.
Poniżej przeanalizujemy działanie powyższego programu krok po kroku , a właściwie cykl po cyklu .
UWAGA! Ilustracje poniżej pokazują stan sterownika na zakończenie pojedynczego cyklu pracy tzn po wykonaniu programu tuż przed ustawianiem wyjść .
Linia czerwona oznacza stan wysoki czyli „1” .
Linia czarna oznacza stan niski czyli „0”
|
Stan 0 : Sterownik pracuje i wykonuje program , lecz nie podano sygnału na wejście I0.0 i nie ma żadnych efektów. |
|
Stan 1 : Podano sygnał „1” na wejście I0.0. Zostaje on przeniesiony dalej przez zanegowaną bramkę wyjścia timera T02 (T02.Q=0) w ten sposób uaktywniając timer T01 (T01.EN=1), który rozpoczyna pomiar nastawionego czasu . Wyjście T01.Q pozostaje niezałączone . Ten stan trwa do momentu doliczenia przez timer T01 ustawionego czasu. |
|
Stan 2 : Po doliczeniu czasu przez timer T01 zostaje ustawione jego wyjście (T01.Q=1) co jednocześnie uruchamia timer T02 ( T02.EN=1) , który załącza swoje wyjście ( T02.Q=1) oraz wyjście Q 0.1 sterownika . |
|
Stan 3 : Po załączeniu wyjścia timera T02 zostaje wyłączony timer T01 (T02.Q=1), a timer T02 rozpoczyna pomiar czasu. |
|
Stan 4 : Po odmierzeniu czasu przez timer T02 jego wyjście zostaje wyłączone co wyłącza równocześnie wyjście sterownika Q 0.1. |
Podstawowe bloki funkcyjne
Komparatory ( Comparators ) - Funkcje porównujące między sobą wartości liczbowe . W sterownikach PLC występuje pięć takich funkcji , omówimy je kolejno.
LT - Less Then - Mniejsze Niż
Dla wartości IN1 mniejszej od wartości IN2 wyjście Q funkcji zostanie ustawione na "1"
LE - Less or Equel - Mniejsze lub Równe
Dla wartości IN1 mniejszej lub równej wartości IN2 wyjście Q funkcji zostanie ustawione na "1"
GT - Great Then - Większe Niż
Dla wartości IN1 większej od wartości IN2 wyjście Q funkcji zostanie ustawione na "1"
GE - Great or Equel - Większe lub Równe
Dla wartości IN1 większej lub równej wartości IN2 wyjście Q funkcji zostanie ustawione na "1"
EQ - Equel - Równe
Dla wartości IN1 równej wartości IN2 wyjście Q funkcji zostanie ustawione na "1"
UWAGA : Przy używaniu funkcji EQ ( Równe ) należy pamiętać o cyklicznym odczytywaniu wartości z wejść przez sterownik . Może się zdarzyć , że wartość mierzona "przeskoczy" wartość zadaną tzn. po pierwszym odczycie wartość mierzona będzie równa np. 120 a po drugim 125 i wtedy sterownik przy wartości zadanej równej 123 jej nie "zobaczy" , spowoduje to nie przewidywalne działanie programu, a właściwie pominięcie warunku w programie ( i to również można wykorzystać) .
Przykład 1:Sterowanie napełnianiem zbiornika z analogowym (ciągłym) pomiarem poziomu .
Pomiar poziomu w zbiorniku realizowany jest poprzez wejście analogowe IA0 , poziom załączenia ustawiony na 50 a poziom wyłączenia na 100.
Działanie programu wygląda następująco :
Przy poziomie poniżej 50 zadziała komparator CP1 ustawiając swoje wyjście na "1" co spowoduje ustawienie wyjścia sterownika Q0.1 na "1" na sztywno (S) . Wyjście Q0.1 pozostanie załączone do momentu kiedy nie zadziała komparator CP2. Po przekroczeniu nastawionego poziomu 100 komparator CP2 ustawi swoje wyjście na "1" co spowoduje RESET ( wyłączenie ) wyjścia Q0.1
Analizując powyższy program warto zwrócić uwagę na to , że wiodącym (priorytetowym) jest WYŁĄCZENIE ( Reset) wyjścia Q0.1 , czyli zawsze po przekroczeniu wartości zadanej w CP2 (CP2.Q=1) zostanie wyłączone wyjście sterownika Q0.1 .
Uwaga praktyczna 1 : Należy pamiętać w tak prostym programie o odpowiednim ustawieniu wartości zadanych ( CP1.IN2 i CP2.IN2) czyli wartość zadanej dla CP1 - załączenie musi być mniejsza niż wartość zadana CP2 - wyłączenie , w innym przypadku wyjście sterownika Q0.1 zostanie załączone dla spełnionego warunku CP1.Q=1 i takim pozostanie , czyli po załączeniu nigdy nie wyłączy się wyjście sterownika.
Uwaga praktyczna 2 : Z kolei przy poprawnie ustawionych wartościach zadanych CP1.IN2 > CP2.IN2 ale zbyt małej różnicy ( histerezie ) pomiędzy nimi w stosunku do możliwych nie wymuszonych zmian wartości mierzonej np. falowanie cieczy w zbiorniku spowodujemy zbyt częste ząłączanie/wyłączanie wyjścia Q0.1
Wartością mierzoną w przykładzie 1 jest poziom cieczy w zbiorniku , jednak zmiana z układu napełniania zbiornika z cieczą na układ utrzymania ciśnienia itp. nie powoduje zmian w programie a tylko w podłączonych urządzeniach .
Liczniki- Counters
Liczniki- Counters - Funkcje umożliwiające zliczanie impulsów w sterownikach PLC . Mogą to być impulsy pochodzące z obiektu podłączone do wejść sterownika , ale również generowane wewnętrznie w programie .
W tym rozdziale opisane zostały trzy typy liczników występujących w normie IEC 61131-3 :
CTU - CounT Up - zliczanie w górę
CTD - CounT Down zliczanie w dół
CTUD - CounT Up / Down zliczanie w górę i dół
We wszystkich licznikach wartość początkowa CV ( wartość aktualna ) wynosi "0"
CTD - CounT Down - Licznik zliczający w dół
CTD Reprezentacja graficzna
CD - Count Down - wejście zliczające impulsy - typ danej BOOL
LPV - Load Preset Value - załadowanie wartości początkowej - typ danej BOOL
PV - Preset Value - Nastawiana wartość początkowa licznika - typ danej INT ( Integer)
Q - wyjście sygnalizujące osiągnięcie przez licznik wartości "0" - typ danej BOOL
CV - Current Value - aktualna wartość licznika - typ danej INT ( Integer)
Działanie : Po podaniu sygnału na wejście LPV bloku, zostanie przepisana wartość z wejścia PV ( wartość nastawy ) do licznika , następnie każdy impuls podawany na wejście CD spowoduje zmniejszenie wartości licznika o "1" co będzie widoczne na wyjściu CV ( wartość aktualna). Wyjście Q zostanie ustawione na "1" w momencie gdy wartość CV osiągnie wartość równą lub mniejszą od "0" czyli licznik doliczy do zadanej ilości impulsów .
CTU - CounT UP - Licznik zliczający w górę
CTU Reprezentacja graficzna
CU - Count UP - wejście zliczające impulsy (BOOL)
R - Reset - kasowanie licznika (BOOL)
PV - Preset Value - Nastawiana wartość licznika (INT)
Q - wyjście sygnalizujące osiągnięcie przez licznik nastawionej wartości ( BOOL )
CV - Current Value ( INT) - aktualna wartość licznika .
Działanie : Po podaniu sygnału na wejście zliczające CU wartość licznika zostaje zwiększona o "1" . Wyjście Q zostanie ustawione na "1" w chwili gdy wartość aktualna licznika CV przekroczy wartość nastawioną PV . W odróżnieniu od licznika zliczającego w dół wartość nastawiana PV przepisywana jest w licznik " automatycznie" w momencie jego wywołania. Wejście R ( Reset) służy do kasowania wartości aktualnej licznika do "0" w momencie pojawienia się na nim sygnału "1"
CTUD - CounT Up Down - Licznik zliczający w górę i w dół
CTUD reprezentacja graficzna
CU - Count Up - wejście zliczające impulsy w góre -dodaj- (BOOL)
CD - Count Down - wejście zliczające impulsy w dół -odejmuje- (BOOL)
LPV - Load Preset Value - załadowanie wartości początkowej (BOOL)
R - Reset - kasowanie licznika (BOOL)
PV - Preset Value - Nastawiana wartość licznika (INT)
QU - wyjście sygnalizujące osiągnięcie przez licznik nastawionej wartości ( BOOL )
QD - wyjście sygnalizujące osiągnięcie przez licznik wartości "0" ( BOOL )
CV - Current Value ( INT) - aktualna wartość licznika .
Działanie :Po podaniu sygnału na wejście zliczające CU wartość licznika zostaje zwiększona o "1" , podanie sygnału na wejście CD powoduje zmniejszenie wartości licznika o "1" . Wyjście QU zostanie ustawione na "1" w chwili gdy wartość aktualna licznika CV przekroczy wartość nastawioną PV , wyjście QD zostanie ustawione na "1" dla wartości aktualnej licznika równej "0" .W momencie pojawienia się "1" na wejściu LPV zostanie załadowana wartość początkowa ustawiana na wejściu PV . Wejście R ( Reset) służy do kasowania wartości aktualnej licznika do "0" bez względu na pozostałe warunki.
UWAGI
Należy w tym przypadku pamiętać o cykliczności pracy sterownika PLC tzn odczyt wejść -> wykonanie programu -> ustawienie wyjść . Wykonywanie programu trwa określony czas i mimo , że jest on bardzo krótki to w przypadku liczników bardzo istotny Liczniki odczytują zmianę stanu wejścia z 0 na 1 czyli zbocze narastające sygnału , tak że stan sygnału wejściowego musi zmienić się z powrotem na "0" aby "zaliczony" został kolejny impuls . Ilustruje to diagram poniżej gdzie: tp to czas wykonywania programu a CU stan wejścia bloku CTU ( zliczanie w górę )
Jak widać sygnały zbyt krótkie mogą nie zostać policzone przez licznik , dlatego należy zakładać , że impuls na wejściu licznika powinien trwać przynajmniej dwa razy dłużej niż cykl programu , to samo dotyczy przerwy między zliczanymi sygnałami .
Przykład :
tp - czas cyklu programu sterownika
ti - minimalny czas impulsu zliczanego
tpi - minimalny czas przerwy między impulsami
fi - częstotliwość impulsów wejściowych
ti >= 2 x tp
tpi >= 2 x tp
Czyli dla czasu wykonywania programu tp = 20 [ms] minimalny czas trwania impulsu (ti) wynosi 40 [ms] i taki sam minimalny czas dla przerwy pomiędzy impulsami tpi >= 40[ms] . Co przekłada się bezpośrednio na częstotliwość impulsów wejściowych , która w tym przypadku ( tp=20[ms] ) nie może przekroczyć fi >= 1/( ti + tpi) 12,5 Hz.
Jednak przy wolniej działających sterownikach lub większych programach gdzie czas cyklu wynosi np. 150 [ms] maksymalna częstotliwość wynosi już tylko 1,6 Hz .
Jak z powyższego widać wykorzystanie "zwykłych" liczników w procesach szybko zmiennych ( np. pozycjonowanie ) nie wchodzi w rachubę , do tego służą tzw. liczniki szybkie umożliwiające zliczanie impulsów w trakcie wykonywania przez sterownik programu . Szybkim licznikom poświęcimy osobny rozdział.
Przykład 1 :
Zliczanie osób wchodzących/wychodzących z/do budynku za pomocą np. barier optycznych .
Program umożliwia śledzenie ilości osób obecnych w budynku przy czym :
I0.0 to impuls z bariery 1 zliczającej osoby wchodzące .
I0.1 to impuls z bariery liczącej osoby wychodzące .
Ilość osób obecnych widoczna jest w markerze MB0 .
W przypadku przekroczenia ilości osób , które mogą jednocześnie przebywać w budynku uruchomione zostanie wyjście Q0.0 na przykład jako alarm. Maksymalna ilość osób ustawiana jest na wejściu PV bloku CTUD w tym przypadku wartość ustawiona jest jako stała ( constans) na 100. Resetowanie licznika możliwe jest za pomocą wejścia I0.2.
Dla powyższego przykładu warto pamiętać , iż dla wyjścia CV ( wartość aktualna ) zastosowano marker typu BAJT ( MB - USINT ) , którego wartość maksymalna wynosi 255 dlatego też wartość nastawiana PV ( w tym przypadku maksymalna liczba osób przebywających w budynku ) nie może przekroczyć tej wartości . Przy zastosowaniu, dla wyjścia CV markera typu WORD ( np. MW0 ) wielkość ta zwiększa się do 65 535 ( UINT ).