fbpx

Szkoła PLC – Wykrywanie zboczy sygnału

opadajace

Cześć! Ostatnio przedstawiłem ci funkcję do detekcji zboczy sygnału. Dzisiaj wykonamy kolejne punkty z założeń projektowych, gdzie właśnie jedna z funkcji będzie nam potrzebna. Teraz wykonamy punkt związany z sterowaniem odbiornika palet.

Wykrywanie zboczy sygnału

Detekcja zbocza narastającego jest potrzebna w punkcie numer 29. W trybie Auto odbiornik R3 powinien być aktywny na czas 2 sekund od momentu pojawienia się zbocza narastającego na czujniku D4. Więc tutaj mamy sterowanie odbiornikiem R3, ale także w punkcie 28 mamy również sterowanie odbiornikami R1 oraz R3 w trybie manualnym. I w trybie manualnym odbiorniki powinne być aktywne cały czas. Więc teraz napiszemy jedną funkcję, która będzie realizowała oba te punkty. Jak pamiętasz poprzednio w funkcji LOG ClassLogic() uruchamialiśmy odbiorniki bezpośrednio dla każdego z trybów pracy, a jeżeli linia była zatrzymana to każdy z odbiorników był wyłączony, więc to zostało już usunięte z kodu tej funkcji i teraz w warstwie Logic zajmiemy się utworzeniem funkcji, która będzie sterowała odbiornikiem.

Napiszemy jedną funkcję, a ponieważ mamy dwa odbiorniki, więc wywołamy ją dwukrotnie. Teraz do warstwy Logic dodamy nową grupę o nazwie Receiver i do tej grupy dodamy nową funkcję o nazwie LOG Receiver(). Ponieważ funkcje do detekcji zbocza wymagają bloków instance DB, więc z tego powodu utworzymy funkcję FB, aby utworzyć jeden blok instance DB. Przechodzimy do nowo utworzonej funkcji. W sekcji interfejsu utworzymy parametry wejściowe i wyjściowe. Aby przekazać do funkcji pełne informacje oraz zwrócić wynik. Więc jako parametry wejściowe będą nam potrzebne takie informacje jak stan czujnika, tryby pracy oraz informacje o tym czy linia została włączona czy nie. Więc tworzymy cztery parametry wyjściowe typu Bool o następujących nazwach:

– Sensor,
– ModeAuto,
– ModeManual,
– Startline.

I będzie nam potrzebny jeden parametr wyjściowy o nazwie Receiver typu Bool. I za pomocą tego parametru wyjściowego będziemy sterować odbiornikiem palet. Tworzymy też jedną stałą typu Time o nazwie CONST_RECEIVER_ON o wartości 2 sekund. Ponieważ w punkcie 29 mamy informację, że czas włączenia to 2 sekundy. Przechodzimy do sekcji kodu, gdzie napiszemy instrukcję realizującą punkty 28 i 29. Kod funkcji przedstawiono poniżej

