Cześć! Dzisiaj zajmiemy się wykonaniem kolejnego punktu założeń projektowych. Zajmiemy się punktem 16, czyli jeżeli linia pracuje w trybie manual to biała dioda LED znajdująca się pomiędzy przyciskami start stop powinna świecić jasnością 50%. Do wykonania tego punktu będzie potrzebny PWM, ponieważ musimy sterować jasnością świecenia diody, która jest fizycznie podłączona do sterownika PLC.
PWM
Do wyjścia cyfrowego w ostatnim wpisie przedstawiłem krótki opis teoretyczny na temat wyjść impulsowych sterowników i teraz zajmiemy się praktycznym wykorzystaniem tego co ostatnio czytałeś.
Konfiguracja sprzętowa
Jak zapewne pamiętasz uruchomienie wyjścia PWM polega na jego skonfigurowaniu w ustawieniach sprzętowych sterownika, czyli przechodzimy do konfiguracji sprzętowej CPU (zakładka Device configuration z drzewa projektu). Następnie zaznaczamy sterownik, aby dookoła była niebieska ramka. W oknie nadzoru wybieramy Properties i przechodzimy do zakładki Pulse generators i ustawimy PTO1/PWM1, czyli 1 kanał. Więc aby dział PWM, aby wyjście cyfrowe było generatorem PWM to należy aktywować ten generator, czyli zaznaczamy w polu Enable kwadrat przy Enable this pulse generator. W polu Project information zmienimy nazwę z Pulse_1 na PWM_WhiteLED, wówczas w zakładce Device overview zmieni się opis tego kanału z domyślnej nazwy Pulse1 na PWM_WhiteLED.
Wracamy do dalszej konfiguracji. Najważniejsze pole to Pulse Option, ponieważ tutaj konfigurujemy wszystkie najważniejsze ustawienia, czyli typ sygnału to PWM.
Kolejna opcja to podstawa czasu, która będzie służyła do ustawienia częstotliwości. Są milisekundy i microsekundy. Nam wystarczą milisekundy, ponieważ aby zmiana jasności świecenia była płynna to dla ludzkiego oka wystarczy częstotliwość 100Hz, więc taką częstotliwość uzyskamy spokojnie przy ustawie czasu milisekundach.
Następne pole Pulse Duratione Format to format jaki jest zadawane wypełnienie. Będziemy wypełnienie zadawać w procentach od 0 do 100, więc zostawiamy hundred. Chcemy uzyskać 100Hz, więc w polu Cycle time wpisujemy 10. 10 milisekund to jest 100Hz.
W pole Initial pulse duration wpisujemy 0, aby po włączeniu sterownika dioda nie świeciła, czyli żeby była wyłączona, więc tutaj ustawiamy wypełnienie na 0. Pole Hardware output tu właśnie zostało ustawione na wyjście o adresie Q5.0 to jest właśnie to wyjście, gdzie została podłączona dioda LED, więc to zostawiamy bez zmian.
I ostatnie pole Output address to jest adres pamięci sterownika do którego należy wpisać wartość wypełnienia, czyli w naszym przypadku pod ten adres będziemy wpisywać wartości z przedziału od 0 do 100, aby zmieniać wypełnienie, czyli jasność świecenia naszej diody LED. Ten adres 1000 jest także widoczny w zakładce Device overview właśnie przy Pulse_WhiteLED. Czyli zostały zarezerwowane 2 bajty (przedział pamięci od 1000 do 1001). I my za chwilę skorzystamy z tego adresu.
Więc konfigurację sprzętową mamy zrobioną, możemy zapisać projekt i klikamy Save Project w pasku narzędzi i teraz na potrzeby projektu klikamy prawym na sterownik i z rozwiniętego Menu kontekstowego wybieramy Compile i następnie Hardware rebuild all. Projekt został skompilowany, nie ma błędów, więc możemy teraz konfigurację sprzętową wgrać do sterownika, czyli ponownie klikamy prawym na sterownik w drzewie projektu, wybieramy Download to device i następnie wybieramy Hardware configuration. Podczas wgrywania sterownik przejdzie do trybu Stop, ponieważ wgrywamy konfigurację sprzętową, więc naciskamy przycisk Load. Konfiguracja sprzętowa została wgrana, uruchamiamy sterownik zaznaczając Start all w oknie Load results i następnie klikamy Finish.
Kod programu
Więc konfiguracja sprzętowa została wgrana i już wyjście impulsowe jest aktywne można z niego korzystać w kodzie programu, ale na wyjściu nie pojawił się jeszcze żaden sygnał, ponieważ trzeba jeszcze programowo uaktywnić wyjście impulsowe. Do tego celu służy specjalna funkcja, która nazywa się CTRL _PWM() i musimy z tej funkcji skorzystać, aby zrealizować punkt 16 z założeń projektowych. Ta funkcję CTRL_PWM() trzeba wywołać z jednej funkcji, która jest już wywołana z w bloku OB1. Więc my przejdziemy do funkcji LOG_ClassLogic() z naszego projektu i na samym końcu zrobimy wywołanie tej funkcji. Więc funkcja CTRL_PWM() znajduje się w karcie instrukcji w zakładce Extended instruction w katalogu Pulse. Więc tą funkcję można myszką przeciągnąć do obszaru roboczego lub po prostu wpisać nazwę w edytorze. Wywołamy funkcję CTRL_PWM(), czyli wpisujemy jej nazwę. Wybieramy CTRL_PWM z rozwijanej listy z listy podpowiedzi, otwieramy nawias i teraz pojawia się okno Call option czyli jest to funkcja typu FB, która potrzebuje bloku instance DB więc nadajemy nazwę dla tego bloku CTRL_PWM_DB11 i klikamy OK.
//point 16 "CTRL_PWM_DB11"(PWM:="Local~PWM_WhiteLED", ENABLE:=TRUE);
Więc funkcja przyjmuje 2 parametry wejściowe i ma także 2 parametry wyjściowe. Parametry wyjściowe to PWM, czyli adres sprzętowy adres PWM, adres konfiguracji sprzętowej. Parametr Enable służy do aktywowania wyjścia impulsowego. Parametr Busy i Status mówią o aktualnym stanie funkcji CTRL_PWM(). Więc sprzętowy adres kanału PWM, który wykorzystujemy możemy odszukać w PLC tags. Rozwijamy ten folder i przechodzimy do PLC tags i następnie przechodzimy do zakładki System constans Jak widzisz na pozycji 18 jest Local_PWM_WhiteLED typu Hw_Pwm o adresie 265. I przejdziemy do ustawień sprzętowych sterownika tam gdzie ostatnio konfigurowaliśmy kanał PWM. Ostatnie pole to Hardware identifiecer gdzie jest właśnie adres 265, czyli to jest dokładnie ten sam adres. I trzeba go teraz przypisać do funkcji CTRL_PWM() więc wystarczy, że wpiszemy Local i z systemu podpowiedzi możemy wybrać Local_PWM_WhiteLED. Do następnego parametru Enable przypisujemy TRUE, czyli żeby ten kanał był aktywny. Do pozostałych parametrów nic nie musimy przypisywać, ponieważ jest to funkcja typu FB, więc nie wszystkie parametry trzeba przypisywać jak i zmienne. Więc za średnikiem klikamy Enter i aktywacje kanału PWM mamy zrobioną.
Teraz pozostało nam napisać kod, który będzie sterował jasnością świecenia diody LED w zależności od wybranego trybu pracy. Więc sterowanie podświetleniem przycisków zostało zawarte w funkcji LOG_BacklightButton(), która jest wywołana w funkcji LOG_ClassLogic() więc przechodzimy do tej funkcji. W drzewie projektu katalogu 03_Logic czyli w warstwie logicznej w grupie Light znajduje się właśnie funkcja LOG_BacklightButton(). W tym miejscu mamy wykorzystaną diodę White, więc teraz ten kod trzeba zmodyfikować, czyli połączyć punkt 14 z punktem 16, więc w komentarzu wpisujemy po przecinku 16. Kod przedstawiono poniżej
//point nr 14, 16 IF ("MAN_LineMode".StartLine) THEN IF ("MAN_LineMode".Manual) THEN "Channel1_WhiteLED" := 50; ELSE "Channel1_WhiteLED" := 100; END_IF; ELSE "Channel1_WhiteLED" := 0; END_IF;
Jeżeli linia została uruchomiona to należy włączyć diodę LED z odpowiednią jasnością w zależności od trybu pracy. Wykorzystamy instrukcję warunkową IF i sprawdzamy, czy linia została uruchomiona, czyli wykorzystujemy zmienną StartLine z bloku danych MAN_LineMode. Więc jeżeli ta zmienna wynosi 1 wtedy musimy sprawdzić w jakim trybie pracy znajduje się linia. Jeżeli linia znajduje się w trybie manualnym, więc zmienna Manual z bloku MAN_LineMode mówi o tym, wtedy diodę trzeba uruchomić z jasnością 50%. Więc teraz ten współczynnik wypełnienia trzeba gdzieś zapisać.
Zapiszemy wartość tego współczynnika do pamięci pod adres, który jest w konfiguracji sprzętowej, czyli pod adres w przedziale od 1000 do 1001, czyli pod te 2 bajty napiszemy wypełnienie. Musimy stworzyć tablicę PLC tags i tam utworzymy nową nazwę symboliczną, więc przechodzimy do drzewa projektu do PLC tags i klikamy na Add new tag table i zmieniamy nazwę na ChannelsPWM. I w tej tablicy dodajemy nową nazwę symboliczną o nazwie Channel1_WhiteLED. Są to 2 bajty, więc w polu Data type wpisujemy Word i teraz adres jest to pamięć dla wyjść w kolumnie Address, więc wpisujemy QW1000. I w ten sposób mamy utworzoną nazwę symboliczną, która jest powiązana z adresem w pamięci, gdzie należy wpisywać wartość współczynnika wypełnienia.
Teraz wracamy do funkcji LOG_BacklightButton() i wykorzystujemy nową utworzoną nazwę symboliczną Channel1_WhiteLED i teraz przepisujemy wartość wypełnienia 50%, czyli 50 (linia kodu numer 4). Więc jeżeli linia znajduje się w trybie manualnym to dioda świeci z jasnością 50%. W innym przypadku linia znajduje się w trybie automatycznym, to wtedy dioda ma świecić na 100%, więc to zostało zapisane w linii kodu numer 6. Kończymy instrukcję warunkową IF i teraz piszemy ELSE. Jeżeli linia nie jest uruchomiona to diodę trzeba wyłączyć (linia kodu 9) i zakończyć instrukcję IF. Poprzednią linijkę kodu usuwamy i w ten sposób mamy zmodyfikowany kod, który realizuje punkt 14 i 16. Możemy zapisać projekt i wgrywamy kod programu do sterownika. Klikamy prawy na Program block i wybieramy Compile i następnie Software (only changes). Kod został skompilowany nie ma błędów więc możemy wgrać do sterownika.
Testowanie
Przechodzimy do FactoryIO uruchamiamy linię w trybie automatycznym, naciskamy przycisk Start i linia została uruchomiona, dioda LED świeci. Więc teraz zatrzymajmy linię poprzez naciśnięcie przycisk Stop i naciśnijmy przycisk MANUAL, aby zmienić tryb pracy na ręczny. Naciskamy przycisk Start i teraz dioda świeci z jasnością 50%.
Można też włączyć podgląd monitoring kodu w TIA Portal dla właśnie napisanego kodu. Jak widzisz warunki instrukcji warunkowej IF są spełnione. Pierwszy warunek oraz drugi warunek, więc jest wykonywana linia kodu, która odpowiada za przypisanie wartości wypełnienia 50% do kanału pierwszego wyjścia impulsowego.
W takim razie kod programu został napisany poprawnie, ponieważ linia działa zgodnie z założeniem projektowym.
Wideo
Proces pisania kodu programu możesz zobaczyć też na wideo
Projekt TIA Portal
Aktualny projekt linii transportowej możesz pobrać tutaj.
//———-
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
Kurs wideo
Więcej na temat programowania w języku SCL znajdziesz w kursie Sterownik PLC w praktyce: