{"id":14938,"date":"2022-10-10T11:19:22","date_gmt":"2022-10-10T09:19:22","guid":{"rendered":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/?p=14938"},"modified":"2024-03-12T18:23:28","modified_gmt":"2024-03-12T17:23:28","slug":"funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10","status":"publish","type":"post","link":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/","title":{"rendered":"Funkcja, blok funkcyjny, program \u2013 zmodyfikuj program w Codesys dla lepszej funkcjonalno\u015bci | Kurs programowania w Codesys odc. 10"},"content":{"rendered":"\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"dowiesz-sie\">\n<h3>Z tego artyku\u0142u dowiesz si\u0119:<\/h3>\n<ul class=\"bulleted\">\n<li>czym jest obiekt typu POU,<\/li>\n<li>jakie s\u0105 typy obiekt\u00f3w w \u015brodowisku Codesys,<\/li>\n<li>jak jednostki organizacyjne wp\u0142ywaj\u0105 na budow\u0119 aplikacji.<\/li>\n<\/ul>\n<\/div>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Zapraszamy na kolejny odcinek naszego kursu. Dotyczy on funkcji, blok\u00f3w funkcyjnych oraz program\u00f3w w \u015brodowisku Codesys. Znajomo\u015b\u0107 zastosowa\u0144 i funkcjonalno\u015bci tych obiekt\u00f3w organizacyjnych jest niezwykle przydatna podczas organizacji projektu. Jednostki organizacyjne pozwalaj\u0105 zwi\u0119kszy\u0107 przejrzysto\u015b\u0107 aplikacji, kt\u00f3r\u0105 tworzysz oraz usprawni\u0107 jej dzia\u0142anie poprzez szereg funkcjonalno\u015bci, zale\u017cnych od rodzaju obiektu.<\/p>\n\n\n\n<div class=\"dowiesz-sie\" style=\"margin-top:40px; margin-bottom:40px\">\n<a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/kurs-programowania-w-codesys\/\"><h3>Kurs programowania w Codesys<\/h3><\/a>\n\n<h4 style=\"font-size:20px; margin-top:25px;\">Cz\u0119\u015b\u0107 I \u2013 Podstawowe funkcjonalno\u015bci \u015brodowiska Codesys<\/h4>\n<a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/jak-stworzyc-program-pierwsze-kroki-w-codesys-kurs-programowania-w-codesys-odc-1\/\">1. Pierwsze kroki w Codesys. Jak stworzy\u0107 program?<\/a><br\/>\n<a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/pierwsze-podlaczenie-i-przygotowanie-codesys-do-pracy-ze-sterownikiem-plc-kurs-programowania-w-codesys-odc-2\/\">2. Pierwsze pod\u0142\u0105czenie i przygotowanie Codesys do pracy ze sterownikiem PLC.<\/a><br\/>\n<a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/jezyk-drabinkowy-ld-kurs-programowania-w-codesys-odc-3\/\">3. J\u0119zyk drabinkowy (LD).<\/a><br\/>\n<a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/typy-danych-w-codesys-rodzaje-zmiennych-sposoby-ich-tworzenia-kurs-programowania-w-codesys-odc-4\/\">4. Typy danych w Codesys, rodzaje zmiennych, sposoby ich tworzenia.<\/a><br\/>\n<a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/jezyk-schematow-blokowych-fbd-kurs-programowania-w-codesys-odc-5\/\">5. J\u0119zyk schemat\u00f3w blokowych (FBD).<\/a><br\/>\n<a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/tworzenie-podstawowej-wizualizacji-hmi-kurs-programowania-w-codesys-odc-6\/\">6. Tworzenie podstawowej wizualizacji HMI.<\/a><br\/>\n<a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/jezyk-strukturalny-st-kurs-programowania-w-codesys-odc-7\/\">7. J\u0119zyk strukturalny (ST).<\/a><br\/>\n<a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/diagnostyka-w-codesys-jak-sprawdzac-dzialanie-oprogramowania-i-sterownika-kurs-programowania-w-codesys-odc-8\/\">8. Diagnostyka w Codesys \u2013 jak sprawdza\u0107 dzia\u0142anie oprogramowania i sterownika?<\/a><br\/>\n<a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/jezyk-blokow-funkcyjnych-cfc-kurs-programowania-w-codesys-odc-9\/\">9. J\u0119zyk blok\u00f3w funkcyjnych (CFC).<\/a><br\/>\n<a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/\">10. Funkcja, blok funkcyjny, program \u2013 zmodyfikuj program w Codesys dla lepszej funkcjonalno\u015bci.<\/a><br\/>\n<h4 style=\"font-size:20px; margin-top:25px;\">Cz\u0119\u015b\u0107 II \u2013 Zaawansowane funkcje i mo\u017cliwo\u015bci \u015brodowiska Codesys<\/h4>\n<a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/komunikacja-mqtt-jak-skonfigurowac-w-codesys-kurs-programowania-w-codesys-odc-11\/\">11. Komunikacja MQTT \u2013 jak skonfigurowa\u0107 w Codesys?<\/a><br\/>\n<a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/komunikacja-ethercat-konfiguracja-i-przykladowa-aplikacja-kurs-programowania-w-codesys-odc-12\/\">12. Komunikacja EtherCAT \u2013 konfiguracja i przyk\u0142adowa aplikacja.<\/a><br\/>\n<a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/softmotion-synchronizacja-serwonapedow-przy-pomocy-sterownika-plc-kurs-programowania-w-codesys-odc-13\/\">13. Softmotion \u2013 synchronizacja serwonap\u0119d\u00f3w przy pomocy sterownika PLC.<\/a><br\/>\n<a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/komunikacja-modbus-rtu-i-tcp-ip-w-srodowisku-codesys-kurs-programowania-w-codesys-odc-14\/\">14. Komunikacja Modbus RTU i TCP\/IP w \u015brodowisku Codesys.<\/a><br\/>\n<a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/tworzenie-projektow-w-codesys-ze-sterownikami-bezpieczenstwa-safety-architektura-systemu-bezpieczenstwa-kurs-programowania-w-codesys-odc-15\/\">15. Tworzenie projekt\u00f3w w Codesys ze sterownikami bezpiecze\u0144stwa Safety: architektura systemu bezpiecze\u0144stwa.<\/a><br\/>\n<a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/programowanie-sterownika-bezpieczenstwa-w-codesys-kurs-programowania-w-codesys-odc-16\/\">16. Programowanie sterownika bezpiecze\u0144stwa w Codesys.<\/a><br\/>\n<a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/integracja-sterownika-plc-z-systemem-scada-w-codesys-kurs-programowania-w-codesys-odc-17\/\">17. Integracja sterownika PLC z systemem SCADA w Codesys.<\/a><br\/>\n<a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/konfiguracja-maszyny-cnc-z-wykorzystaniem-sterownika-plc-obsluga-g-code-kurs-programowania-w-codesys-odc-18\/\">18. Konfiguracja maszyny CNC z wykorzystaniem sterownika PLC \u2013 obs\u0142uga G-Code.<\/a><br\/>\n\n<h4 style=\"font-size:20px; margin-top:25px;\">Dodatkowe materia\u0142y i lekcje dla kursant\u00f3w:<\/h4>\n<a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/jak-stworzyc-wirtualny-serwonaped-i-przetestowac-jego-dzialanie-w-srodowisku-codesys-pierwsze-kroki\/\" target=\"_blank\" rel=\"noopener\">1. Jak stworzy\u0107 wirtualny serwonap\u0119d w Codesys? Instrukcja krok po kroku.<\/a><br\/>\n<a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/przykladowa-aplikacja-codesys-w-jezyku-st-i-ld-napelnianie-i-oproznianie-zbiornikow-wraz-z-alarmowaniem\/\" target=\"_blank\" rel=\"noopener\">2. Przyk\u0142adowa aplikacja Codesys w j\u0119zyku ST i LD: nape\u0142nianie i opr\u00f3\u017cnianie zbiornik\u00f3w wraz z alarmowaniem.<\/a><br\/>\n\n<h4 style=\"font-size:20px; margin-top:25px;\">Najcz\u0119\u015bciej zadawane pytania:<\/h4>\n\n<a href=\"https:\/\/www.astor.com.pl\/oferta\/automatyzacja\/sterowanie\/sterowniki-plc\/astraada-one-modular.html#faq\" target=\"_blank\" rel=\"noopener\">Sprawd\u017a odpowiedzi na najcz\u0119\u015bciej zadawane pytania dotycz\u0105ce \u015brodowiska Codesys.<\/a><br\/>\n\n<\/div>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Czym jest POU &#8211; Program Organization Unit?<\/h2>\n\n\n\n<p>Obiekt typu POU jest jednostk\u0105 organizacyjn\u0105 programu w projekcie. Kod \u017ar\u00f3d\u0142owy aplikacji sterownika jest zapisywany w tego typu obiektach. W \u015brodowisku Codesys istniej\u0105 trzy typy jednostek organizacyjnych:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Program<\/li>\n\n\n\n<li>Funkcja<\/li>\n\n\n\n<li>Blok funkcyjny<\/li>\n<\/ul>\n\n\n\n<p>Model oprogramowania IEC 61131-3, z programami, blokami funkcyjnymi i funkcjami do tworzenia projekt\u00f3w PLC, zapewnia wydajne programowanie, umo\u017cliwiaj\u0105c kopiowanie i ponowne wykorzystanie blok\u00f3w programowych, kt\u00f3re zosta\u0142y ju\u017c wdro\u017cone i przetestowane w innym miejscu lub zidentyfikowanie i dezaktywowanie ich w celu rozwi\u0105zania problem\u00f3w.<\/p>\n\n\n\n<p>Jak wi\u0119c doda\u0107 jedn\u0105 z jednostek do aplikacji? Otw\u00f3rz drzewko projektu i naci\u015bnij prawym przyciskiem myszy opcj\u0119 Application. Uka\u017ce ci si\u0119 pasek funkcji. Wybierz opcj\u0119 Add object, a nast\u0119pnie wybierz POU.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"738\" height=\"669\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2022\/10\/dodawanie_POU.gif\" alt=\"\" class=\"wp-image-14946\"\/><figcaption class=\"wp-element-caption\"><em>Dodawanie POU, \u017ar\u00f3d\u0142o: ASTOR<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Po dokonaniu wyboru otworzy si\u0119 nowe okno dialogowe. S\u0142u\u017cy ono do wyboru typu projektu oraz j\u0119zyka programowania, w kt\u00f3rym zapisany zostanie kod \u017ar\u00f3d\u0142owy.<\/p>\n\n\n\n<p>Zanim jednak przejdziesz do utworzenia obiektu, poznasz dok\u0142adnie jego typy oraz ich w\u0142asno\u015bci i funkcjonalno\u015bci.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Typy obiekt\u00f3w w \u015brodowisku Codesys<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Program<\/h3>\n\n\n\n<p>Pierwszym typem obiektu dost\u0119pnym w Codesys jest program. Program jest jednostk\u0105 organizacyjn\u0105, kt\u00f3ra dostarcza jedn\u0105 lub wi\u0119cej warto\u015bci podczas wykonywania. Po wykonaniu programu wszystkie warto\u015bci s\u0105 zachowywane do nast\u0119pnego wykonania. Kolejno\u015b\u0107 wywo\u0142ywania program\u00f3w w ramach aplikacji jest okre\u015blona w obiektach zada\u0144. Mo\u017cesz rozpozna\u0107 program w drzewie projektowym, poprzez skr\u00f3t PRG przy nazwie jednostki. Program jest g\u0142\u00f3wnie u\u017cywany jako miejsce do wywo\u0142ywania innych jednostek, nazywany jest wtedy programem g\u0142\u00f3wnym.<\/p>\n\n\n\n<p>Programy mo\u017cna wywo\u0142ywa\u0107 w innych programach oraz blokach funkcyjnych. Wywo\u0142ywanie programu nie jest dozwolone w funkcji. Program nie posiada tak\u017ce instancji. Je\u017celi jednostka organizacyjna wywo\u0142a program i w wyniku tego zmieni\u0105 si\u0119 warto\u015bci programu, to zmiany te s\u0105 zachowane do nast\u0119pnego wywo\u0142ania programu. Warto\u015bci programu s\u0105 zachowane r\u00f3wnie\u017c wtedy, gdy powt\u00f3rne wywo\u0142anie nast\u0105pi przez inne POU.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Wywo\u0142ywanie programu<\/h3>\n\n\n\n<p>Program jest wywo\u0142ywany dzi\u0119ki komendzie wpisanej do obiektu. Przyk\u0142adowa sk\u0142adnia wygl\u0105da nast\u0119puj\u0105co:<\/p>\n\n\n\n<p><strong>&lt;program&gt;(&lt;zmienna wej\u015bciowa&gt; := &lt;warto\u015b\u0107&gt;, &lt;warto\u015b\u0107 wyj\u015bciowa&gt; =&gt; &lt;warto\u015b\u0107&gt;);<\/strong><\/p>\n\n\n\n<p>Dla przyk\u0142adu, zosta\u0142 stworzony program z jedn\u0105 zmienn\u0105 wej\u015bciow\u0105 i jedn\u0105 wyj\u015bciow\u0105 oraz dodatkowa zmienna zawarta w obiekcie wywo\u0142uj\u0105cym program:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Zmienna1 \u2013 zmienna wej\u015bciowa programu \u201eProgram_PLC\u201d<\/li>\n\n\n\n<li>Zmienna10 \u2013 zmienna wyj\u015bciowa programu \u201eProgram_PLC\u201d<\/li>\n\n\n\n<li>Wyjscie \u2013 zmienna dodatkowa zawarta w obiekcie \u201ePLC_PRG\u201d<\/li>\n<\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"735\" height=\"305\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2022\/10\/przyklad_program.gif\" alt=\"\" class=\"wp-image-14948\"\/><figcaption class=\"wp-element-caption\"><em>Przyk\u0142adowe wywo\u0142anie programu, \u017ar\u00f3d\u0142o: ASTOR<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Funkcja<\/strong><\/h3>\n\n\n\n<p>Funkcja to jednostka organizacyjna, kt\u00f3ra podczas wykonywania dostarcza dok\u0142adnie jeden element danych. Nie posiadaj\u0105 one wewn\u0119trznej informacji o stanie, oznaczaj\u0105c \u017ce funkcja nie zapisuje warto\u015bci zadeklarowanych wewn\u0105trz nich zmiennych do nast\u0119pnego wywo\u0142ania. Wywo\u0142ania funkcji z tymi samymi warto\u015bciami zmiennych wej\u015bciowych zawsze dostarczaj\u0105 t\u0119 sam\u0105 warto\u015b\u0107 wyj\u015bciow\u0105. Z tego powodu nie mo\u017cesz u\u017cywa\u0107 zmiennych i adres\u00f3w globalnych w funkcji. Warto tak\u017ce zaznaczy\u0107, \u017ce w j\u0119zykach tekstowych, takich jak j\u0119zyk strukturalny, funkcje mog\u0105 by\u0107 tak\u017ce operatorami.<\/p>\n\n\n\n<p>Funkcje u\u017cywa si\u0119 g\u0142\u00f3wnie do wykonywania operacji niewymagaj\u0105cych przechowywania warto\u015bci, czyli np. do przekazywania danych, skomplikowanych oblicze\u0144 matematycznych. Deklaracja powinna wygl\u0105da\u0107 nast\u0119puj\u0105co:<\/p>\n\n\n\n<p><strong>FUNCTION &lt;nazwa&gt; : &lt;typ danych&gt;<\/strong><\/p>\n\n\n\n<p>Poni\u017cej deklarujesz zmienne wej\u015bciowe i zmienne funkcji.<\/p>\n\n\n\n<p>Funkcja jest wywo\u0142ywana nieco inaczej ni\u017c program, poniewa\u017c maj\u0105c jedno wyj\u015bcie, rezultat zwracany przez funkcje nale\u017cy zapisa\u0107 do zmiennej w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n\n\n\n<p><strong>&lt;zmienna&gt;:=&lt;nazwa funkcji&gt;(&lt;zmienne wej\u015bciowe&gt;);<\/strong><\/p>\n\n\n\n<p>Dla przyk\u0142adu, zosta\u0142a stworzona funkcja z dwiema zmiennymi wej\u015bciowymi oraz dodatkowa zmienna zawarta w obiekcie wywo\u0142uj\u0105cym program:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Zmienna0 \u2013 zmienna wej\u015bciowa programu \u201eFunkcja_PLC\u201d<\/li>\n\n\n\n<li>Zmienna20 \u2013 zmienna wej\u015bciowa programu \u201eFunkcja_PLC\u201d<\/li>\n\n\n\n<li>Wyjscie \u2013 zmienna dodatkowa zawarta w obiekcie \u201ePLC_PRG\u201d<\/li>\n<\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"741\" height=\"315\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2022\/10\/przyklad_funkcja.gif\" alt=\"\" class=\"wp-image-14954\"\/><figcaption class=\"wp-element-caption\"><em>Przyk\u0142adowe wywo\u0142anie funkcji, \u017ar\u00f3d\u0142o: ASTOR<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Zgodnie z norm\u0105 IEC 61131-3 funkcje mog\u0105 posiada\u0107 dodatkowe wyj\u015bcia. Dodatkowe wyj\u015bcia s\u0105 deklarowane w funkcji pomi\u0119dzy s\u0142owami kluczowymi VAR_OUTPUT i END_VAR. Funkcja jest wywo\u0142ywana zgodnie z nast\u0119puj\u0105c\u0105 sk\u0142adni\u0105:<\/p>\n\n\n\n<p><strong>&lt;funkcja&gt; (&lt;zmienna wyj\u015bciowa funkcji 1&gt; =&gt; &lt;zmienna wyj\u015bciowa 1&gt;, &lt;zmienna wyj\u015bciowa funkcji n&gt; =&gt; &lt;zmienna wyj\u015bciowa n&gt;)<\/strong><\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Blok funkcyjny<\/strong><\/h3>\n\n\n\n<p>Blok funkcyjny jest jednostk\u0105, kt\u00f3ra podczas wykonywania dostarcza jedn\u0105 lub wi\u0119cej warto\u015bci. Wywo\u0142anie bloku funkcjonalnego nast\u0119puje zawsze poprzez instancj\u0119, kt\u00f3ra jest kopi\u0105 bloku funkcjonalnego. Po wykonaniu warto\u015bci zmiennych wyj\u015bciowych i zmiennych wewn\u0119trznych zostaj\u0105 zachowane do nast\u0119pnego wykonania. Oznacza to, \u017ce blok funkcjonalny przy wielokrotnym wywo\u0142aniu nie musi dostarcza\u0107 tych samych warto\u015bci wyj\u015bciowych przy tych samych zmiennych wej\u015bciowych.<\/p>\n\n\n\n<p>Opr\u00f3cz funkcjonalno\u015bci opisanych w IEC 61131-3, w CODESYS mo\u017cna wykorzysta\u0107 bloki funkcyjne do nast\u0119puj\u0105cych funkcjonalno\u015bci programowania obiektowego:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Rozszerzenie bloku funkcyjnego<\/li>\n\n\n\n<li>Implementacja interfejs\u00f3w<\/li>\n\n\n\n<li>Metody<\/li>\n\n\n\n<li>W\u0142a\u015bciwo\u015bci<\/li>\n<\/ul>\n\n\n\n<p>Najwy\u017cszy wiersz cz\u0119\u015bci deklaracyjnej zawiera nast\u0119puj\u0105c\u0105 deklaracj\u0119:<\/p>\n\n\n\n<p><strong>FUNCTION_BLOCK &lt;specyfikator dost\u0119pu&gt; &lt;nazwa bloku funkcji&gt; \\| EXTENDS &lt;bloku funkcji&gt; \\| IMPLEMENTS &lt;rozdzielona przecinkami lista interfejs\u00f3w&gt;.<\/strong><\/p>\n\n\n\n<p>Najcz\u0119\u015bciej mo\u017cna spotka\u0107 bloki funkcyjne zapisane jak poni\u017cej:<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"551\" height=\"250\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2022\/10\/przykladowa-deklaracja-bloku.png\" alt=\"\" class=\"wp-image-14957\"\/><figcaption class=\"wp-element-caption\"><em>Przyk\u0142adowa deklaracja bloku funkcyjnego, \u017ar\u00f3d\u0142o: ASTOR<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Wywo\u0142anie odbywa si\u0119 zawsze poprzez instancj\u0119 bloku funkcjonalnego. Podczas wywo\u0142ywania bloku funkcyjnego zmieniaj\u0105 si\u0119 tylko warto\u015bci danej instancji, kt\u00f3rej deklaracja wygl\u0105da nast\u0119puj\u0105co.<\/p>\n\n\n\n<p><strong>&lt;instancja&gt; : &lt;blok funkcyjny&gt;;<\/strong><\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"549\" height=\"246\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2022\/10\/przykladowe-wywolanie-bloku.png\" alt=\"\" class=\"wp-image-14959\"\/><figcaption class=\"wp-element-caption\"><em>Przyk\u0142adowe wywo\u0142anie bloku funkcyjnego, \u017ar\u00f3d\u0142o: ASTOR<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Dost\u0119p do zmiennej bloku funkcyjnego w cz\u0119\u015bci implementacyjnej uzyskujemy w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n\n\n\n<p><strong>&lt;instancja&gt;.&lt;zmienna&gt;.<\/strong><\/p>\n\n\n\n<p>Zatem dodaj do istniej\u0105cego bloku zmienn\u0105 wej\u015bciow\u0105 typu BOOL i nazwij j\u0105 xWej. Nast\u0119pnie dodaj zmienn\u0105 wyj\u015bciow\u0105 typu BOOL o nazwie xWyj oraz prosty kod widoczny na zdj\u0119ciu.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"574\" height=\"247\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2022\/10\/kod-bloku-funkcyjnego.png\" alt=\"\" class=\"wp-image-14962\"\/><figcaption class=\"wp-element-caption\"><em>Kod bloku funkcyjnego, \u017ar\u00f3d\u0142o: ASTOR<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Nast\u0119pnie w programie g\u0142\u00f3wnym dodaj nowe zmienne typu BOOL. Nazwij je xPrzycisk1 oraz xPrzycisk2. Dodaj tak\u017ce dwie kolejne zmienne typu BOOL oraz nazwij je xLED1 i xLED2. B\u0119d\u0105 one wej\u015bciami do instancji blok\u00f3w funkcyjnych. Zapisz poni\u017csze komendy w kodzie programu g\u0142\u00f3wnego.<\/p>\n\n\n\n<p><strong>Instancja(xWej:=xPrzycisk1,xWyj=&gt;xLED1);<\/strong><\/p>\n\n\n\n<p><strong>Instancja2(xWej:=xPrzycisk2,xWyj=&gt;xLED2);<\/strong><\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"662\" height=\"230\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2022\/10\/program-glowny.png\" alt=\"\" class=\"wp-image-14965\"\/><figcaption class=\"wp-element-caption\"><em>Program g\u0142\u00f3wny, \u017ar\u00f3d\u0142o: ASTOR<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Taki program wykona dwie instancje jednego bloku funkcyjnego, czyli wykona oddzielne operacje zawarte w kodzie bloku funkcyjnego wykorzystuj\u0105c inne zmienne do realizacji rozkaz\u00f3w w bloku funkcyjnym.<\/p>\n\n\n\n<p>Z zewn\u0105trz instancji bloku funkcjonalnego mo\u017cesz uzyska\u0107 dost\u0119p tylko do zmiennych wej\u015bciowych i wyj\u015bciowych bloku funkcjonalnego, nie do zmiennych wewn\u0119trznych. Dost\u0119p do instancji bloku funkcjonalnego jest ograniczony do jednostki, w kt\u00f3rym instancja zosta\u0142a zadeklarowana, chyba \u017ce instancja zosta\u0142a zadeklarowana jako globalna. Podczas wywo\u0142ywania instancji mo\u017cna przypisa\u0107 zmiennym bloku funkcjonalnego \u017c\u0105dane warto\u015bci.<\/p>\n\n\n\n<p>Przyk\u0142adowym blokiem funkcyjnym mo\u017ce by\u0107 np. timer. Wywo\u0142anie jego instancji wygl\u0105da nast\u0119puj\u0105co:<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"741\" height=\"315\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2022\/10\/przyklad_blok.gif\" alt=\"\" class=\"wp-image-14963\"\/><figcaption class=\"wp-element-caption\"><em>Przyk\u0142adowe wywo\u0142anie bloku funkcyjnego, \u017ar\u00f3d\u0142o: ASTOR<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>W j\u0119zykach tekstowych mo\u017cna podczas wywo\u0142ania bloku funkcjonalnego bezpo\u015brednio przypisa\u0107 warto\u015bci do zmiennych wej\u015bciowych i\/lub wyj\u015bciowych. Przypisanie warto\u015bci do zmiennej wej\u015bciowej odbywa si\u0119 przy pomocy :=. Przypisanie warto\u015bci do zmiennej wyj\u015bciowej odbywa si\u0119 przy pomocy =&gt;. Przyk\u0142adowo, wywo\u0142ywana jest instancja CMD_TMR bloku funkcjonalnego timera z przypisaniami do zmiennych wej\u015bciowych IN i PT. Nast\u0119pnie zmienna wyj\u015bciowa Q timera jest przypisywana do zmiennej A<\/p>\n\n\n\n<p><strong>CMD_TMR (IN := %IX5, PT := 100=);<\/strong><\/p>\n\n\n\n<p><strong>A:= CMD_TMR.Q;<\/strong><\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Jak jednostki organizacyjne wp\u0142ywaj\u0105 na budow\u0119 aplikacji?<\/h2>\n\n\n\n<p>U\u017cytek jednostek organizacyjnych wp\u0142ywa na przejrzysto\u015b\u0107 oraz zwi\u0119z\u0142o\u015b\u0107 aplikacji. Dzi\u0119ki nim, nie b\u0119dziesz musia\u0142 powtarza\u0107 kodu oraz tworzy\u0107 niepotrzebnie d\u0142ugich, wielotematycznych program\u00f3w. Jednostki organizacyjne pozwol\u0105 Ci podzieli\u0107 twoje algorytmy, aby m\u00f3c wykorzystywa\u0107 je ponownie, za pomoc\u0105 wywo\u0142ania jednostki.<\/p>\n\n\n\n<p>Przyk\u0142adowo, je\u015bli musisz wykona\u0107 wielokrotnie te same rozkazy, najlepiej zapisa\u0107 je w formacie funkcji. Jednak\u017ce, gdy te rozkazy, maj\u0105 by\u0107 wykonane wielokrotnie w tym samym czasie, wykorzystuj\u0105c inne dane, nale\u017cy u\u017cy\u0107 bloku funkcyjnego i mo\u017cliwo\u015bci wykorzystywania wielu instancji. &nbsp;Programu u\u017cywa si\u0119 g\u0142\u00f3wnie jako podstawy aplikacji, w kt\u00f3rej wywo\u0142uje si\u0119 pozosta\u0142e jednostki organizacyjne oraz do podtrzymania warto\u015bci zmiennych do nast\u0119pnego wykonania p\u0119tli programowej.<\/p>\n\n\n\n<p>W tym odcinku to ju\u017c wszystko. W kolejnym dowiesz si\u0119, jak skonfigurowa\u0107 komunikacj\u0119 z wykorzystaniem protoko\u0142u MQTT.<\/p>\n\n\n\n<p>Do zobaczenia!<\/p>\n\n\n\n<p><strong><strong>Autor artyku\u0142u: Mateusz Steczkowski<\/strong><\/strong><\/p>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n            <div id=\"mailerlite-form_9\" data-temp-id=\"69daf18f57000\">\n                <div class=\"mailerlite-form\">\n                    <form action=\"\" method=\"post\" novalidate>\n                                                    <div class=\"mailerlite-form-title\"><h3>Newsletter Poradnika Automatyka<\/h3><\/div>\n                                                <div class=\"mailerlite-form-description\"><p>Czytaj trendy i inspiracje, podstawy automatyki, automatyk\u0119 w praktyce<\/p>\n<\/div>\n                        <div class=\"mailerlite-form-inputs\">\n                                                                                            <div class=\"mailerlite-form-field\">\n                                    <label for=\"mailerlite-9-field-email\">Email<\/label>\n                                    <input id=\"mailerlite-9-field-email\"\n                                           type=\"email\" required=\"required\"                                            name=\"form_fields[email]\"\n                                           placeholder=\"Email\"\/>\n                                <\/div>\n                                                        <div class=\"mailerlite-form-loader\">Please wait...<\/div>\n                            <div class=\"mailerlite-subscribe-button-container\">\n                                <button class=\"mailerlite-subscribe-submit\" type=\"submit\">\n                                    Zapisz si\u0119                                <\/button>\n                            <\/div>\n                            <input type=\"hidden\" name=\"form_id\" value=\"9\"\/>\n                            <input type=\"hidden\" name=\"action\" value=\"mailerlite_subscribe_form\"\/>\n                            <input type=\"hidden\" name=\"ml_nonce\" value=\"1cdb083bc2\"\/>\n                        <\/div>\n                        <div class=\"mailerlite-form-response\">\n                                                            <h4><p>Dzi\u0119kujemy za zapis do newslettera!<\/p>\n<\/h4>\n                                                    <\/div>\n                    <\/form>\n                <\/div>\n            <\/div>\n        <script type=\"text\/javascript\" src='https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/plugins\/official-mailerlite-sign-up-forms\/assets\/js\/localization\/validation-messages.js'><\/script>\n         <script type=\"text\/javascript\"> var selectedLanguage = \"pl\"; var validationMessages = messages[\"en\"]; if(selectedLanguage) { validationMessages = messages[selectedLanguage]; } window.addEventListener(\"load\", function () { var form_container = document.querySelector(`#mailerlite-form_9[data-temp-id=\"69daf18f57000\"] form`); let submitButton = form_container.querySelector('.mailerlite-subscribe-submit'); submitButton.disabled = true; fetch('https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-admin\/admin-ajax.php', { method: 'POST', headers:{ 'Content-Type': 'application\/x-www-form-urlencoded', }, body: new URLSearchParams({ \"action\" : \"ml_create_nonce\", \"ml_nonce\" : form_container.querySelector(\"input[name='ml_nonce']\").value }) }) .then((response) => response.json()) .then((json) => { if(json.success) { form_container.querySelector(\"input[name='ml_nonce']\").value = json.data.ml_nonce; submitButton.disabled = false; } }) .catch((error) => { console.error('Error:', error); }); form_container.addEventListener('submit', (e) => { e.preventDefault(); let data = new URLSearchParams(new FormData(form_container)).toString(); let validationError = false; document.querySelectorAll('.mailerlite-form-error').forEach(el => el.remove()); Array.from(form_container.elements).forEach((input) => { if(input.type !== 'hidden') { if(input.required) { if(input.value == '') { validationError = true; let error = document.createElement(\"span\"); error.className = 'mailerlite-form-error'; error.textContent = validationMessages.required; input.after(error); return false; } } if((input.type == \"email\") && (!validateEmail(input.value))) { validationError = true; let error = document.createElement(\"span\"); error.className = 'mailerlite-form-error'; error.textContent = validationMessages.email; input.after(error); return false; } } }); if(validationError) { return false; } fade.out(form_container.querySelector('.mailerlite-subscribe-button-container'), () => { fade.in(form_container.querySelector('.mailerlite-form-loader')); }); fetch('https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-admin\/admin-ajax.php', { method: 'POST', headers:{ 'Content-Type': 'application\/x-www-form-urlencoded', }, body: data }) .then((response) => { fade.out(form_container.querySelector('.mailerlite-form-inputs'), () => { fade.in(form_container.querySelector('.mailerlite-form-response')); }); }) .catch((error) => { console.error('Error:', error); }); }); }, false); var fade = { out: function(el, fn = false) { var fadeOutEffect = setInterval(function () { if (!el.style.opacity) { el.style.opacity = 1; } if (el.style.opacity > 0) { el.style.opacity -= 0.1; } else { el.style.display = 'none'; clearInterval(fadeOutEffect); } }, 50); if( typeof (fn) == 'function') { fn(); } }, in: function(el) { var fadeInEffect = setInterval(function () { if (!el.style.opacity) { el.style.opacity = 0; } if (el.style.opacity < 1) { el.style.opacity = Number(el.style.opacity) + 0.1; } else { el.style.display = 'block'; clearInterval(fadeInEffect); } }, 50); } }; function validateEmail(email){ if(email.match( \/^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$\/ )) { return true; } return false; } <\/script> \n","protected":false},"excerpt":{"rendered":"<p>Kolejny odcinek naszego kursu dotyczy funkcji, blok\u00f3w funkcyjnych oraz program\u00f3w w \u015brodowisku Codesys. Te jednostki organizacyjne pozwalaj\u0105 zwi\u0119kszy\u0107 przejrzysto\u015b\u0107 aplikacji, kt\u00f3r\u0105 tworzysz oraz usprawni\u0107 jej dzia\u0142anie poprzez szereg funkcjonalno\u015bci, zale\u017cnych od rodzaju obiektu.<\/p>\n","protected":false},"author":81,"featured_media":14965,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[234],"tags":[139,142],"class_list":["post-14938","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-automatyka-w-praktyce","tag-astraada-one","tag-codesys"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\r\n<title>Funkcja, blok funkcyjny, program \u2013 zmodyfikuj program w Codesys dla lepszej funkcjonalno\u015bci | Kurs programowania w Codesys odc. 10 | Poradnik Automatyka<\/title>\r\n<meta name=\"description\" content=\"Kolejny odcinek naszego kursu dotyczy jednostek organizacyjnych: funkcji, blok\u00f3w funkcyjnych oraz program\u00f3w w \u015brodowisku Codesys.\" \/>\r\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\r\n<link rel=\"canonical\" href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/\" \/>\r\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\r\n<meta property=\"og:type\" content=\"article\" \/>\r\n<meta property=\"og:title\" content=\"Funkcja, blok funkcyjny, program \u2013 zmodyfikuj program w Codesys dla lepszej funkcjonalno\u015bci | Kurs programowania w Codesys odc. 10 | Poradnik Automatyka\" \/>\r\n<meta property=\"og:description\" content=\"Kolejny odcinek naszego kursu dotyczy jednostek organizacyjnych: funkcji, blok\u00f3w funkcyjnych oraz program\u00f3w w \u015brodowisku Codesys.\" \/>\r\n<meta property=\"og:url\" content=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/\" \/>\r\n<meta property=\"og:site_name\" content=\"Poradnik Automatyka\" \/>\r\n<meta property=\"article:published_time\" content=\"2022-10-10T09:19:22+00:00\" \/>\r\n<meta property=\"article:modified_time\" content=\"2024-03-12T17:23:28+00:00\" \/>\r\n<meta property=\"og:image\" content=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2022\/10\/program-glowny.png\" \/>\r\n\t<meta property=\"og:image:width\" content=\"662\" \/>\r\n\t<meta property=\"og:image:height\" content=\"230\" \/>\r\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\r\n<meta name=\"author\" content=\"Mateusz Pytel\" \/>\r\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\r\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mateusz Pytel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minut\" \/>\r\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/\"},\"author\":{\"name\":\"Mateusz Pytel\",\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/person\/30d3dfd95308f3bba081f0a44bb6b97b\"},\"headline\":\"Funkcja, blok funkcyjny, program \u2013 zmodyfikuj program w Codesys dla lepszej funkcjonalno\u015bci | Kurs programowania w Codesys odc. 10\",\"datePublished\":\"2022-10-10T09:19:22+00:00\",\"dateModified\":\"2024-03-12T17:23:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/\"},\"wordCount\":1554,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2022\/10\/program-glowny.png\",\"keywords\":[\"Astraada One\",\"Codesys\"],\"articleSection\":[\"Automatyka w praktyce\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/\",\"url\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/\",\"name\":\"Funkcja, blok funkcyjny, program \u2013 zmodyfikuj program w Codesys dla lepszej funkcjonalno\u015bci | Kurs programowania w Codesys odc. 10 | Poradnik Automatyka\",\"isPartOf\":{\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2022\/10\/program-glowny.png\",\"datePublished\":\"2022-10-10T09:19:22+00:00\",\"dateModified\":\"2024-03-12T17:23:28+00:00\",\"description\":\"Kolejny odcinek naszego kursu dotyczy jednostek organizacyjnych: funkcji, blok\u00f3w funkcyjnych oraz program\u00f3w w \u015brodowisku Codesys.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/#primaryimage\",\"url\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2022\/10\/program-glowny.png\",\"contentUrl\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2022\/10\/program-glowny.png\",\"width\":662,\"height\":230},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Automatyka w praktyce\",\"item\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/category\/automatyka-w-praktyce\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Funkcja, blok funkcyjny, program \u2013 zmodyfikuj program w Codesys dla lepszej funkcjonalno\u015bci | Kurs programowania w Codesys odc. 10\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#website\",\"url\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/\",\"name\":\"Poradnik Automatyka\",\"description\":\"Poradnik Automatyka to przydatne kursy, u\u017cyteczne artyku\u0142y i merytoryczne webinary dla ka\u017cdego automatyka i elektryka.\",\"publisher\":{\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#organization\",\"name\":\"ASTOR\",\"url\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2018\/08\/ASTOR_zwykly_sam_logotyp.png\",\"contentUrl\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2018\/08\/ASTOR_zwykly_sam_logotyp.png\",\"width\":3322,\"height\":1078,\"caption\":\"ASTOR\"},\"image\":{\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/person\/30d3dfd95308f3bba081f0a44bb6b97b\",\"name\":\"Mateusz Pytel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2023\/05\/mateusz-pytel.jpg\",\"contentUrl\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2023\/05\/mateusz-pytel.jpg\",\"caption\":\"Mateusz Pytel\"},\"description\":\"Mened\u017cer produkt\u00f3w Astraada One i Horner w firmie ASTOR.\",\"url\":\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/autor\/mateuszpytel\/\"}]}<\/script>\r\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Funkcja, blok funkcyjny, program \u2013 zmodyfikuj program w Codesys dla lepszej funkcjonalno\u015bci | Kurs programowania w Codesys odc. 10 | Poradnik Automatyka","description":"Kolejny odcinek naszego kursu dotyczy jednostek organizacyjnych: funkcji, blok\u00f3w funkcyjnych oraz program\u00f3w w \u015brodowisku Codesys.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/","og_locale":"pl_PL","og_type":"article","og_title":"Funkcja, blok funkcyjny, program \u2013 zmodyfikuj program w Codesys dla lepszej funkcjonalno\u015bci | Kurs programowania w Codesys odc. 10 | Poradnik Automatyka","og_description":"Kolejny odcinek naszego kursu dotyczy jednostek organizacyjnych: funkcji, blok\u00f3w funkcyjnych oraz program\u00f3w w \u015brodowisku Codesys.","og_url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/","og_site_name":"Poradnik Automatyka","article_published_time":"2022-10-10T09:19:22+00:00","article_modified_time":"2024-03-12T17:23:28+00:00","og_image":[{"width":662,"height":230,"url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2022\/10\/program-glowny.png","type":"image\/png"}],"author":"Mateusz Pytel","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"Mateusz Pytel","Szacowany czas czytania":"9 minut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/#article","isPartOf":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/"},"author":{"name":"Mateusz Pytel","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/person\/30d3dfd95308f3bba081f0a44bb6b97b"},"headline":"Funkcja, blok funkcyjny, program \u2013 zmodyfikuj program w Codesys dla lepszej funkcjonalno\u015bci | Kurs programowania w Codesys odc. 10","datePublished":"2022-10-10T09:19:22+00:00","dateModified":"2024-03-12T17:23:28+00:00","mainEntityOfPage":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/"},"wordCount":1554,"commentCount":0,"publisher":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#organization"},"image":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/#primaryimage"},"thumbnailUrl":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2022\/10\/program-glowny.png","keywords":["Astraada One","Codesys"],"articleSection":["Automatyka w praktyce"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/","name":"Funkcja, blok funkcyjny, program \u2013 zmodyfikuj program w Codesys dla lepszej funkcjonalno\u015bci | Kurs programowania w Codesys odc. 10 | Poradnik Automatyka","isPartOf":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/#primaryimage"},"image":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/#primaryimage"},"thumbnailUrl":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2022\/10\/program-glowny.png","datePublished":"2022-10-10T09:19:22+00:00","dateModified":"2024-03-12T17:23:28+00:00","description":"Kolejny odcinek naszego kursu dotyczy jednostek organizacyjnych: funkcji, blok\u00f3w funkcyjnych oraz program\u00f3w w \u015brodowisku Codesys.","breadcrumb":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/#primaryimage","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2022\/10\/program-glowny.png","contentUrl":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2022\/10\/program-glowny.png","width":662,"height":230},{"@type":"BreadcrumbList","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/funkcja-blok-funkcyjny-program-zmodyfikuj-program-w-codesys-dla-lepszej-funkcjonalnosci-kurs-programowania-w-codesys-odc-10\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Automatyka w praktyce","item":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/category\/automatyka-w-praktyce\/"},{"@type":"ListItem","position":2,"name":"Funkcja, blok funkcyjny, program \u2013 zmodyfikuj program w Codesys dla lepszej funkcjonalno\u015bci | Kurs programowania w Codesys odc. 10"}]},{"@type":"WebSite","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#website","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/","name":"Poradnik Automatyka","description":"Poradnik Automatyka to przydatne kursy, u\u017cyteczne artyku\u0142y i merytoryczne webinary dla ka\u017cdego automatyka i elektryka.","publisher":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#organization","name":"ASTOR","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/logo\/image\/","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2018\/08\/ASTOR_zwykly_sam_logotyp.png","contentUrl":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2018\/08\/ASTOR_zwykly_sam_logotyp.png","width":3322,"height":1078,"caption":"ASTOR"},"image":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/person\/30d3dfd95308f3bba081f0a44bb6b97b","name":"Mateusz Pytel","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/person\/image\/","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2023\/05\/mateusz-pytel.jpg","contentUrl":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2023\/05\/mateusz-pytel.jpg","caption":"Mateusz Pytel"},"description":"Mened\u017cer produkt\u00f3w Astraada One i Horner w firmie ASTOR.","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/autor\/mateuszpytel\/"}]}},"_links":{"self":[{"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/posts\/14938","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/users\/81"}],"replies":[{"embeddable":true,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/comments?post=14938"}],"version-history":[{"count":2,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/posts\/14938\/revisions"}],"predecessor-version":[{"id":20252,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/posts\/14938\/revisions\/20252"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/media\/14965"}],"wp:attachment":[{"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/media?parent=14938"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/categories?post=14938"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/tags?post=14938"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}