Datové moduly

Datové moduly specifikují přístup k paměti, hardwarovým I/O modulům a přenosovým modulům. Jejich smyslem je sblížit přístup uživatele k technickým a paměťovým prostředkům a umožnit mu přehledné adresování těchto.

Globální přístup k prvkům datových modulů je řešen přes tabulku proměnných. Do této tabulky přistupuje programátor s jedinečným názvem proměnné. V tabulce je pak určen přístup ke konkrétnímu datovému modulu a jeho prvku.

Typy datových modulů

Tři typy datových modulů jsou specifikovány níže. V programu lze přistupovat ke všem specifikovaným modulům prostřednictvím jedinečného jména proměnné.

I/O module Vstup/výstupní moduly. Tyto obsahují informace o datech I/O hardwarových karet. Jsou importovány z dodaných souborů.
Memory module Paměťové moduly. Je dodáván implicitní globální datový modul pro uchování proměnných vně programového bloku, modul pro uchování dat při vypnutí přístroje a speciální paměťový modul pro čítače/časovače. Všechny paměťové moduly lze kapacitně rozšířit. Datových modulů si můžete založit prakticky "nekonečné množství", které Vám dovolí kapacita paměti. Jen jeden však bude implicitní "globální".
Transfer module Paměťové moduly. Je dodáván implicitní datový modul pro komunikaci Netbus, který lze kapacitně rozšířit. K tomuto přísluší ovladač rozhraní Netbus pro kumunikaci se síťovými prostředky.

Jak je patrné, každý modul má specifické použití, zřejmé z tabulky. Mohu-li však poradit, zejména pro potřeby rychlých aplikací je mezi jejich použitím velký rozdíl. Pro udržování dat mimo programový blok (a tedy dosažitelných ve všech blocích) je nejužitečnější použití importovaného paměťového modulu "Global". Příčinou je imlicitní datový segment, jehož selektor je v segmetovém registru DS a tudíž nejrychleji přístupný. Selektor v DS registru se po dobu běhu aplikace neměmí. K ostatním datovým segmentům (včetně I/O) systém používá explicitní segmentové registry, což má zvýšené časové nároky. Změna selektoru v segmentovém registru obnáší časové nároky v desítkách nanosekund - procesor načítá deskriptor segmentu. Toto zpoždění může být v robustním programu, zaměřeném na rychlost, významné.

V této souvislosti je nutné uvést, že použití lokálních proměnných toto zpoždění nevykazuje, jelikož při jejich adresaci je použit implicitní zásobníkový segment.

Optimalizace přístupu k paměti

Hendikep časových nároků na změnu adresovacího segmentu (viz výše) řeší překladač hromadným přenosem dat na zásobník (pokud jsou alokována v jiném než globálním datovém segmentu a pokud jsou v programovém bloku/sekci použita)a to buď na začátku sekce v případě programových sekcí Running a Finally nebo na začátku bloku v ostatních případech. Na konci zpracování pak data hromadně ukládá do příslušných segmentů. Toto činí programový kořen výběrově pro data, jež jsou v sekci/bloku použita více než 1x. V případě volání programového bloku, jež se nachází v sekci Running a Finally jsou uvnitř volaných bloků použita aktuální data na zásobníku, pokud na něm již jsou. V opačném případě je pro násobnější použití na zásobník přepíší.

Zadání datových modulů

Moduly se zadávají importem z dodaného databázového souboru. U některých lze modifikovat jejich velikost (paměťové), u jiných nikoliv. Dejme si příklad importu do nového projektu. Klepněte na "Data / Modules", obdržíte kartu modulů. Moduly importujeme z dodaného souboru. Tento má příponu ".O3mds" a po jeho použití jej nebudete dále potřebovat, všechny potřebné informace o modulu se přepíší do souboru projektu.

Na kartě s prázdným seznamem si vyberte z nabízených typů modulů, začněme pamětí. Klepněte na tlačítko Mem.

Globální paměť budete potřebovat pro globální proměnné. Vyberte označenou. Po výběru vyplňte Váš název modulu, abyste si nemuseli pamatovat cizí. Musí být, samozřejmě, mezi moduly jednoznačné, program Vám nedovolí jinak. Zadejte své jedinečné jméno modulu.

Od nynějška má pro Vás význam jen toto Vaše jméno modulu (GlobalVars), jež bude uváděno v seznamu modulů při výběru těchto v deklaraci proměnných.

V seznamu "Section" jsou podrobnosti, vztahující se k datovému segmentu v paměti. Jiné než paměťové moduly mohou mít více segmentů, např. I/O moduly jsou pro bezpečnost rozlišeny na vstupní a výstupní (do vstupních nelze zapisovat), analogové, digitální, čítače...

