- Vytvoril D2000 Dev Team na okt 12, 2017
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
; 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
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.
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:
Pridať komentár