STACK
INT
Àðãóìåíòû:
PUSH BOO êîìàíäà “PUSH” (íà ïåðåäíåì ôðîíòå)
äîáàâèòü çíà÷åíèå IN â âåðõóøêó ñòåêà
POP BOO êîìàíäà “POP” (íà ïåðåäíåì ôðîíòå)
óäàëèòü èç âåðõóøêè ñòåêà ïîñëåäíåå ñîõðàíåííîå çíà÷åíèå
R1 BOO ñáðîñèòü ñòåê â ïóñòîå ñîñòîÿíèå
IN INT ñîõðàíÿåìîå çíà÷åíèå
N INT ðàçìåð ñòåêà îïðåäåëåííûé ïðèëîæåíèåì
EMPTY BOO TRUE åñëè ñòåê ïóñòîé
OFLO BOO ïåðåïîëíåíèå: TRUE åñëè ñòåê ïåðåïîëíåí
OUT INT çíà÷åíèå â âåðõóøêå ñòåêà
Îïèñàíèå:
Óïðàâëÿåò ñòåêîì öåëûõ çíà÷åíèé.
Ôóíêöèîíàëüíûé áëîê “STACKINT” âêëþ÷àåò îïðåäåëåíèå ïåðåäíåãî ôðîíòà äëÿ êîìàíä PUSH è POP. Ìàêñèìàëüíûé ðàçìåð ñòåêà 128. Ðàçìåð ñòåêà îïðåäåëåííûé ïðèëîæåíèåì - N íå ìîæåò áûòü ìåíüøå 1 è áîëüøå 128.
Çàìåòèì, ÷òî çíà÷åíèå OFLO äåéñòâèòåëüíî òîëüêî ïîñëå ñáðîñà (R1 áûëî óñòàíîâëåíî â TRUE, ïî êðàéíåé ìåðå, îäíàæäû è îáðàòíî â FALSE)
(*FBD ïðèìåð áëîêîâ “STACKINT” : óïðàâëåíèå îøèáêàìè*)
(* ST Ýêâèâàëåíò: Ìû ïðåäïîëàãàåì, ÷òî STACKINT1 - ýòî ýêçåìïëÿð áëîêà STACKINT *)
STACKINT1(err_detect, acknoledge, manual_mode, err_code, max_err);
appli_alarm := auto_mode AND NOT(STACKINT1.EMPTY);
err_alarm := STACKINT1.OFLO;
last_error := STACKINT1.OUT;
(* IL Ýêâèâàëåíò: *)
LD err_detect
ST STACKINT1.push
LD acknoledge
ST STACKINT1.pop
LD manual_mode
ST STACKINT1.r1
LD err_code
ST STACKINT1.IN
LD max_err
ST STACKINT1.N
CAL STACKINT1
LD auto_mode
ANDN STACKINT1.empty
ST appli_alarm
LD STACKINT1.OFLO
ST err_alarm
LD STACKINT1.OUT
ST last_error