{"id":122,"date":"2026-02-01T21:36:29","date_gmt":"2026-02-01T20:36:29","guid":{"rendered":"https:\/\/robotrfid.kia.prz.edu.pl\/?page_id=122"},"modified":"2026-02-15T22:23:35","modified_gmt":"2026-02-15T21:23:35","slug":"oprogramowanie","status":"publish","type":"page","link":"https:\/\/robotrfid.kia.prz.edu.pl\/en\/oprogramowanie\/","title":{"rendered":"Software"},"content":{"rendered":"\n<p class=\"has-text-align-left wp-block-paragraph\">Oprogramowanie realizuj\u0105ce wielozadaniowy system rozproszony mi\u0119dzy r\u00f3\u017cne jednostki wykonawcze przygotowano w \u015brodowisku CPDev [1] (w specjalnej wersji iConfPLC).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"945\" height=\"603\" src=\"https:\/\/robotrfid.kia.prz.edu.pl\/wp-content\/uploads\/2026\/02\/image.png\" alt=\"\" class=\"wp-image-124\" srcset=\"https:\/\/robotrfid.kia.prz.edu.pl\/wp-content\/uploads\/2026\/02\/image.png 945w, https:\/\/robotrfid.kia.prz.edu.pl\/wp-content\/uploads\/2026\/02\/image-300x191.png 300w, https:\/\/robotrfid.kia.prz.edu.pl\/wp-content\/uploads\/2026\/02\/image-768x490.png 768w\" sizes=\"auto, (max-width: 945px) 100vw, 945px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Kody program\u00f3w CPDEV1, CPDEV2 i CPEV3 wykonywanych przez maszyny wirtualne przedstawiono poni\u017cej. Maszyny te dysponuj\u0105 jednakowymi zmiennymi globalnymi (<em>global variables<\/em>), z kt\u00f3rych cz\u0119\u015b\u0107 wymieniaj\u0105 mi\u0119dzy sob\u0105.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PROGRAM CPDEV1\n VAR_EXTERNAL (*$AUTO*) END_VAR\n VAR\n  ID_OK_TRIG : R_TRIG;\n  TMP : ARRAY&#91;0..1] OF INT;\n  KOM : KOMENDY;\n  X : INT := 0;\n  Y : INT := 1;\n END_VAR\n \n ID_OK_TRIG(CLK:=ID_OK);\n \n IF ID_OK_TRIG.Q THEN\n   IF KOMENDA = KOM.OBR_LEWO THEN\n      KIERUNEK := (KIERUNEK + 3) MOD 4;\n   ELSIF KOMENDA = KOM.OBR_PRAWO THEN\n      KIERUNEK := (KIERUNEK + 1) MOD 4;\n   ELSIF KOMENDA = KOM.NA_WPROST THEN\n      TMP := NOWA_POZYCJA(XY, KIERUNEK, \n                         KOM.NA_WPROST);\n      XY&#91;X] := TMP&#91;X];\n      XY&#91;Y] := TMP&#91;Y]; \n      MAPA_RFID&#91;XY&#91;0],XY&#91;1]] := ID_RFID;\n   ELSIF KOMENDA = KOM.STOP THEN \n      MAPA_RFID&#91;XY&#91;0],XY&#91;1]] := ID_RFID;\n   END_IF\n  END_IF \nEND_PROGRAM   <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>PROGRAM CPDEV2\nVAR_EXTERNAL (*$AUTO*) END_VAR\nVAR\n   PUSTE: LWORD := 0;\n   X : INT := 0;\n   Y : INT := 1;\n   KOM : KOMENDY;\n   OBR : OBROTY;\n   TMP: ARRAY&#91;0..1] OF INT; \nEND_VAR                           \n\nIF MAPA_RFID&#91;XY&#91;X], XY&#91;Y]] &lt;&gt; PUSTE THEN\n   KOMENDA := KOM.STOP;\n\n   TMP := NOWA_POZYCJA(XY, KIERUNEK, KOM.NA_WPROST);\n\n   IF (TMP&#91;X] &gt;= 0 AND TMP&#91;X] &lt;= MAPA_ROZMIAR) \n              AND (TMP&#91;Y] &gt;= 0 AND TMP&#91;Y] &lt;= MAPA_ROZMIAR) THEN\n      IF MAPA_RFID&#91;TMP&#91;X], TMP&#91;Y]] = PUSTE THEN\n         KOMENDA := KOM.NA_WPROST; \/\/ Na wprost, kierunek bez zmian\n      END_IF\n   END_IF\n   \n   IF KOMENDA = KOM.STOP THEN\n      IF OBROT = OBR.LEWO THEN\n           TMP := NOWA_POZYCJA(XY, KIERUNEK, KOM.OBR_LEWO);\n              \n           IF (TMP&#91;X] &gt;= 0 AND TMP&#91;X] &lt;= MAPA_ROZMIAR) \n                      AND (TMP&#91;Y] &gt;= 0 AND TMP&#91;X] &lt;= MAPA_ROZMIAR) THEN\n              IF MAPA_RFID&#91;TMP&#91;X], TMP&#91;Y]] = PUSTE THEN\n                 KOMENDA := KOM.OBR_LEWO; \/\/ Obr\u00f3t w lewo w miejscu\n              END_IF\n           END_IF  \n      ELSE\n           TMP := NOWA_POZYCJA(XY, KIERUNEK, KOM.OBR_PRAWO);\n           \n           IF (TMP&#91;X] &gt;= 0 AND TMP&#91;X] &lt;= MAPA_ROZMIAR) \n                      AND (TMP&#91;Y] &gt;= 0 AND TMP&#91;X] &lt;= MAPA_ROZMIAR) THEN\n              IF MAPA_RFID&#91;TMP&#91;X], TMP&#91;Y]] = PUSTE THEN\n                 KOMENDA := KOM.OBR_PRAWO; \/\/ Obr\u00f3t w prawo w miejscu\n              END_IF   \n           END_IF\n      END_IF\n   END_IF \nEND_IF\nEND_PROGRAM  <\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>PROGRAM CPDEV3\n VAR_EXTERNAL (*$AUTO*) END_VAR\n VAR\n    KOM : KOMENDY;\n    ID_OK_TRIG : F_TRIG;\n END_VAR\n \n ID_OK_TRIG(CLK:=ID_OK);\n \n IF ID_OK_TRIG.Q THEN\n    IF KOMENDA = KOM.NA_WPROST THEN\n       ROBOT_POLECENIE := 1;\n       ROBOT_WARTOSC := MAPA_ROZSTAW;  \n    ELSIF KOMENDA = KOM.OBR_LEWO THEN\n       ROBOT_POLECENIE := 2;\n       ROBOT_WARTOSC := 90;   \n    ELSIF KOMENDA = KOM.OBR_PRAWO THEN\n       ROBOT_POLECENIE := 3;\n       ROBOT_WARTOSC := -90;\n    ELSE\n       ROBOT_POLECENIE := 0;\n    END_IF\n END_IF\nEND_PROGRAM      <\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Do uzupe\u0142nienia projektu opracowano specjalny pusty program TYPY przechowuj\u0105cy w\u0142asne typy zmiennych oraz funkcj\u0119 NOWA_POZYCJA implementuj\u0105c\u0105 wyszukiwanie nowej pozycji b\u0119d\u0105cej baz\u0105 eksploracji.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>PROGRAM TYPY\nEND_PROGRAM\n\nTYPE KOMENDY : STRUCT\n   STOP : INT := 0;\n   NA_WPROST : INT := 1;\n   OBR_LEWO : INT := 2;\n   OBR_PRAWO : INT := 3;\n   BRAK : INT := 4;\nEND_STRUCT;\nEND_TYPE\n\nTYPE OBROTY : STRUCT\n   LEWO : INT := 1;\n   PRAWO : INT := 2;\nEND_STRUCT;\nEND_TYPE<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>FUNCTION NOWA_POZYCJA :  ARRAY&#91;0..1] OF INT (*RET_TYPE*)\nVAR_INPUT\n   POS : ARRAY&#91;0..1] OF INT; \/\/aktualna pozycja\n   KIER : INT;               \/\/aktualny kierunek\n   KOM : INT;                \/\/komenda\nEND_VAR\n   IF KOM &gt;= 1 AND KOM &lt;= 3 THEN\n      CASE KIER OF\n           0: \/\/ N\n           IF KOM = 1 THEN POS&#91;1] := POS&#91;1] + 1;  \n           ELSIF KOM = 2 THEN POS&#91;0] := POS&#91;0] - 1;\n           ELSIF KOM = 3 THEN POS&#91;0] := POS&#91;0] + 1;\n           END_IF  \n           1: \/\/ E\n           IF KOM = 1 THEN POS&#91;0] := POS&#91;0] + 1;  \n           ELSIF KOM = 2 THEN POS&#91;1] := POS&#91;1] + 1;\n           ELSIF KOM = 3 THEN POS&#91;1] := POS&#91;1] - 1;\n           END_IF \n           2: \/\/S\n           IF KOM = 1 THEN POS&#91;1] := POS&#91;1] - 1;  \n           ELSIF KOM = 2 THEN POS&#91;0] := POS&#91;0] + 1;\n           ELSIF KOM = 3 THEN POS&#91;0] := POS&#91;0] - 1;\n           END_IF  \n           3: \/\/ W\n           IF KOM = 1 THEN POS&#91;0] := POS&#91;0] - 1;  \n           ELSIF KOM = 2 THEN POS&#91;1] := POS&#91;1] - 1;\n           ELSIF KOM = 3 THEN POS&#91;1] := POS&#91;1] + 1;\n           END_IF \n         END_CASE\n      END_IF        \n   NOWA_POZYCJA := POS;  (*RET_VALUE*) \nEND_FUNCTION            <\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">[1] <a href=\"https:\/\/github.com\/CPDev-ControlProgramDeveloper\/VirtualMachine\">CPDev-ControlProgramDeveloper\/VirtualMachine: The repository contains public sources of the CPDev (Control Program Developer) virtual machine runtime (VM). The environment is available for download at https:\/\/cpdev.kia.prz.edu.pl<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Oprogramowanie realizuj\u0105ce wielozadaniowy system rozproszony mi\u0119dzy r\u00f3\u017cne jednostki wykonawcze przygotowano w \u015brodowisku CPDev [1] (w specjalnej wersji iConfPLC). Kody program\u00f3w CPDEV1, CPDEV2 i CPEV3 wykonywanych przez maszyny wirtualne przedstawiono poni\u017cej. Maszyny te dysponuj\u0105 jednakowymi zmiennymi globalnymi (global variables), z kt\u00f3rych cz\u0119\u015b\u0107 wymieniaj\u0105 mi\u0119dzy sob\u0105. Do uzupe\u0142nienia projektu opracowano specjalny pusty program TYPY przechowuj\u0105cy w\u0142asne typy [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-122","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/robotrfid.kia.prz.edu.pl\/en\/wp-json\/wp\/v2\/pages\/122","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/robotrfid.kia.prz.edu.pl\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/robotrfid.kia.prz.edu.pl\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/robotrfid.kia.prz.edu.pl\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/robotrfid.kia.prz.edu.pl\/en\/wp-json\/wp\/v2\/comments?post=122"}],"version-history":[{"count":8,"href":"https:\/\/robotrfid.kia.prz.edu.pl\/en\/wp-json\/wp\/v2\/pages\/122\/revisions"}],"predecessor-version":[{"id":238,"href":"https:\/\/robotrfid.kia.prz.edu.pl\/en\/wp-json\/wp\/v2\/pages\/122\/revisions\/238"}],"wp:attachment":[{"href":"https:\/\/robotrfid.kia.prz.edu.pl\/en\/wp-json\/wp\/v2\/media?parent=122"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}