Betöltés…
WAGO Hungária

CODESYS 3.5 – Fájlok írása és olvasása

Jó, de minek?

Előfordul, hogy olyan feladattal találja szembe magát egy programozó, hogy a CODESYS futásidejű környezeten kívül valamiféle adatot kell tárolnia a programnak, vagy netalántán be kell olvasson egy fájlt, amit fel kell dolgoznia. A natív CODESYS megoldás a SysFile könyvtár használata, viszont a WAGO funkció gyűjteménye ennél felhasználóbarátabb megoldást kínál.

Az általános WAGO megoldás: WagoAppFileDir

A WagoAppFileDir könyvtár tartalmaz kompakt és testreszabható megoldást is általános fájlok írására és olvasására. A két legegyszerű kompakt funkcióblokk az FbReadWholeFile_cpt és FbWriteWholeFile_cpt.

1. ábra – Egész fájlok írása és olvasása

Az xWrite változó billentésével megtörténik a fájl kimentése, majd az xRead változó billentésével megtörténik a beolvasása is. Semmire nincs szükség, csupán a fájl nevére, és a memória terület pointeres helyére és méretére, amit kezeltetni szeretnénk a funkció blokkokkal. Ebben a példában STRING típusú változók ADR() utasítással lekért memória címét adtuk meg bemenetként, a mérete a karaktersorozatnak pedig első esetben a STRING karakteres hossza, második esetben pedig a változó memóriában lefoglalt területének a mérete. Ezekkel a bemenetekkel csak annyi bájtnyi adatot írunk ki, mint amire szükségünk van, és annyi bájtnyi adatot olvasunk ki, mint amennyi belefér a változónkba. A „teszt.txt” fájl a PLC fájlrendszerében a CODESYS számára ismert alapértelmezett útvonalon jön létre, tehát a „/home/admin/teszt.txt” útvonalon. Egy SD kártya „Files” mappába való mentés esetén a helyes útvonal „/media/sd/Files/teszt.txt” lenne. Fontos, hogy az írást végző funkcióblokk minden xWrite aktív jel hatására felülírja az útvonalon lévő fájlt!

Természetesen a kényelmes doboz megoldások mindig együtt járnak azzal a kellemetlenséggel, hogy nem lehet őket testre szabni. Erre megoldás az FbGeneralFile, méghozzá kész mintapéldával.

2. ábra – FbGeneralFile a Library Manager-en belül

 

 

TYPE eProgress  // for the state machine

(

  idle := 0,

  opening,

  writing1,

  writing2,

  closing,

  terminated

); END_TYPE

 

VAR

  Progress : eProgress;      // a state machine

  File     : FbGeneralFile;

END_VAR

 

File();

CASE Progress OF

 

idle:

  IF <startcondition> THEN

     File.Open(‘Filename’,FAM_WRITE,0,FALSE);

     progress := opening;

  END_IF

 

opening:

  IF File.xTerminated THEN

     File.Write(ImportantData,SizeOf(ImportantData));

     progress := writing1;

  END_IF

 

writing1:

  IF File.xTerminated THEN

     File.Write(MoreData,SizeOf(MoreData);

     progress := writing2;

  END_IF

 

writing2:

  IF File.xTerminated THEN

     File.Close();

     progress := closing;

  END_IF

 

closing:

  IF File.xTerminated THEN

     progress := terminated;

  END_IF

 

END_CASE

 

Ez a funkcióblokk tartalmazza a más programozási nyelveknél már megszokott funkciókat, és lehetővé teszi a fájl tartalmának szabad felépítését.

Az adatmentős WAGO megoldás: WagoAppDatalogger

A fájlkezelés speciális, de gyakori alkalmazásaira már vannak elérhető funkció blokkok. PLC-s rendszerekről beszélve talán az egyik leggyakoribb ilyen jellegű feladat a mérési adatok gyűjtése majd tárolása. A WAGO PLC-k legjava bővíthető SD vagy mikro SD kártyával, így célszerű lehet ezeket az adatokat ezeken az adathordozókon eltárolni legalább ideiglenesen. Erre a feladatra kész megoldásként a FbDatalogger használható, mely képes CSV fájlokba ciklikusan vagy esemény vezérelt módon mérési adatokat gyűjteni.

3. ábra – Egyszerű FbDatalogger példa egy érték ciklikus kimentésével

4. ábra – A létrehozott fájlok megnyithatók táblázatkezelő szoftverekkel

Ez a funkcióblokk együttműködik egy másik Data Plotter nevezetű WAGO megoldással, ami a lementett fájlok megnyitását, grafikus megjelenítését és letöltését teszi lehetővé. A https://www.wago.com/hu/d/7402 oldalról ingyenesen letölthető, és a PLC-re való feltelepítés után azonnal látja is a behelyezett SD kártyán lévő fájlokat.

5. ábra – Data Plotter példa

A naplózós WAGO megoldás: WagoSysLog

Ennek a munkakönyvtárnak a használata már több programozási tapasztalatot igényel, viszont nagyon egyszerűvé teszi az ideiglenesek naplófájlok készítését. Az FbLogger funkció blokk remekül használható egyszerű események naplózására, mint például egy hibával zárult Modbus lekérdezésre vagy egy kapcsoló kézi üzemmódba kapcsolására. Fontos, hogy alap esetben a létrejövő wago_plc_log.log fájl a „/var/log” mappába kerül, aminek a tartalma újraindítás során törlődik. Egy rövid példa a használatára:

 

VAR

    myLogger     :   FbLogger(‘MyLogger’);

    mySysLogChannel     :   FbLogChSysUdp(‘WAGO’);

    xIsInit             :   BOOL;

    xLogThis             :   BOOL;

END_VAR

 

IF NOT xIsInit THEN

    myLogger.RegisterLogChannel(mySysLogChannel);

    xIsInit := TRUE;

END_IF

IF xLogThis THEN

    myLogger.writeMsg(   ‘FbCustom’,    

                            eSysLogPriority.LOG_INFO,

                            ‘Valami történt…’

                        );

    xLogThis := FALSE;

END_IF