ISaGRAF. Version 3.4
3069e04e

Îïåðàòîðû IL


Ñëåäóþùàÿ òàáëèöà  ïðåäñòàâëÿåò ñòàíäàðòíûå îïåðàòîðû ÿçûêà IL:

Îïåðàòîð

Ìîäèôèêàòîð

Îïåðàíä

Îïèñàíèå

LD



N

ïåðåìåííàÿ, êîíñòàíòà

Çàãðóæàåò îïåðàíä

ST

N

ïåðåìåííàÿ

Çàïîìèíàåò òåêóùèé ðåçóëüòàò

S

R

BOO ïåðåìåííàÿ

BOO ïåðåìåííàÿ

Óñòàíàâëèâàåò íà TRUE

Ñáðàñûâàåò íà FALSE

AND

&

OR

XOR

N   (

N   (

N   (

N   (

BOO

BOO

BOO

BOO

ëîãè÷åñêîå È

ëîãè÷åñêîå È

ëîãè÷åñêîå ÈËÈ

èñêëþ÷àþùåå ÈËÈ

ADD

SUB

MUL

DIV

(

(

(

(

ïåðåìåííàÿ, êîíñòàíòà

ïåðåìåííàÿ, êîíñòàíòà

ïåðåìåííàÿ, êîíñòàíòà

ïåðåìåííàÿ, êîíñòàíòà

Ñëîæåíèå

Âû÷èòàíèå

Óìíîæåíèå

Äåëåíèå

GT

GE

EQ

LE

LT

NE

(

(

(

(

(

(

ïåðåìåííàÿ, êîíñòàíòà

ïåðåìåííàÿ, êîíñòàíòà

ïåðåìåííàÿ, êîíñòàíòà

ïåðåìåííàÿ, êîíñòàíòà

ïåðåìåííàÿ, êîíñòàíòà

ïåðåìåííàÿ, êîíñòàíòà

Ïðîâåðèòü: >

Ïðîâåðèòü: >=

Ïðîâåðèòü: =

Ïðîâåðèòü: <=

Ïðîâåðèòü: <

Ïðîâåðèòü: <>

CAL

JMP

RET

C   N

C   N

C   N

Ýêçåìïëÿð ôóíêöèîíàëüíîãî áëîêà

èìÿ

ìåòêà

Âûçîâ ôóíêöèîíàëüíîãî áëîêà

Ïðûæîê íà ìåòêó

Âîçâðàò èç ïîäïðîãðàììû

)

Âûïîëíèòü çàäåðæàííóþ îïåðàöèþ

 ñëåäóþùåé ãëàâå îïèñàíû îïåðàòîðû, êîòîðûå ÿâëÿþòñÿ ñïåöèôè÷åñêèìè äëÿ ÿçûêà IL, äðóãèå ñòàíäàðòíûå îïåðàòîðû ìîæíî íàéòè â ãëàâå “Ñòàíäàðòíûå îïåðàòîðû, ôóíêöèîíàëüíûå áëîêè è ôóíêöèè”.

        Îïåðàòîð LD

Îïåðàöèÿ:                  çàãðóæàåò çíà÷åíèå â òåêóùèé ðåçóëüòàò

Äîïóñòèìûå ìîäèôèêàòîðû:         N

Îïåðàíä:                    êîíñòàíòà, âíóòðåííÿÿ, âõîäíàÿ èëè âûõîäíàÿ ïåðåìåííàÿ

                                     

Ïðèìåð:

(* ÏÐÈÌÅÐ LD ÎÏÅÐÀÖÈÉ *)

LDex:                LD              false           (* ðåçóëüòàò := FALSE boolean constant *)

                         LD              true             (*ðåçóëüòàò := TRUE boolean constant *)

                         LD              123             (*ðåçóëüòàò := integer constant *)

                         LD              123.1          (*ðåçóëüòàò := real constant *)


                         LD              t#3ms         (*ðåçóëüòàò := time constant *)

                         LD              boo_var1    (*ðåçóëüòàò := boolean variable *)

                         LD              ana_var1    (*ðåçóëüòàò := analog variable *)

                         LD              tmr_var1     (*ðåçóëüòàò := timer variable *)

                         LDN            boo_var2    (*ðåçóëüòàò := NOT ( boolean variable ) *)

       
Îïåðàòîð ST

Îïåðàöèÿ:                  çàïîìèíàåò òåêóùèé ðåçóëüòàò â ïåðåìåííîé

                                      Òåêóùèé ðåçóëüòàò ýòèì îïåðàòîðîì íå èçìåíÿåòñÿ

Äîïóñòèìûå ìîäèôèêàòîðû:         N

Îïåðàíä:                    âíóòðåííÿÿ èëè âûõîäíàÿ ïåðåìåííàÿ

Ïðèìåð:

                                            (* ÏÐÈÌÅÐ ST ÎÏÅÐÀÖÈÉ *)

STboo:              LD              false

                         ST              boo_var1    (* boo_var1 := FALSE *)

                         STN            boo_var2    (* boo_var2 := TRUE *)

STana:              LD              123

                         ST              ana_var1    (* ana_var1 := 123 *)

STtmr:               LD              t#12s

                         ST              tmr_var1     (* tmr_var1 := t#12s *)

       
Îïåðàòîð S

Îïåðàöèÿ:                  çàïîìèíàåò TRUE â áóëåâñêîé ïåðåìåííîé, åñëè òåêóùèé ðåçóëüòàò èìååò çíà÷åíèå TRUE. Íèêàêèõ îïåðàöèé íå âûïîëíÿåòñÿ, åñëè òåêóùèé ðåçóëüòàò ðàâåí FALSE. Òåêóùèé ðåçóëüòàò íå ìîäèôèöèðóåòñÿ.

Äîïóñòèìûå ìîäèôèêàòîðû:         (íåò)

Îïåðàíä:                    âíóòðåííÿÿ èëè âûõîäíàÿ áóëåâñêàÿ ïåðåìåííàÿ

Ïðèìåð:

                                            (* ÏÐÈÌÅÐ S ÎÏÅÐÀÖÈÉ *)

SETex:              LD              true             (*òåêóùèé ðåçóëüòàò := TRUE *)

                         S                boo_var1    (* boo_var1 := TRUE *)

                                                               (*òåêóùèé ðåçóëüòàò íå èçìåíÿåòñÿ *)

                         LD              false           (*òåêóùèé ðåçóëüòàò := FALSE *)



                         S                boo_var1    (* íè÷åãî íå äåëàòü - boo_var1 íå èçìåíÿåòñÿ *)

       
Îïåðàòîð R

Îïåðàöèÿ:                  çàïîìèíàåò FALSE â áóëåâñêîé ïåðåìåííîé åñëè òåêóùèé ðåçóëüòàò èìååò çíà÷åíèå TRUE. Íèêàêèõ îïåðàöèé íå âûïîëíÿåòñÿ åñëè òåêóùèé ðåçóëüòàò ðàâåí FALSE. Òåêóùèé ðåçóëüòàò íå ìîäèôèöèðóåòñÿ.

Äîïóñòèìûå ìîäèôèêàòîðû:         (íåò)

Îïåðàíä:                    âíóòðåííÿÿ èëè âûõîäíàÿ áóëåâñêàÿ ïåðåìåííàÿ

Ïðèìåð:

                                                               (* ÏÐÈÌÅÐ R ÎÏÅÐÀÖÈÉ *)

RESETex:          LD              true             (*òåêóùèé ðåçóëüòàò:= TRUE *)

                         R                boo_var1    (* boo_var1 := FALSE *)

                                                               (*òåêóùèé ðåçóëüòàò íå èçìåíÿåòñÿ *)

                         ST              boo_var2    (* boo_var2 := TRUE *)

                         LD              false           (*òåêóùèé ðåçóëüòàò:= FALSE *)

                         R                boo_var1    (*íè÷åãî íå äåëàòü - boo_var1 íå èçìåíÿåòñÿ *)

       
Îïåðàòîð JMP

Îïåðàöèÿ:                  ïðûãàåò íà óêàçàííóþ ìåòêó

Äîïóñòèìûå ìîäèôèêàòîðû:         C N

Îïåðàíä:                    ìåòêà îïðåäåëåííàÿ â òîé æå IL ïðîãðàììå

Ïðèìåð:

(* ñëåäóþùèé ïðèìåð ïðîâåðÿåò çíà÷åíèå àíàëîãîâîãî ñåëåêòîðà  (0 èëè 1 èëè 2)                                    *)

(* ÷òîáû óñòàíîâèòü îäèí èç 3 áóëåâñêèõ âûõîäîâ. Ïðîâåðêà  "ðàâíî 0" äåëàåòñÿ                                   *)

(* îïåðàòîðîì JMPC                                          *)

JMPex:              LD              selector      (* selector is 0 or 1 or 2 *)

                         BOO                              (* ïðåâðàùåíèå â boolean *)

                         JMPC          test1           (* if selector = 0 then *)

                         LD              true

                         ST              bo0             (* bo0 := true *)

                         JMP            JMPend       (* êîíåö ïðîãðàììû*)



test1:                LD              selector

                         SUB            1                 (* óìåíüøèòü selector: òåïåðü 0 èëè 1 *)

                         BOO                              (* ïðåâðàùåíèå â boolean *)

                         JMPC          test2           (* if selector = 0 then *)

                         LD              true

                         ST              bo1             (* bo1 := true *)

                         JMP            JMPend       (* êîíåö ïðîãðàììû*)

test2:                LD              true             (* ïîñëåäíÿÿ âîçìîæíîñòü *)

                         ST              bo2             (* bo2 := true *)

                         JMP            end:            (* êîíåö  IL ïðîãðàììû*)

       
Îïåðàòîð RET

Îïåðàöèÿ:                  çàêàí÷èâàåò òåêóùèé ñïèñîê èíñòðóêöèé. Åñëè IL ïîñëåäîâàòåëüíîñòü - ïîäïðîãðàììà, òî òåêóùèé ðåçóëüòàò âîçâðàùàåòñÿ â âûçûâàþùóþ ïîäïðîãðàììó.

Äîïóñòèìûå ìîäèôèêàòîðû:         C N

Îïåðàíä:                    (íåò)

Ïðèìåð:

(* ñëåäóþùèé ïðèìåð ïðîâåðÿåò çíà÷åíèå àíàëîãîâîãî ñåëåêòîðà  (0 èëè 1 èëè 2)                                    *)

(* ÷òîáû óñòàíîâèòü îäèí èç 3 áóëåâñêèõ âûõîäîâ. Ïðîâåðêà  "ðàâíî 0" äåëàåòñÿ                                   *)

(* the JMPC operator                                                                                                                                              *)

JMPex:              LD              selector      (* selector ðàâåí 0 èëè 1 èëè 2 *)

                         BOO                              (* ïðåâðàùåíèå â boolean *)

                         JMPC          test1           (* if selector = 0 then *)

                         LD              true

                         ST              bo0             (* bo0 := true *)

                         RET                               (* end - return 0 *)

                                                               (* óìåíüøèòü selector *)

test1:                LD              selector



                         SUB            1                 (* selector òåïåðü 0 èëè 1 *)

                         BOO                              (* ïðåâðàùåíèå â boolean *)

                         JMPC          test2           (* if selector = 0 then *)

                         LD              true

                         ST              bo1             (* bo1 := true *)

                         LD              1                 (* çàãðóçèòü äåéñòâèòåëüíîå çíà÷åíèå selector *)

                         RET                               (* end - return 1 *)

                                                               (* ïîñëåäíÿÿ âîçìîæíîñòü *)

test2:                RETNC                           (* âîçâðàùàåò åñëè selector ñîäåðæèò *)

                                                               (* íåïðàâèëüíîå çíà÷åíèå *)

                         LD              true

                         ST              bo2             (* bo2 := true *)

                         LD              2                 (* çàãðóçèòü äåéñòâèòåëüíîå çíà÷åíèå selector *)

                                                               (* êîíåö - âîçâðàò 2 *)

       
Îïåðàòîð “)”

Îïåðàöèÿ:                  âûïîëíÿåò çàäåðæàííóþ îïåðàöèþ. Çàäåðæàííàÿ îïåðàöèÿ îáîçíà÷àåòñÿ “(“

Äîïóñòèìûå ìîäèôèêàòîðû:         (íåò)

Îïåðàíä:                    (íåò)

Ïðèìåð:

(* Ñëåäóþùàÿ ïðîãðàììà èñïîëüçóåò çàäåðæàííûå îïåðàöèè: *)

(* res := a1 + (a2 * (a3 - a4) * a5) + a6; *)

Delayed:           LD              a1               (* result := a1; *)

                         ADD(          a2               (* çàäåðæàííûé ADD - result := a2; *)

                         MUL(          a3               (* çàäåðæàííûé MUL - result := a3; *)

                         SUB            a4               (* result := a3 - a4; *)

                         )                                    (*âûïîëíèòü çàäåðæàí. MUL-result:=a2*(a3-a4); *)

                         MUL            a5               (* result := a2 * (a3 - a4) * a5; *)



                         )                                    (* âûïîëíèòü çàäåðæàííûé ADD *)

                                                               (* result := a1 + (a2 * (a3 - a4) * a5); *)

                         ADD           a6               (* result := a1 + (a2 * (a3 - a4) * a5) + a6; *)

                         ST              res              (*çàïîìíèòü òåêóù. ðåçóëüòàò â ïåðåìåííîé res *)

        Âûçîâ ïîäïðîãðàìì èëè ôóíêöèé


Ïîäïðîãðàììà èëè ôóíêöèÿ ( íàïèñàííàÿ íà ëþáîì èç ÿçûêîâ IL, ST, LD, FBD èëè “C”) âûçûâàåòñÿ èç ÿçûêà IL, èñïîëüçóÿ èìÿ â êà÷åñòâå îïåðàòîðà.

Îïåðàöèÿ:                  âûïîëíÿåò ïîäïðîãðàììó èëè ôóíêöèþ - çíà÷åíèå âîçâðàùåííîå ïîäïðîãðàììîé èëè ôóíêöèåé çàïîìèíàåòñÿ â òåêóùåì ðåçóëüòàòå IL

Äîïóñòèìûå ìîäèôèêàòîðû:         (íåò)

Îïåðàíä:                    Ïåðâûé ïàðàìåòð äîëæåí áûòü çàïîìíåí â òåêóùåì ðåçóëüòàòå ïåðåä âûçîâ. Îñòàëüíûå ïàðàìåòðû çàïèñûâàþòñÿ â ïîëå îïåðàíäà ÷åðåç çàïÿòóþ

Ïðèìåð:

(* Âûçûâàþùàÿ ïðîãðàììà: ïðåâðàùàåò àíàëîãîâîå çíà÷åíèå â âðåìåííîå *)

Main:                 LD                     bi0

SUBPRO           bi1,bi2  (*âûçâàòü ïîäïðîãðàììó ÷òîáû ïîëó÷èòü àíàëîãîâîå çíà÷åíèå *)

ST                     result    (* result := çíà÷åíèå âîçâðàùåííîå ïîäïðîãðàììîé *)

                         GT                    vmax          (*ïðîâåðêà ïåðåïîëíåíèÿ *)

                         RETC                                   (*âîçâðàò ïî ïåðåïîëíåíèþ *)

                         LD                     result

                         MUL                  1000           (*ïðåâðàòèòü ñåêóíäû â ìèëëèñåêóíäû *)

                         TMR                                     (* ïðåâðàòèòü â òàéìåð *)

                         ST                     tmval     (* çàïîìèíàåò ïðåâðàùåííîå çíà÷åíèå â òàéìåðå*)

(* Âûçâàííàÿ ïîäïðîãðàììà 'SUBPRO' : âû÷èñëÿåò àíàëîãîâîå çíà÷åíèå *)

(* çàäàííîå êàê äâîè÷íîå ÷èñëî òðåõ áóëåâñêèõ âõîäîâ: in0, in1, in2 - òðè ïàðàìåòðà ïîäïðîãðàììû*)

                         LD              in2             



                         ANA                              (* result = ana (in2); *)

                         MUL            2                 (* result := 2*ana (in2); *)

                         ST              temporary   (* temporary := result *)

                         LD              in1             

                         ANA

                         ADD           temporary   (* result := 2*ana (in2) + ana (in1); *)

                         MUL            2                 (* result := 4*ana (in2) + 2*ana (in1); *)

                         ST              temporary   (* temporary := result *)

                         LD              in0             

                         ANA

                         ADD           temporary   (* result := 4*ana (in2) + 2*ana (in1)+ana (in0); *)

                ST     SUBPRO     (* âîçâðàòèòü òåêóùèé ðåçóëüòàò â âûçûâàþùóþ ïðîãðàììó*)

        Âûçîâ ôóíêöèîíàëüíûõ áëîêîâ: îïåðàòîð CAL


Îïåðàöèÿ:                  âûçûâàåò ôóíêöèîíàëüíûé áëîê

Äîïóñòèìûå ìîäèôèêàòîðû:         C N

Îïåðàíä:                    Èìÿ ôóíêöèîíàëüíîãî áëîêà. Âõîäíûå ïàðàìåòðû áëîêà äîëæíû áûòü ïðèñâîåíû ñ ïîìîùüþ îïåðàòîðîâ LD/ST äî âûçîâà. Âûõîäíûå ïàðàìåòðû ìîãóò áûòü èñïîëüçîâàíû.

                                     

Ïðèìåð 1:

(* Âûçîâ ôóíêöèîíàëüíîãî áëîêà SR : SR1 - ýêçåìïëÿð SR *)

LD                     auto_mode

AND                  start_cmd

ST                     SR1.set1

LD                     stop_cmd

ST                     SR1.reset

CAL                  SR1

LD                     SR1.Q1

ST                     command

(* FBD ýêâèâàëåíò : *)



Ïðèìåð 2

(*Ìû ïðåäïîëàãàåì, ÷òî R_TRIG1 - ýòî ýêçåìïëÿð áëîêà R_TRIG è CTU1 - ýòî ýêçåìïëÿð áëîêà CTU*)

LD                     command

ST                     R_TRIG1.clk

CAL                  R_TRIG1

LD                     R_TRIG1.Q

ST                     CTU1.cu

LDN                   auto_mode

ST                     CTU1.reset

LD                     100

ST                     CTU1.pv

CAL                  CTU1

LD                     CTU1.Q

ST                     overflow

LD                     CTU1.cv

ST                     result

(* FBD ýêâèâàëåíò : *)




Ñîäåðæàíèå ðàçäåëà