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
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.
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?
Momentálně implementaci 3. edice neplánujeme.
Tento dotaz je vyřešený.