IF (#ModeAuto AND #StartLine) THEN
#IEC_Timer_0_Instance(IN := #Sensor,
PT := #CONST_RECEIVER_ON,
Q => #Receiver);
ELSIF (#ModeManual AND #StartLine) THEN
#Receiver := TRUE;
ELSE
#Receiver := FALSE;
END_IF;

Zaczniemy od punktu 29. Sprawdzimy na początku za pomocą instrukcji warunkowej IF czy został wybrany tryb automatyczny oraz czy linia została włączona. Więc to zawieramy w warunku instrukcji IF i jeżeli ten warunek będzie spełniony wówczas przystąpimy do detekcji zbocza i odmierzania czasu. Ponieważ funkcje do odmierzania czasu reagują na zbocze narastające, więc możemy bezpośrednio posłużyć się tą funkcją. Aby uprościć to zadanie, to skorzystamy z timera TP, który został wywołany w miejscu na zapisanie instrukcji. Do parametrów wejściowych tego timera zostały przypisane odpowiednie zmienne oraz stała określająca wartość czasu. Do parametru wyjściowego została przypisana zmienna Receiver. Więc jeżeli ten warunek instrukcji warunkowej IF będzie spełniony, został wybrany tryb automatyczny, linia została włączona, to w tym momencie pojawienia się zbocza narastającego na czujniku nastąpi uruchomienie timera i odmierzenie czasu 2 sekund. Jeżeli natomiast linia została uruchomiona w trybie manualnym, więc wtedy warunek z linii 5 będzie spełniony. Kolejny warunek, czyli instrukcja ELSIF i tutaj jest obsługa punktu 28, czyli zgodnie z tym punktem odbiornik powinien być włączony cały czas co jest realizowane właśnie w linii 6. Jeżeli żaden z tych warunków nie jest spełniony wówczas wyłączamy odbiornik. Więc tak wygląda cały kod tej funkcji.

Teraz tą funkcję trzeba wywołać w funkcji LOG_ClassLogic(). Więc przechodzimy do funkcji LOG_ClassLogic(). I na samym końcu wykonamy wywołanie funkcji LOG_Receiver() dwukrotnie dla każdego z odbiorników. Na początku zaczniemy od odbiornika R3. W trakcie wywołania funkcji LOG Receiver należy utworzyć blok instance DB i następnie do każdego z parametrów trzeba przypisać odpowiednią zmienną lub sygnały wyjściowe. Kod przedstawiono poniżej

"LOG_Receiver_DB13"(Sensor:="D4",
ModeAuto:="MAN_LineMode".Auto,
ModeManual:="MAN_LineMode".Manual,
StartLine:="MAN_LineMode".Start,
Receiver=>"R3");

Sygnałem wyjściowym będzie czujnik D4, który przypisujemy do parametru Sensor, następnie przypisujemy tryb trybie pracy informację o tym czy linia została uruchomiona i do parametru wyjściowego Receiver przypisujemy R3, czyli sygnał sterujący bezpośrednio odbiornikiem.

I analogicznie robimy jeszcze jedno wywołanie dla odbiornika R1, czyli wywołujemy funkcję LOG_Receiver(), tworzymy nowy blog instance DB. Wywołanie przedstawiono poniżej

"LOG_Receiver_DB14"(Sensor:=FALSE,
ModeAuto:="MAN_LineMode".Auto,
ModeManual:="MAN_LineMode".Manual,
StartLine:="MAN_LineMode".Start,
Receiver=>"R1");

Ponieważ obok odbiornika R1 nie ma czujnika, więc do parametru Sensor przypisujemy wartość FALSE. Możemy także ten parametr usunąć ponieważ jest to funkcja FB, więc nie trzeba do wszystkich parametrów przypisywać zmiennych lub tagów . I do parametru wyjściowego Receiver przypisujemy tym razem R1.

Testowanie

Jeżeli mamy to wszystko zrobione kompilujemy kod programu i wgrywamy do sterownika. Jak widzisz kod programu został wgrany wszystkie blogi są na zielono. Przejdźmy do Faktory IO i sprawdźmy jak teraz działa linia. Linia jest uruchomiona w trybie automatycznym, naciskamy przycisk Start podłączony fizycznie do sterownika PLC. Po naciśnięciu przycisku palety są przenoszone przez transporter, i jak się domyślasz odbiornik R3 nie jest włączony. Dopiero po wykryciu palety przez czujnik D4 nastąpiło uruchomienie odbiornika R3. Jak widzisz palety są odbierane z linii, więc kod programu działa dobrze. Możemy linię zatrzymać i uruchomić tryb manualny. Uruchamiamy linię, palety jadą w kierunku odbiornika R3. Jak widzisz są usuwane z niej. Zatrzymamy linię i uruchomimy drugi kierunek, więc musimy potencjometrem przekręcić w prawo. Ponownie uruchamiamy linię. Jak widzisz palety jadą w kierunku odbiornika R1. Oba odbiorniki są teraz uruchomione. Można stwierdzić, że kod programu, który został teraz napisany działa poprawnie.

Praca domowa

Wykorzystaj funkcję do detekcji zbocza opadającego. Gdy pojawi się takie zbocze, rozpocznij odmierzanie czasu.

Wideo

Proces pisania kodu programu możesz zobaczyć też na wideo

//———-
Licencja FACTORY I/O wypożyczona dzięki uprzejmości firmy Encon-Koester Sp. z o. o. Sp. K.
Encon-Koester Sp. z o. o. Sp. k.
ul. Gagarina 4
54-620 Wrocław

ec

Kurs wideo

Więcej na temat programowania w języku SCL znajdziesz w kursie Sterownik PLC w praktyce:

pl-usb-1p1-tia-1200-scl_sterownik-plc_w-praktyce-1

 

Podziel się tym wpisem na:
  • Facebook
  • Google Bookmarks
  • Twitter
  • Wykop

Pozostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Newsletter - Zapisz się i jako pierwszy otrzymasz najnowsze informacje