Určitě budete potřebovat data, jež se mají udržovat i po vypnutí přístroje. K tomuto účelu má přístroj paměťový modul Stored se segmentem Permanent. V seznamu paměťových modulů jej také naleznete.

Budete-li používat programové čítače/časovače, nainstalujte si i modul Counters, nazveme si jej třeba Timers. Proměnné v tomto modulu PLC automaticky modifikuje, každou milisekundu přičítá ke všem použitým jedničku. Ke každému symbolu čítače/časovače pak v návrhu bloku přiřadíte jednu proměnnou, program Vám nabídne vždy jen neobsazenou, takže se nemůžete zmýlit.

Přidal jsem transferový modul Netbus pro komunikaci s vnějškem a nazval jej pro lepší orientaci Netbus, k jeho využití se ještě vrátíme.

Nyní přehled všech potřebných použitých datových modulů:



Všimněte si položky Status u datového modulu GlobalVars, resp. jejího zvýraznění tučným písmem. Takto je označen paměťový modul, který je implicitní globální, tzn. jeho selektor bude v segmentové registru DS, tudíž budou data přístupná nejrychleji. Přidáte-li si další obecný datový modul statutu Memory, již nebude implicitním globálním ale jen globálním, tzn. jeho data budou přístupná ze všech programových bloků, ale s explicitním datovým selektorem. Implicitu si však můžete změnit levou klávesou myši na jiný modul Memory, přidáte-li si jej.

Modifikace dat

Protože jsou všechny údaje modulů přednastaveny, nepotřebujete je (až na výjímky) měnit. Jediným údajem hodným změny je u datových a transferových modulů údaj Size v tabulce Sections (viz žlutě zvýrazněná položka), neboli délka datového segmentu ve slabikách. Tuto změníte kliknutím levou klávesou myši na údaj. Modifikovatelná data jsou označena žlutým pozadím a v následujících I/O modulech je jich více.

I/O moduly

Dostáváme se k instalaci I/O modulů použitím ikony I/O. Nainstaloval jsem základní modul, jež má širokou bázi vstup/výstupních převodníků. Zde si ukážeme další výjímky z připravenosti dat, neboť v široké škále převodníků není žádoucí, aby pracovaly i nepoužité kanály. Zvyšuje to spotřebu, zahřívá čip a opotřebovává jej.



Jednotlivé sekce lze podle obrázku povolit nebo zakázat levou klávesou myši. Ve sloupci Enable u položek s bleděmodrým pozadím nepovolujete celou sekci ale vybrané prvky. V poli Enable je pak zveřejněn stav, kdy alespoň jeden prvek je povolen.



Například u analogového modulu povolíme první kanál. Poté můžeme vybrat jeden z režimů převodu analogového signálu.

Inicializace modulů

Moduly se nastavují při inicializaci kořene programu, to je ta část přeloženého programu, která připravuje prostředí pro běh programu, přeložaného z Vašeho zadání. Proto je nutné, aby inicializační data modulů byla zadána zde.

Nyní máme nainstalované potřebné moduly. Položky v seznamu I/O Allocate jsou signály I/O modulu, kterými jsou odkazy na prvky modulu - vstup/výstupní signály. Tyto Vám budou nabízeny programem při deklaraci proměnných v seznamu globálních proměnných. Tento seznam je zobrazován jen v případě zobrazení sekce I/O modulu.

V systému je ještě jeden modul a to zásobníkový pro lokální proměnné a vstupní a výstupní parametry. Tento si však program udržuje automaticky. V tabulce lokálních proměnných však najdete v rozbalovacím seznamu ve sloupci Module právě tři sekce zásobníkového modulu.

Změny modulů

Moduly můžeme přejmenovat nebo smazat. Použijte k tomu kontextové menu kliknutím pravou klávesou myši na jméno konkrétního modulu a vyberte možnost z vyskakovacího menu. Funkce provedou maximum ve změnách, které jste zadali, tzn. opraví údaje ve všech odkazech na modul, případně odkazy na tyto v objektech, jež se na modul odkazují.

Rename

Přejmenujeme modul. Funkce provede rovněž přejmenování ve všech odkazech, tzn. ve všech proměnných, které se na modul odkazují.

Delete

Smažeme modul. Funkce prochází všechny proměnné a ptá se, zda chcete zrušit odkaz u proměnné, která se na modul odkazuje nebo chcete zrušit celou proměnnou. Po dotazech na proměnné se funkce zeptá, zda chcete skutečně všechny změny provést tak, jak jste je zadali. Při souhlasu smaže proměnné a všechny odkazy na tuto v programových blocích v případech, kdy jste s tímto souhlasili. V ostatních smaže jen odkazy u proměnných a tyto zachová. Abyste mohli program úspěšně přeložit, musíte smazané odkazy doplnit.