Dobrý den,
z jiných programovacích jazyků jsme zvyklý využívat výčtové typy. Kromě označení typu a použití v if / case testech využívám i jejich číselné hodnoty. Např. na indexaci v polích, na výpočty (např. algoritmus je ve 5. kroku z 20.). Bohužel tohoto se mi nedaří v Mosaicu nijak dosáhnout. Jakákoliv snaha o použití číselné hodnoty enumu selhává. Je toto nějak možné?
Dále se mi nedaří vytvořit pole enumů. Kompilátor hlásí - Není podporováno. Nicméně obalení enumu do struktury a následné vytvoření pole této struktury už lze. Jde to nějak i bez takového obalování?
Díky za odpověď.
Odpovědi 2
Dobrý den,
prozatím jsme požadavek na prosté pole enumerací nezaznamenali, takže jsme jeho implementaci hlouběji neřešili. Nejsem momentálně schopen říct, jak bude složité implementaci doplnit a tak nemohu slíbit zda v blízké době bude tento typ dostupný. Obejití přes pole struktur je možné.
Co se týká použítí enumerace jako číselné hodnoty, v naší implementaci je enumerace uložena jako typ USINT a jednotlivé položky jsou přiřazovány vzestupně od nuly. Pokud je potřeba přistoupit na hodnotu enumerace je možné použít ukazatel na pointer. Viz příklad níže:
TYPE enumerace : (one1, two2, three3, four4); END_TYPE PROGRAM prgTest VAR e : enumerace; p : PTR_TO USINT; pole : ARRAY [0..4] OF REAL; res : REAL; END_VAR p := ADR(e); res := pole[p^]; END_PROGRAM
Hodnota jednotlivých položek enumerace a datový typ použitý pro uschování hodnoty je IEC normou definován jako implementačně závislý a tak kód, který se na hodnotu obrací, nemusí být přenositelný mezi systémy různých výrobců.
Díky za vysvětlení.
Tento dotaz je vyřešený.