WAIT

WAIT

Akcia WAIT


Funkcia

Dočasné pozastavenie vykonávania akcií.

Deklarácia

WAIT expression

 

alebo

 

WAIT

Parametre

expression

in

Výraz typu Bool - podmienka.

Popis

  • Akcia WAIT s výrazom - pozastavenie vykonávania akcií až po splnenie podmienky. Podmienka je splnená, keď výraz nadobudne hodnotu @TRUE.

  • Akcia WAIT bez výrazu - pozastavenie vykonávania akcií po vykonanie posledného priradenia. Tento variant akcie umožňuje odstránenie časových hazardov a taktiež kontrolu úspešnosti priradenia. Priradenie do lokálnej premennej je okamžité (synchrónne s vykonávaním akcií).
    Naproti tomu priradenie do objektu (nastavenie hodnoty objektu) predstavuje len žiadosť a jeho vykonanie môže určitý čas trvať. Tu existuje riziko vzniku časového hazardu.

Príklad

Predpokladá existenciu objektu U.Int typu Užívateľská premenná, typ hodnoty Int.

 

; priradenie s čakaním U.Int := 1 ; priradenie hodnoty WAIT ; čakanie na priradenie ; ak akcia WAIT dopadla úspešne (bez chyby), objekt U.Int má ; určite hodnotu 1 IF U.Int = 1 THEN ; test hodnoty ; vetva THEN-ELSE sa vykoná vždy, lebo objekt U.Int má hodnotu 1 ELSE ; vetva ELSE-ENDIF sa nevykoná nikdy ENDIF U.Int := 2 ; v tomto prípade nie je zaručené, že ;objekt U.Int bude mať hodnotu 2 ; závisí to od momentálnej záťaže systému ... IF U.Int = 1 THEN ELSE ENDIF

 

Akcia WAIT umožňuje testovať úspešnosť priradenia hodnoty do objektu. Napríklad zápis do výstupného meraného bodu, ktorý realizuje proces D2000 KOM.

Príklad

Predpokladá existenciu objektu M.Cmd typu Meraný bod, typ výstupný celočíselný (Integer).

 

INT _maxWriteCount = 10 ; maximálny počet zápisov INT _writeCount ; počítadlo zápisov ON ERROR WriteFailed ; obsluha chyby _writeCount := 0 WriteRetry: IF _writeCount >= _maxWriteCount GOTO WriteLoopFailed _writeCount := _writeCount + 1 M.Cmd := 1 WAIT ; zápis prebehol úspešne END ; zápis prebehol neúspešne _maxWriteCount-krát WriteLoopFailed: END ; obsluha neúspešného zápisu WriteFailed: GOTO WriteRetry

 

Uvedený príklad ošetruje všetky chybové stavy, ktoré môžu vzniknúť pri zápise:

  • nebeží proces D2000 KOM

  • stanica nekomunikuje

  • zápis do zariadenia neprebehol úspešne

  • objekt nie je v manuálnom režime

V prípade, že ide o viacnásobné priradenie, je toto kontrolované ako celok. Musí v poriadku prebehnúť každý čiastkový zápis. Takáto situácia nastáva pri priradení hodnoty typu Štruktúra, ak v jednotlivý položkách sú odkazy na objekty.

Príklad

Objekt SD.Rec je typu Definícia štruktúry obsahuje jednu položku typu Int s menom Int a dve položky typu Objekt s menami Obj1 a Obj2.
Objekt SV.Rec je typu Štruktúrovaná premenná, má typ štruktúry SD.Rec a počet riadkov 2.
Objekty M.1, M.2, M.3 a M.4 sú výstupné merané body typu Int.

 

RECORD NOALIAS (SD.Rec) _locArr ; lokálna premenná typu Record ; vypnuté odkazy na objekty REDIM _locArr[2] ; zmena dĺžky poľa ; naplnenie hodnôt lokálnej premennej typu Record _locArr[1]^Int := 1 _locArr[1]^Obj1 := 1 _locArr[1]^Obj2 := 2 _locArr[2]^Int := 2 _locArr[2]^Obj1 := 3 _locArr[2]^Obj2 := 4 ; priradím odkazy na objekty SET SV.Rec[1]^Obj1 AS M.1 SET SV.Rec[1]^Obj2 AS M.2 SET SV.Rec[2]^Obj1 AS M.3 SET SV.Rec[2]^Obj2 AS M.4 WAIT ; realizácia zmeny odkazu v systéme P1: SET SV.Rec AS _locArr ; priradenie celej hodnoty WAIT

 

V príklade na riadku označenom návestím P1 sa uskutoční priradenie celkovo 6-tich hodnôt, pričom 4 priradenia realizujú zápis do meraných bodov (prostredníctvom odkazu na objekt). Úspešnosť operácie sa dá preveriť následnou akciou WAIT. Prípadný neúspech ľubovoľného priradenia spôsobí chybu.


Súvisiace stránky:

Akcie v skriptoch