JR Programování Mosaic 14. 4. 2022 16:02 22. 2. 2022 8:54

V dokumentu Programování PLC podle normy IEC 61 131-3 v prostředí Mosaic se píše: "Datový typ pointer lze použít všude tam, kde lze použít elementární datový typ.". Pokusil jsem se tedy pointer použít v deklaraci struktury, něco jako:

TYPE TTest: STRUCT
 name : STRING[10];
 state : PTR_TO BOOL;
END_STRUCT;
END_TYPE

Ale při překladu se objeví chyba "Deklarace typu pointer (PTR_TO) je povolena jen ve VAR, VAR_INPUT, VAR_TEMP a VAR_GLOBAL". Dělám něco špatně, nebo neplatí, že datový typ pointer lze použít všude tam, kde...?

Zajímavé je, že lze vytvořit typ pole pointerů, ale toto pak opět nelze použít v deklaraci struktury.  (Chyba: "Typ nesmí obsahovat pole pointerů.") 

Odpovědi 3

M.B. 21. 2. 2022 16:12

Věta ve zmíněném dokumentu je skutečně zavádějící. Kompilátor si nedokáže poradit s datovými typy, které kombinují pointery a běžné proměnné. Pokud je nutné pointer do struktury uložit, je možné omezení obejít tím, že se pointer uloží do datového typu UDINT s použitím konverzních funkcí PTR_TO_UDINT a UDINT_TO_PTR.

JR 21. 2. 2022 17:50

Děkuji za odpověď a také za odpověď na otázku, kterou jsem původně chtěl položit, ale pak jsem si to rozmyslel s tím, že je to až příliš "nečisté" - právě to přetypování. 

Dostal jsem se k tomu tak, že jsem zvažoval, zda by v ST nešlo programovat trochu OOP stylem, tak jsem experimentoval. Mimochodem, implementaci IEC 61131-3 edice 3 nezvažujete?

M.B. 22. 2. 2022 8:54

Momentálně implementaci 3. edice neplánujeme.

Tento dotaz je vyřešený.