Professional Documents
Culture Documents
BO CO CHUYN 2:
ti: Tm hiu ngn ng SCL trong S7-300. ng dng vit chng trnh iu khin n giao thng. Phn 1: Gii Thiu: Ngn ng SCL trong STEP7 ng dng cho dng PLC S7-300 ca Siemens l mt ngn ng lp trnh s dng cu lnh vit. N c cu trc gn ging vi ngn ng dng STL nhng c pht trin nhiu hn, gn ging vi cc ngn ng bc cao nh Pascal lm cho ngi lp trnh d thao tc hn v thn thin nh ngn ng lp trnh c cu trc. Ngn ng SCL da trn nn ca Pascal chnh v vy cch khai bo hay nhng cu lnh gn ging nh trong Pascal. Bi bo co nhm em gm 3 phn. Phn I chng em xin gii thiu v phn cng h S7-300 v cch ci t cc thnh phn v thng s cho 1 trm Phn II l phn tm hiu v ngn ng SCL. Phn ny l phn tm hiu cc thnh phn, cu trc chng trnh, cc cu lnh trong ngn ng SCL Phn III chng em xin trnh by chng trnh lp trnh ng dng n giao thng s dng ngn ng SCL.
Nhm I T04
Trang 1
Nhm I T04
Trang 2
To 1 Project mi c tn dengiaothong:
Nhm I T04
Trang 3
Nhm I T04
Trang 4
Nhm I T04
Trang 5
To 1 source file SCL: Vic to 1 file c nhim v ta s son tho chng trnh trn Source ny ri dch n
Nhm I T04
Trang 6
Bng nh Ngha Cc ng Vo Ra Bng nh ngha cc bin gip chng ta lp trnh nhanh hn v khng phi nh tn bin ng vo ra, ta ch cn gn cc ng vo ra thnh tn cc bin thc t.
Nhm I T04
Trang 7
To mt OB lp trnh:
ORGANIZATION_BLOCK (OB)
l nhng thao tc c bn nht thit lp cc thnh phn phn cng cho 1 trm S7-300 Ngoi ta khi thc hin xong bi ta c th dng chng trnh S7-PLSim m phng kt qu.
Nhm I T04
Trang 8
Nhm I T04
Bn c th s dng nhng khi c sn nh: nhng hm h thng hoc nhng khi hm h thng m c ci t trong h iu hnh ca CPU. Bn c th s dng nhng khi chng trnh SCL trong vic kt hp vi nhng khi chng trnh trong danh sch lnh (STL), Thang Logic(LAD), v s khi chc nng (FBD). iu ny c ngha l mt khi c vit trong SCL c th gi mt khi c vit trong STL, LAD, hoc FBD. Tng t, nhng khi SCL c th c gi trong STL, LAD, hoc chng trnh FDB. Ngn ng lp trnh ca STEP 7 v SCL (gi chn) v vy b sung ln nhau hon ho. Nhng i tng gc bn c th to ra vi SCL cho STEP 5 l tng thch tin vi 1 hoc 2 nhng ngoi l nh, ni cch khc cc chng trnh bn c th chnh sa, bin dch v g ri vi S7 SCL. Nhng khi SCL c th c bin dch li ngn ng lp trnh vo Danh sch lnh(STL) ca STEP 7. S bin dch li t STL sang SCL l khng th. Vi mt vi kinh nghim ca ngn ng lp trnh cp cao, SCL c th hc mt cch d dng. Khi to chng trnh, ngi vit chng trnh c cung cp y cc hm x l vn bn gc. Khi bn bin dch chng trnh ca bn, cc khi c to ra v c th chy trn tt c CPUs ca S7-300/400 b iu khin chng trnh vi CPU 314 hoc cao hn.
Trang 9
Nh vy: Tm li nhng ai c kinh nghim trong lp trnh cp cao, c cu trc nh nhng ngn ng nh Pascal, C th hc SCL rt nhanh. SCL c th lin kt v gi cc hm cc th vin c sn c lp trong STL, LAD, FDB vit hoc ngc li. Nh vy n rt linh hot. SCL l ngn ng da trn nn ca PASCAL nn vic vit cc hm tnh ton s hc phc tp nh Sin, COS, cn s hc thng kh phc tp trong LAD th vi SCL bn c th thc hin kh n gin.
Nhng loi khi Mt chng trnh SCl c cu trc n c thit k theo dng gm nhng module khc nhau. Mt chng trnh ln thng lm cho ngi lp trnh cm thy phc tp v c qu nhiu bin, qu nhiu s kin hay trng thi khc nhau. Chnh v vy SCl h tr vic phn nh chng trnh thnh cc module nh, bao gm nhng khi hm, th vin khc nhau, mi module nh ph trch 1 vic c th, ta ch vic thc hin tng khi nh ny. Ti chng trnh chnh ch vic tng hp li cc module nh vy vic lp trnh ht sc n gin. Cc module ny l:
OB
S t chc nhng khi hnh thnh giao tip gia h iu hnh S7 CPU v chng trnh ngi dng. Nhng t chc nhng khi ch r chui trong nhng khi ca chng trnh ngi dng c thc hin. Nhng khi chc nng l nhng khi logic vi d liu tnh. T mt FB c mt b nh, N c th c truy cp n l tham s (v d nh, outputs) ti bt k im trn chng trnh ngi dng. Hm l nhng khi logic m khng c b nh. T chng khng c b nh, nhng gi tr c tnh ton phi c x l ngay lp tc sau trc khi hm c gi.
Trang 10
FB
FC
Nhm I T04
DB
Nhng khi d liu l nhng vng d liu trong d liu ngi dng c lu. l nhng khi d liu chia s m c th truy cp bng tt c cc khi logic v l nhng khi d liu mu m c gn cho mt s gi FB ring. Kiu d liu ngi dng nh ngha c cu trc kiu d liu bn c th to ra cho nh yu cu ca chnh bn v s dng nhiu ln bn mun. Mt kiu d liu ngi dng nh ngha l hu ch pht sinh mt s khi d liu vi cng mt cu trc. UDTs c s dng khi nu chng l nhng khi.
UDT
i vi nhng ai lm quen vi PASCAL th cc modula ny tng t nh cc chng trnh con, Th tc (Proceduce ) hay Hm (Function)
Nhm I T04
Trang 11
D liu ra
Kt qu tnh ton
Cn bc 2, Bnh phng
Kho d liu
Dng d liu
Chn v gn nhng kiu khi sn c Nhng khi ring l c la chn theo cc ch tiu sau y: Chc nng Tn khi Chng trnh ngi s dng ch c th bt u mt Chu k OB OB. T nhng gi tr o s thu nhn mt cch tun hon, mt OB i vi mt chu trnh gi (OB1) c => yu cu. Phn ca chng trnh d liu ng vo v d liu ng ra c lp trnh trong OB. Tc v ph Gi tr o thu c yu cu mt khi Thu c FB vi mt b nh; ni cch khc, mt khi hm (FB), t => khi d liu a phng nht nh (v d nh, b m
Nhm I T04 Trang 12
vng) phi c gi t mt chu k chng trnh cho bc tip theo. V tr ct gi d liu (b nh) l khi d liu mu ACQUIRE_DATA. Nh FB cng c th iu khin a ch v la chn tc v ph ng ra, t d liu c c sm. Khi chn kiu ca khi cho tc v ph phn loi gi nh gi FB tr o v kt qu tnh ton, nh rng bn cn mt b m ng ra cha kt qu tnh ton cn bc hai v bnh phng cho mi gi tr o c. Ch thch hp => kiu khi bi vy l mt FB. T FB ny c gi bi mt FB khc cao hn trong s phn cp gi, n khng yu cu DB ca n. D liu mu ca n c gi trong khi d liu mu hng goi FB. Mt hm (FC) l ph hp nht cho nhng tc v ph SQRT FC tnh ton cn bc hai v bnh phng t kt qu c th (cn bc hai) tr li nh mt hm gi tr. Hn th na, khng dng Bnh phng cn d liu trong tnh ton gi nhiu chu k => FC chng trnh. Tiu chun SCL hm SQRT c th s dng tnh ton cn bc hai. Mt c bit hm => BNH PHNG s to ra tnh ton bnh phng v cng s kim tra rng gi tr nm trong vng gii hn.
Nhng tham s ng ra
thc s khi khi c gi. Chng l ch c. Nhng tham s ng ra chuyn i nhng gi tr ng ra hin VAR_OUTPUT ti gi khi. D liu c th ghi v c. Nhng tham s vo/ra chp nhn gi tr thc ca mt bin khi khi c gi, x ly gi tr, VAR_IN_OUT v ghi kt qu ngc li bin ban u.
Chu k OB Chu k OB khng c nh dng tham s cho chnh n. N gi ACQUIRE FB v b qua gi tr o v in khin d liu cho n c nh dng tham s. Thu nhn FB Tn tham s Measval_in newval resort funct_sel selection newsel result_out measval_out Kiu d liu Kiu khai bo VAR_INPUT INT VAR_INPUT BOOL BOOL BOOL WORD BOOL DWORD DWORD M t Gi tr o Chuyn i vo gi tr tr o trong b m vng. VAR_INPUT Chuyn i phn loi v nh gi d liu o VAR_INPUT B chn cn bc hai hay bnh phng. VAR_INPUT M chn gi tr ng ra VAR_INPUT Chuyn i c trong m VAR_OUTPUT Ng ra ca kt qu tnh ton VAR_OUTPUT Ng ra ca gia tr o c
nh gi Thu nhn FB gi nh gi FB. Chia s d liu ca chng l mng gi trj i m yu cu ct gi. Mng ny c khai bo nh mt tham s vo/ra. Mt mng cu trc c to ra nh mt tham s ng vo cho vic tnh ton kt qu cn bc hai v bnh phng. Theo bng bn di l nh dng nhng tham s: Tn Kiu d liu Kiu khai bo M t sortbuffer ARRAY[..] VAR_IN_OUT Mng gi tr o, tng ng OF REAL b m vng
Nhm I T04 Trang 14
calcbuffer ARRAY[..]OF VAR_OUTPUT Mng cho nhng kt qu: STRUCT Cu trc vi Cn bc hai v Bnh phng thnh phn ca kiu INT
Kiu khai bo M t VAR_INPUT Gi tr hm VAR_INPUT Gi tr hm Ng vo i vi SQRT Cn bc hai ca gi tr ng vo Ng vo i vi Bnh phng Bnh phng ca gi tr ng vo
Nhm I T04
Trang 15
0 c gi tr o 1 Bt u phn loi v tnh ton 2 Chon kt qu: SQRT v Square 3 Chn ng ra: gi tri o hay kt qu 4 M ha bit 0 5 M ha bit 1 6 M ha bit 2 7 c m ha 0 n 7 byte ng vo: gi tr o
0 n 7 Byte bc cao hn ca ng ra word (bit 8 n 15) ch yu cu cho tnh ton ca bnh phng, khc 0
0 n 7 Byte bc thp hn ca ng ra word (bit 0 n 7) gi tr o hoc kt qu: SQRT hoc bnh phng
2.2.4
Nhm I T04
Trang 16
2.2.5 nh ngha cc k hiu S dng nhng k hiu tn cho module a ch v nhng khi to cho chng trnh d nhn hn. Ta c th nhp k hiu cc ng vo, ng ra vo 1 bng.
Nhm I T04
Trang 17
VAR_INPUT a : INT; END_VAR BEGIN IF a<= 181 THEN BINHPHUONG := a*a; // gia tri cua bien maximum = 181 ELSE BINHPHUONG := 32_767 ; // Nu Trn th set gia tri la maximum END_IF; END_FUNCTION
BEGIN //If IN > MAXI, the function value is to assume the value MAX. //If IN < MINI, the function value is to assume the value MIN. //In all other cases, the function value contains the input value. IF IN > MAXI THEN Delimiter := MAXI; ELSIF IN < MINI THEN Delimiter := MINI; ELSE Delimiter := IN; END_IF; END_FUNCTION
ORGANIZATION_BLOCK Main_program
Nhm I T04 Trang 18
TITLE = ' chuong trinh chinh xu ly ' VAR_TEMP SINFO : ARRAY [1..20] OF BYTE; END_VAR BEGIN //Calling the "Delimiter" function. //The function value of the "Delimiter" block is //assigned the variable "Result". Result := Delimiter( MAXI := Maximum, IN := Input_value, MINI := Minimum); END_ORGANIZATION_BLOCK
3.1 Loi D Liu C Bn Mt loi d liu c bn miu t mt vng nh vi di cn i v i din cho kiu bit, integer, real, chu k thi gian, gi tr thi gian thc, v kiu k t. Loi d liu k tip c gn lin trong SCL. Nhm Kiu bit d liu Kiu D Liu BOOL BYTE WORD DWORD Kiu k t
Nhm I T04
Gii thch (Explanation) Phn d liu ca loi ny chim 1 bit, 8 bit, 16 bit hoc 32 bit
CHAR
trong m ASCII. Kiu s INT DINT REAL Kiu thi gian TIME DATE TIME_OF_DAY S5TIME 3.1.1 Loi D Liu Bit D liu ca loi ny l cc bit gm: 1 bit (kiu i s BOOL), 8 bit 16 bit, 32 bit. Mt dy s ca gi tr c th thit lp cho loi d liu byte, word, double word. Loi bit hn hp c th c dng ra cc biu thc Bool. Type Keyword Bit Width BOOL 1 bit Alignment (cn chnh) Value Range Phn d liu ca loi ny biu din cc thi khc nhau v gi tr ngy trong STEP 7. Phn d liu ca loi ny lun sn c cho x l con s.
Bit
Bt u t bit thp nht trong 0, 1 or FALSE byte. Bt u t byte thp nht trong word. Bt u t bin ca WORD. Bt u t mt bin ca WORD.
Byte
BYTE
8 bits
Word
WORD
16 bits 32 bits
Nhm I T04
Trang 20
3.1.2. Loi K T Phn d liu ca loi ny gi chnh xc mt k t ca m ASCII. Type Keyword Bit Width 8 Value Range (dy gi tr) c m rng m ASCII.
Loi ny c gi tr cho x l gi tr bng s (v d tnh ton cc biu thc s hc). Type Integer Keyword Bit Width Alignment INT 16 Bt u t mt bin ca WORD. Bt u t mt bin ca WORD. Bt u t mt bin ca WORD. Value Range -32_768 to 32_767
Double integer
DINT
32
-2_147_483_648 to 2_147_483_647
32
D liu ca loi d liu ny biu din thi gian khc nhau v gi trnh ngy thng bn trong STEP 7 (v d cho vic t ngy hoc i vo gi tr thi gian).
Nhm I T04
Trang 21
Nu gi tr ci cao hn gii hn trn ca dy, gi tr gii hn trn c s dng. Vi bin ca loi d liu S5TIME, kt qu c gii hn, word no , ch c thi gian c bn 0.01s, 0.1s, 1s, 10s l c sn. Trnh bin dch lm trn gi tr chnh xc.
DATE_AND_TIME Xc nh mt vng 64 bit (8 byte). Loi d liu ny lu tr ngy thng v l loi d liu c nh ngha trc DT trong SCL. STRING Xc nh mt vng cho xu k t c th di n 254 k t (kiu CHAR) Xc nh mt mng nht qun ca mt loi d liu (n gin hoc phc tp) Xc nh mt nhm ca loi d liu trong bt k c 1i phi hp ca d liu. N c th l cu trc mt mng hoc mt cu trc nht qun v mng.
ARRAY
STRUCT
Nhm I T04
Trang 22
Loi d liu ngi s dng xc nh: Bn c th to loi d liu ny ca ring bn trong phn khai bo d liu. Mi loi c gn mt tn duy nht v c th c dng bt k tn s no (number of time). N c nh ngha mt ln, mt loi d liu d liu ngi s dng xc nh c th dng a s khi d liu vi cng cu trc. Loi tham s Loi tham s l loi d liu c bit ca b m, timer v khi c th c s dng nh tham s hnh thc. Data Type TIMER COUNTER Explanation Dng khai bo timer nh tham s. Dng khai bo b m nh tham s.
BLOCK_xx. Dng khai bo FCs, FBs, DBs v SDBs nh tham s. ANY POINTER Dng pht mt a ch ca bt k loi d liu no nh tham s. Dng pht mt vng nh nh tham s.
Loi d liu ANY Trong SCL, bn c th dng bin ca loi d liu ANY nh tham s hnh thc ca khi. Ban cng c th to bin tm v dng n trong gi tr gn. 3.2.1 Loi D Liu DATE_AND_TIME nh ngha La d liu ny xc nh mt vng vi 64 bit (8 byte) cho nh r ngy thng v thi gian. Vng d liu lu tr thng tin theo n (trong m nh phn m ha nh dng thp phn): year, month, day, hours, minutes, seconds, milliseconds. C php
Nhm I T04
Trang 23
Tm gi tr
3.2.2 Lai D Liu STRING nh ngha Loi String xc nh mt chui k t di nht l 254 k t. Vng tiu chun gm 256 byte. Vng nh ny i hi cha 254 k t v phn u 2 byte. Bn c th thu hp b nh bng mt chui k t. Chui Null, mt t khng c d liu, l gi tr nh nht c th. C php
Nhm I T04
Trang 24
Mt biu thc n gin a din cho k t s ln nht trong String. Tt c k t trong m ASCII c php s dng trong chui k t. Mt chui c th gm cc k t c bit, v d, k t diu khin v k t khng c in. Bn c th i vo s dng c php $hh, ni m hh i din cho gi tr ca k t ASCII biu din cho h Hexa (v d: $0D$0Atext) Khi bn khai bo khong khng gian b nh cho chui k t, bn c th xc nh chui s ln nht m c th cha trong chui. nu khng xc nh c chiu di ln nht, n s mc nh vi d di ln nht 254 k t. V d
VAR Text1 : String [123]; Text2 : String; END_VAR
Hng s 123 trong phn khai bo Text1 l s k t ln nht ca chui. Cn Text2 th cha 254 k t. Ch : ng ra v tham s vo ra v gi tr phn hi ca hm, bn c th thu hp d di mc nh (254 k t) s dng tt hn trong ngun cha ca CPU. thu hp, ta vo Options > Customize v xc nh. Khi tr cho Chui k t Bin String, nh l cc bin khc, c th khi tr trong khai bo bin ca khi hm (FBs). N khng c kh nng khi to cho bin ca hm (FCs). Nu chui khi to ngn hn chui khai bo ln nht, phn k t cn li khng c khi to. Khi bin c x l trong tin trnh, ch c vng k t chim gi c a vo tnh ton. V d
x : STRING[7]:=Address
Nhm I T04
Trang 25
Nu bin tm ca chui c yu cu, v d, kt qu nhi, n phi lun c khi to vi mt chi hng s trong khai bo hoc gn gi tr trc khi n c s dng ln u tin. V d
FUNCTION Test : STRING[45] VAR_TEMP x : STRING[45]; END_VAR x := a; x := concat (in1 := x, in2 := x); Test := x; END_FUNCTION
Nu khng c khi to x:=a;,th hm khng phn hi mt cch chnh xc. nh tuyn Bin ca loi STRING bt u v kt thc ti bin WORD. 3.2.3 Loi ARRAY nh ngha ARRAY c mt s xc nh ca thnh phn loi d liu. trong SCL: C php Loi ARRAY mt chiu. y l mt dy d liu c sp xp. Loi ARRAY hai chiu. y l mt bng d liu gm hng v ct. Loi ARRAY nhiu chiu. Loi ny gm kch thc hai chiu v thm vo chiu khc. S chiu ln nht l 6.
Gm tm gi tr nh nht v ln nht kiu integer (-32768 n 32767). Gii hn phi c tch bi hai chu trnh. Dy lit k ring l phi tch bi du phy. Cc h s trong ngoc n.
nh tuyn Bin ARRAY c to tng hng. Mi chiu ca bin loi BOOL, BYTE, CHAR kt thc bin BYTE, tt c cn li bin WORD. 3.2.4. Loi STRUCT nh ngha Loi STRUCT m t mt vng bao gm cc s thnh phn c th khc loi d liu. phn d liu c xc nh tc thi theo t kha STRUCT trong phn khai bo. c im chnh ca loi STRUCT l phn d liu c th c lin hp. c th an xen cc kiu d liu STRUCT cho php. C php
Khai bo
Nhm I T04 Trang 27
Khai bo phn ny l mt danh sch cc bin ca STRUCT. Bao gm: 1 n n t nhn dng vi cc loi bin gn. Mt bng lit k ngu nhin ca bin khi tr.
T nhn dng l tn ca cu trc c ng dng sn. Tt c cc loi d liu vi tham s ngoi l c php cho cc bng k thut loi d liu. Bn c la chn gi tr khi to cho cc phn cu trc sau khi bng k thut dng gn gi tr. V d
VAR MOTOR : STRUCT DATA : STRUCT LOADCURR : REAL ; VOLTAGE : INT := 5 ; END_STRUCT ; END_STRUCT ; END_VAR
nh tuyn Bin ca STRUCT bt u v kt thc ti bin WORD. 3.3. Loi D Liu Ngi S Dng Xc nh 3.3.1. Loi d liu ngi s dng xc nh (User-Defined Data Types UDTs) nh ngha Bn xc nh UDTs nh mt khi. Mt ln c xc nh, n s c dng sut trong chng trnh. Bn c th s dng n vi t nhn dng UDT, UDTx (x l con
Nhm I T04 Trang 28
s), hoc vi mt t khai bo c nh ngha trong phn khai bo ca khi logic hay khi d li. UDTs c th dng khai bo cc bin, tham s, khi d liu, hoc loi d liu khc. Phn mng hoc cu trc cng c th khai bo vi UDTs. C php
T nhn dng UDT Khai bo UDT bt u vi t kha TYPE theo tn ca t nhn dng UDT. Tn ca UDT cng c th c xc nh dng tuyt i; mt dng khc, tn tiu chun trong dng UDTx (x l con s). V d: TYPE UDT10
TYPE MEASVALUES
V d
// UDT definition with a symbolic name TYPE MEASVALUES: STRUCT BIPOL_1 : INT := 5; BIPOL_2 : WORD := W#16#FFAA ; BIPOL_3 : BYTE := B#16#F1 ; BIPOL_4 : WORD := W#16#1919 ; MEASURE : STRUCT BIPOLAR_10V : REAL ; UNIPOLAR_4_20MA : REAL ; END_STRUCT; END_STRUCT; END_TYPE //Use of the UDT in an FB Nhm I T04 Trang 29
FUNCTION_BLOCK FB10 VAR MEAS_RANGE : MEASVALUES; END_VAR BEGIN // . . . MEAS_RANGE.BIPOL_1 := -4 ; MEAS_RANGE.MEASURE.UNIPOLAR_4_20MA := 2.7 ; // . . . END_FUNCTION_BLOCK
3.4. Loi Tham S 3.4.1. Loi tham s xc nh loi tham s khi ca FBs v FCs, bn c th s dng loi tham s trong trng hp loi ny uuc gii thiu.
3.4.2. Loi TIMER v COUNTER Bn xc nh tng loi timer v counter s dng khi mt khi hot ng. Loi ny cho php bin vo. 3.4..3. Loi BLOCK Bn xc nh mt khi d9uo5c dng nh tham s ng vo. Khai bo ca ng vo xc nh loi khi (FB, FC, DB). Cung ng tham s, bn xc nh t nhn dng
Nhm I T04 Trang 30
khi. Bn c th truy xut loi BLOCK_DB l a ch tuyt i (myDB.dw10) SCL khng cung cp bt c hot ng no cho khi khc. Tham s ca loi ny c th cung cp cc gi tr khi khi c gi. Khi s dng hm, tham s ng vo khng th chuyn qua. Trong SCL, ban c th gn a ch theo loi d liu nh tham s thc s: Khi hm khng c tham s hnh thc Hm khng c tham s nh thc hoc gi tr phn hi (hm VOID). Khi d liu v khi d liu h thng.
3.4.4. Loi POINTER (con tr) Bn c th gn gi tr n loi POINTER m bn khai o nh tham s hnh thc. Nu bn gi mt hm, nhiu tham s c th cung cp vi a ch ca bt k loi d liu no (ngoi tr ANY). Tuy nhin, SCL cng ch cung cp mt lnh ca x l d liu POINTER. Bn c th gn theo cc a ch: Hn Ch Loi POINTER cho php tham s hnh thc ng vo, tham s vo ra ca FB v FC tham s ng ra ca FC. Hng s khng c php nh tham s hnh thc. Nu bn cung cp tham s hnh thc ca loi POINTER vi bin tm khi FB v FC c gi, bn khng th chuyn qua tham s ny trong mt khi xa hn. Bin tm l mt tnh hp l khi n chuyn qua. V D
FUNCTION FC100 : VOIDVAR_IN_OUTN_out : INT; out : POINTER; END_VAR VAR_TEMP ret : INT; END_VAR BEGIN Nhm I T04 Trang 31
a ch tuyt i. Tn k t a ch loi POINTER. N ch c th dng khi l tham s hnh thc vi loi tham s ph hp. Hng s NIL
// ... ret := SFC79(N := N_out, SA := out); // ... END_FUNCTION FUNCTION_BLOCK FB100 VAR ii : INT; aa : ARRAY[1..1000] OF REAL; END_VAR BEGIN // ... FC100( N_out := ii, out := aa); // ... END_FUNCTION_BLOCK
3.5. Loi ANY ANY_INT bao gm cc kiu d liu : INT v DINT ANY_NUM bao gm cc kiu d liu : INT , DINT v REAL ANY_BIT bao gm cc kiu d liu : BOOL; BYTE; WORD; DWORD Trong SCL, bn c th khai bo bin ca ANY nh sau: Tham s hnh thc khi; tham s ny c th cung cp sau mt tham s thc s ca bt c loi d liu no khi n c gi. Nh bin tm; bn c th gn gi tr bt k loi d liu no lm bin.
Bn c th dng theo d liu nh tham s thc s hoc gi tr gn Bin chia s v cc b Bin trong DB (a ch tuyt i hoc k t) Bin trong i tng cc b (a ch tuyt i hoc k t) Hng s NIL
Hn ch Loi POINTER cho php tham s hnh thc ng vo, tham s vo ra ca FB v FC tham s ng ra ca FC. Hng s khng c php nh tham s hnh thc.
Trang 32
Nhm I T04
Nu bn cung cp tham s hnh thc ca loi POINTER vi bin tm khi FB v FC c gi, bn khng th chuyn qua tham s ny trong mt khi xa hn. Bin tm l mt tnh hp l khi n chuyn qua.
4) Khai Bo Hng V Bin Trong SCL: 4.1 Khai Bo Hng S trong SCL :
Hng s l mt d liu c gi tr khng i, chng khng thay i khi chng trnh ang chy Nhm hng s bn di c th c s dng trong chng trnh SCL Hng s dng bit Hng dng s Hng s dng s nguyn ( integer) Hng s dng s thc (real) Hng s dng k t Hng s dng chui k t Hng s dng thi gian Hng s dng data Hng s dng mt chu k thi gian Hng s dng thi im ca ngy Hng s dng ngy thng
Nhm I T04 Trang 33
Nhm I T04
Trang 34
Nhm I T04
Trang 35
Nhm I T04
Trang 36
W1: WORD : = W#1234 ; //decimal W2: WORD : = W#16#1234 ; //hexadecimal W3: WORD : = W#8#1234 ; //octal W4: WORD := W#2#0000_0001_1010_1110 ;// binary
DW#2#1111_0000_1111_0000 dword#32768
Nhm I T04
Trang 37
Nhm I T04
Trang 38
Vic s dng du cng huc du tr c th tu chn. nu khng ghi du phn bit th gi tr c gi nh l du dng Hng s thp phn c th l mt dy s (nu cn, chng c th c tch ra bi cc du gch di). du ghch di cho d c trong trng hp s di. V d: nhng hng s gm chui k t nh bn di: 1000 1_120_200 666_999_400_311
S m (exponent )
Khi chng ta s dng s c du chm ng. Chng ta c th dng dng hm m c ch r bi ch E Huc ch e v theo theo l gi tr dng integer. Gi tr ny c th c c biu din trong chng trnh SCL bi s thc. 3.0E+10 3.0E10 3e+10 3E10 0.3E+11 0.3e11 30.0E+9 30e9 V d NUM4:= -3.4 ; NUM5:= 4e2 ; NUM6:= real#1.5;
V d: Charac_1 := B; Charac_2 := char#43; Charac_3 := char#B; C php ca dng k t: Bt c dng k t no m rng sang m k t ASCII u c th c s dng. c bit l mhng k t nh dng nh du () huc $ c th c a vo s dng trong vic thot khi k hiu $. Bn cng c th s dng k t trng, m rng m ASCII. lm c iu ny , bn cn phi bit r k t ca m ASCII thay th bng s HEX nh th no.
Nhm I T04
Trang 39
*P = Form feed L = Line feed ( tip dng) R = Carriage return ( k t xung dng) T = Tabulator ( b lp bng) N = New line ( dng mi) V d dng k t biu din trong dng m HEX. CHARACTER := $41 ; //tng ng vi k t A Blank :=$20; //tng ng vi k t |_|
C php ca dng k t: Bt c dng k t no m rng thnh m k t ASCII u c th c s dng. c bit l nhng k t nh dng nh du () huc $ c th c a vo s dng trong vic thot khi k hiu $. Bn cng c th s dng k t trng, m rng m ASCII. lm c iu ny , bn phi bit r k t ca m ASCII thay th bng s HEX nh th no. *P = Form feed ( tip trang) L = Line feed ( tip dng) R = Carriage return ( k t xung dng) T = Tabulator ( b lp bng) N = New line ( dng mi)
Nhm I T04
Trang 40
v d: // hng s chui: NAME:= SIEMENS; //ngt mt hng s chui MESSAGE1:= MOTOR- $> $< Controller; // chi trong hexadecimal: MESSAGE1:= $41$4E (*character string AN*);
Nhm I T04
Trang 41
S dng nh dng thi gian n gin th c th khng phi xc nh n v thi gian. nh dng kiu a hp l mt dy thnh phn thi gian ring bit. u tin l ngy sau l gi... Chng c nh r mt cch ring l bi ng gch di cc k t. Bn c th b i nhng thnh phn thi gian. Tuy nhin t nht bn phi 1 n v thi gian mt cch r rng. V d: // nh dng thp phn Interval1:= TIME#10.5S ; // nh dng hn hp Interval2:= T#3D_2S_3MS ; // c hn hp v thp phn Interval3 := T#2D_2.3s ;
Thi gian ca mt ngy c ch r bi cc thng s gi, pht, giy v tch bit nhau bi du (:) c th tu chn nh r thm v ms. n v thi gian ms c tch ring bi mt du chm (.).
Nhm I T04 Trang 42
Nhm I T04
Trang 43
Cch khai bo 1 s kiu d liu: Khai bo Hng : Int1 : = int2+1234 ; Real1: = real2+ 1234 ; Cch nh ngha cc hng S Dng a ch tng i: MW14 := SHL(IN := MW12 ,N:=2) ; real1 := real2 + DWORD_TO_REAL( MD10);
Nhm I T04
Trang 44
4.2 Khai Bo Bin: 4.2.1. Bin cc b v tham s khi Cc loi ca bin Bin Bin c nh Gii thch Gi gi tr qua nhiu chu k; lu gi tr ca mt hm hoc khi hm Ph thuc vo khi logic cc cp m khng chim gi vng nh c nh, n lu trong ngn xp CPU. Gi tr ny cn gi khi cn lin h v khng b truy xut bi cc khi ngoi.
Bin tm
Cc loi ca tham s khi Tham s khi l phn gi ch c gn mt gi tr xc nh khi khi c gi. Phn gi ch trong khi c bit nh tham s hnh thc v gi tr gn ti chng khi khi c gi l tham chiu nh tham s thc s. Tham s hnh thc c biu din nh bin cc b. Bng minh ha: Tham s khi Tham s ng vo Gii thch Chp nhn gi tr ng vo khi c gi. Ch c chc nng c chuy i gi tr khi hm c gi. C th c v ghi. Chp nhn gi tr ng vo khi khi c gi. Sau khi x l gi tr, chng nhn gi tr v phn hi v hm gi.
Tham s ng ra Tham s vo ra
C nh (OK Flag) Trong bin SCL, c nh dng kim tra li khi chng trnh chy trong CPU. N l bin cc b ca loi BOOL v c nh ngha trc tn OK
Nhm I T04
Trang 45
4.2.2. C Php Chung Bin v tham s khi phi khai bo ring trc khi c dng trong khi logic v khi d liu. khai bo xc nh mt t nhn dng c dng tham s khi hoc bin v c gn n mt loi d liu. Khai ba mt bin hoc tham s bao gm mt t nhn dng v loi d liu. C php
V d
VALUE1 : REAL;
4.2.3. Khi To Bin c nh nh tham s ng vo, ng ra ca mt FB c th gn gi tr ban u khi khai bo. Tham s vo ra c th cng gn gi tr ban u, tuy nhin, nu chng l mt phn d liu c bn. Vi bin n gin, gi tr ban du c gn bng (:=) hng s. C php
Nhm I T04 Trang 46
V d
VALUE :REAL := 20.25;
V d
VAR // Initialization of static variables: INDEX1 : INT := 3 ; //Array initialization: CONTROLLER1 : ARRAY [1..2, 1..2] OF INT := -54, 736, -83, 77; CONTROLLER2 : ARRAY[1..10] OF REAL := 10(2.5); //Structure initialization: GENERATOR: STRUCT DAT1 : REAL := 100.5; A1 : INT := 10 ; A2 : STRING[6] := FACTOR; A3 : ARRAY[1..12] OF REAL := 0.0, 10(100.0), 1.0; END_STRUCT ; END_VAR Nhm I T04 Trang 47
4.2.4. Dng Khai Bo Ca Dy Bin C th truy xut mt khai bo bin vi loi d liu khc nhau, bn c th xc h dng ca bin hoc ca dy trong bin s dng t kha AT. Mt dng c th nhn thy c ch cc b trong khi. N tha hng cc c tnh ca bin mu. V d
VAR_INPUT Buffer : ARRAY[0..255] OF BYTE; Frame1 AT Buffer : UDT100 ; Frame2 AT Buffer : UDT200 ; END_VAR
Quy lut Khai bo ca cc dng xa hn ca bin phi c to theo khai bo ca bin m n tr n cc khai bo cng loi Loi d liu ca dng phi so snh vi loi d liu ca bin. Bin xc nh kch c vng nh. i hi b nh ca dng phi nh hn hoc bng.
Nhm I T04
Trang 48
4.2.5. S Dng Nhiu i Tng C th bn mun hoc phi dng hn ch s th t khi cho d liu ring ca i tng. Nu mt khi hm hin hnh c gi trong FB trong chng trnh ca bn. Bao gm khi hm bn mun gi nh bin c nh. Trong khi hm, gi hm khc m khng c i tng ring ca khi d liu. Tch ly nhiu d liu i tng trong mt hm, bn c th s dng nhiu s th t hm hn.
4.2.6. Khai Bo Hng i Tng i vi khi hm, bn c th khai bo bin ca loi FB hoc SFB trong khai bo vng cho bin c nh (VAR; END_VAR). Nhiu bin c gi cc i tng cc b ca FB hoc SFB. D liu i tng cc b c cha trong khi d liu i tng ca khi hm gi. Khng th mt khi to i tng cc b xc nh. Khi c gi nh mt i tng phi khng c di 0. t nht mt bin c nh hoc tham s phi khai bo. C php
V d
Supply1 : FB10; Supply2,Supply3,Supply4 : FB100; Motor1 : Motor ;
Nhm I T04
Trang 49
4.2.7 C Nh (OK Flag) C nh dng ch dn thc thi mt khi chnh xc hoc khng chnh xc. N l mt bin cc b ca loi BOOL vi nh ngha trc l OK. Bt u chng trnh, c nh c gi tr TRUE. N c th c hi bt k con tr no trong khi hoc c th c set ln TRUE/FASLE s dng lnh SCL. Nu c li trong khi vn hnh, c nh set v FASLE. Khi khi c thot, gi tr c nh c lu trong tham s ng ra ENO v c th c nh gi bi khi gi. Khai bo C nh l bin h thng. khng cn thit khai bo. Tuy nhin bn phi chn bng la chn bin dch set OK flag trc khi bin dch. V d
// Set OK flag to TRUE // to check whether the // action executes correctly. OK:= TRUE; Division:= 1 / IN; IF OK THEN // Division was correct. // : // : ELSE // Division was not correct. // : END_IF;.
4.2.8. Tiu Vng Khai Bo 4.2.8.1. Tng Quan V Tiu Vng Khai Bo Ch c loi bin cc b hoc tham s c t nhn dng tiu vng khai bo ring bi cc t kha ring. Mi vng cha ng cc khai bo c php cho cc thnh phn tiu vng khai bo. Bng minh ha cc bin hoc tham s m bn khai bo trong cc khi logic khc nhau.
Nhm I T04
Trang 50
*)Mc d khai bo ca bin nm gia t kha VAR v END_VAR, nhng khai bo vn c to trong vng tm khi bin dch tp tin ngun.
4.2.8.2 Bin C nh
Bin c nh l cc bin cc b c gi li khi khi vn hnh. N dng lu gi tr ca khi hm v cha khi d liu tng ng. C php N c khai bo trong phn khai bo VAR / END_VAR. Vng khai bo ny l phn ca khai bo FB. Sau khi bin dch, vng ny v vng ca tham s khi quyt nh cu trc khi d liu i tng gn. Trong vng ny, bn c th: To bin, gn gi tr cho bin v khi to bin. Khai bo hm gi nh mt bin c nh nu bn mun gi n trong khi hm hin hnh.
Nhm I T04
Trang 51
V d
VAR RUN :INT; MEASARR :ARRAY [1..10] OF REAL; SWITCH :BOOL; MOTOR_1,MOTOR_2 :FB100; //Instance declaration END_VAR
Truy xut Bin c truy xut nh sau: Truy xut trong khi: trong m vng ca khi hm, bin khai bo trong vng khai bo, bn c th truy xut bin. iu ny c gii thch chi tiet1 hn trong phn gi tr gn Truy xut ngoi s dng i tng DB: Bn c th truy xua56t1bie61n t khi khc bng cch s dng bng truy xut, v d DBx.variable
4.2.8.3. Bin Tm
Bin tm ph thuc vo khi logic v khng gi vng nh c nh, n c t trong ngn xp CPU. Gi tr n ch gi ly khi khi lin h vn hnh. Bin tm kho6ngt th truy xut ra bn ngoi khi chng c khai bo. Khi mt OB, FB, FC thc thi ln u, gi tr ca d liu tm khng c xc nh. Khng th khi to n. Bn nn khai bo d liu nh d liu tm nu bn yu cu n ghi kt qu chuyn tip khi OB, FC,FB ang thc thi. C php
Nhm I T04 Trang 52
N c khai bo trong phn khai bo VAR_TEMP / END_VAR. Vng khai bo ny l phn ca khai bo FB, FC, OB. N dng khai bo tn bin v loi d liu trong khai bo bin.
V d
VAR_TEMP BUFFER 1 : ARRAY [1..10] OF INT ; AUX1, AUX2 : REAL ; END_VAR
Truy xut Bin ny lun c truy xut t phn ca khi m bin c khai bo. 4.2.8.4. Tham S Khi Tham s l phn gi ch m c gn gi tr khi khi c gi. Phn chim gi trong khi c bit nh tham s hnh thc. V vy tham s cung cp mt phn dn cho chuyn i thng tin cc khi. Loi ca tham s khi C php Khai bo ca tham s hnh thc c to trong phn khai bo ca hm hoc nhm theo tham s trong ba vng khai bo. Trong khai bo bin, bn xc nh tn tham s v loi d liu. C th khi to cho tham s ng vo v ng ra cho hm FB. Khi
Nhm I T04 Trang 53
Tham s hnh thc ng vo c gn gi tr thc s ng vo. Tham s hnh thc ng ra c gn gi tr thc s ng ra. Tham s hnh thc vo ra c gn gi tr thc s vo ra.
khai bo tham s hnh thc, bn c th s dng phn c bn, phc tp v loi d liu ngi s dng xc nh.
V d
VAR_INPUT // Input parameters MY_DB : BLOCK_DB ; CONTROLLER : DWORD ; TIMEOFDAY : TIME_OF_DAY ; END_VAR VAR_OUTPUT // Output parameters SETPOINTS: ARRAY [1..10] of INT ; END_VAR VAR_IN_OUT // In_out parameters SETTING : INT ; END_VAR
Truy xut Tham s kh truy xut t phn m ca khi logic: Truy xut trong: truy xut trong cc phn ca khi m n c khai bo. Truy xut ngoi dng khi d liu i tng: ban c th truy xut khi hm s dng hm gn i tng DB.
5) Cc Cu Lnh iu Khin:
IF : Nhnh chng trnh ph thuc bi 1 gi tr Boolean CASE : Nhnh chng trnh ph thuc bi 1 gi tr INT FOR : Vng chng trnh lp xc nh WHILE : Vng lp khng xc nh REPEAT : Vng lp khng xc nh CONTINUE : Kt thc thc thi lp li hin ti ca cu lnh vng lp EXIT : Thot vng lp GOTO : Nhy ti 1 nhn chng trnh
Nhm I T04 Trang 54
RETURN 5.1 Cu
lnh IF:
Cu trc :
IF ( iu kin) THEN Cng vic 1; // Statement Section_IF ELSIF ( iu kin 2) THEN Cng vic 2 ; // Statement Section_ELSIF ELSE Cng vic n; // Statement Section_ELSE END_IF; // kt thc lnh. Cc Qui Tc Cu Lnh IF c Thc Thi
H qu u tin ca cu lnh c din gii logic = TRUE c thc thi. Cc h qu cn li khng c thc thi. Nu khng c din gii Boolean no = TRUE th h qu ca cu lnh ELSE c thc thi (hay khng c h qu no nu nhnh ELSE khng tn ti). Bt k lnh ELSIF no cng c th c mt. Ch Dng 1 hay nhiu nhnh ELSIF c u im l din gii logic sau din gii khng cn c tnh n trong h qu ca lnh IF. V th nn thi gian ca chng trnh c gim xung.
Mt s v d thc t: ORGANIZATION_BLOCK OB1 VAR_TEMP Ha : ARRAY[0..19] OF BYTE; END_VAR IF ((I0.0 = 1) OR (Q4.0 = 1)) AND( I0.1 = 0) THEN Q4.0 := 1 ; // nu I0.0 = 1 hoc Q4.0 = 1 v I0.1 = 0 th Q4.0 := 1 END_IF; END_ORGANIZATION_BLOCK Dng lnh tng ng trong LAD
Nhm I T04
Trang 55
V d 2: on chng trnh trong chng trnh iu khin bng ti. IF NOT Select_FC & NOT Select_FB & Select_L THEN "Feed"."FeedData"( Start := Start, Removed := "Continue", Man_start := Man_on, Stop := "/Stop", Reset := Basic_st, Count := "Count", Tim := "Monitor"); Readyload := "FeedData".Load; Ready_rem := "FeedData".Remove; END_IF;
C php:
CASE value OF 0..3 : // cng vic _0..3 ; 8: // cng vic _8 ; ELSE: // cng vic cn li _ELSE ; END_CASE;
Nhm I T04 Trang 56
Cu lnh CASE c thc thi theo cc qui tc sau: Din gii la chn phi tr li gi tr kiu INTEGER. Khi cu lnh CASE c x l. Chng trnh kim tra xem gi tr ca din gii chn la bao hm trong bng gi tr xc nh trc hay khng. Nu 1 gi tr c tm thy, cu lnh thnh phn trong danh sch c thc thi. Nu khng tm thy c, phn chng trnh ELSE pha sau s c thc thi hay khng cu lnh no c thc thi nu nhnh ELSE khng tn ti. Cc qui tc sau c p dng khi lit k gi tr: Mi gi tr c lit k bt u l 1 hng s, 1 chui hng s hay 1 dy hng s. Nhng gi tr trong bng gi tr phi l kiu INTEGER. Mi gi tr ch xut hin 1 ln. Mt s v d: FUNCTION_BLOCK "CASE" TITLE = ' s dng cu lnh CASE ' VAR Expression1 : INT; Expression2 : INT; Expression3 : INT; Day_of_the_week: STRING[12]; Dat : DATE; ID : INT; Error_number : INT; END_VAR VAR_TEMP Return_jump : INT; END_VAR LABEL Subroutine; M_1; M_2; M_3; End; END_LABEL BEGIN //CASE with simple waiting list CASE Expression1 OF 1 : Q4.1 := TRUE; 2 : Q4.2 := TRUE; 3 : Q4.3 := TRUE; END_CASE; //CASE with value areas CASE Expression2 OF 1,2 : Q4.4 := TRUE; 2,3 : Q4.5 := TRUE; ELSE : QB4 := 0;
Nhm I T04
Trang 57
END_CASE; //CASE with gaps in the value areas CASE Expression3 OF 1..4 : Q5.1 := TRUE; 7..9 : Q5.2 := TRUE; 12..16 : Q5.3 := TRUE; ELSE : QB5 := 0; END_CASE; //Determining the day of the week from the DATE format CASE DINT_TO_INT(DATE_TO_DINT(Dat) MOD 7)+1 OF 1 : Day_of_the_week := 'Monday'; 2 : Day_of_the_week := 'Tuesday'; 3 : Day_of_the_week := 'Wednesday'; 4 : Day_of_the_week := 'Thursday'; 5 : Day_of_the_week := 'Friday'; 6 : Day_of_the_week := 'Saturday'; 7 : Day_of_the_week := 'Sunday'; END_CASE; //Assigning an error number CASE ID OF 0 : Error_number := 0; 1,3,5 : Error_number := ID + 128; 6..10 : Error_number := ID; ELSE : Error_number := 16#7F; END_CASE; //"Subroutines" IF I1.0 THEN Return_jump := 1; GOTO subroutine; END_IF; M_1: (*Return jump from subroutine*); IF I1.1 THEN Return_jump := 2; GOTO subroutine; END_IF; M_2: (*Return jump from subroutine*); IF I1.2 THEN Return_jump := 3; GOTO subroutine; END_IF; M_3: (*Return jump from subroutine*); GOTO End; //Jump over subroutine //********************************************************* CASE return_jump OF 1 : GOTO M_1; 2 : GOTO M_2; 3 : GOTO M_3; END_CASE; //********************************************************* End: ; END_FUNCTION_BLOCK
Nhm I T04
Trang 58
Qui tc Cc qui tc thit lp cu lnh FOR Bin iu khin l d liu kiu INT hay DINT. Bn c th b qua cu lnh BY. Nu khng c gi tr tng no c xc nh th n t ng cng thm 1.
V D Minh Ha: FUNCTION_BLOCK "FOR" TITLE = 'FOR Statement' VAR index1 : INT := 4; index2 : INT := 6; index3 : INT := 8; END_VAR VAR_TEMP Runtime_variable : INT; i, k : INT; END_VAR BEGIN FOR Runtime_variable := 0 TO 7 DO M[index1,Runtime_variable] := TRUE; END_FOR;
Nhm I T04 Trang 59
FOR Runtime_variable := 0 TO 15 BY 2 DO M[index2 + Runtime_variable MOD 8, Runtime_variable] := TRUE; END_FOR; MD[index1] := 0; MD[index2] := 0; (* Set memory bits *) FOR i := 2 TO 23 DO M[i DIV 8,i MOD 8] := TRUE; END_FOR; MD[index2] := MD[index1]; //Nested FOR loops (* Reset memory bits *) FOR i := 0 TO 2 DO FOR k := 0 TO 7 DO IF (k < 2 AND i = 0) THEN CONTINUE; END_IF; IF (i = 2 AND k > 5) THEN EXIT; END_IF; M[i,K] := FALSE; END_FOR; END_FOR; MW[index3] := INT_TO_WORD(i); MW[index3 + 2] := INT_TO_WORD(k); //FOR loop with step width <> 1 FOR i:=128 TO 142 BY 2 DO MW[i] := PIW[i]; END_FOR; //Abort FOR loops FOR Runtime_variable := 0 TO 15 DO M[index2,Runtime_variable] := TRUE; IF Runtime_variable = 7 THEN CONTINUE; ELSIF Runtime_variable = 8 THEN CONTINUE; END_IF; IF Runtime_variable = 10 THEN EXIT; END_IF; M[index2 + 1,Runtime_variable] := TRUE; END_FOR; MD[index2] := 0; END_FUNCTION_BLOCK
Nhm I T04
Trang 60
V d minh ha:
FUNCTION_BLOCK "WHILE" TITLE = 'WHILE Statement' VAR_INPUT Data : BLOCK_DB; END_VAR VAR Runtime_variable : INT; Dat : DATE; NextWeek : ARRAY[1..7] OF DATE; byteindex : INT; bitindex : INT; END_VAR VAR_TEMP t_Date : DINT; i, k : INT; END_VAR BEGIN //Simple WHILE statement i := 0; WHILE Data.DW[i] = 16#FFFF DO i := i + 1; END_WHILE; //Finding the next date that falls at the beginning of the week
Nhm I T04 Trang 61
t_Date := DATE_TO_DINT(Dat); WHILE (t_Date MOD 7)+1 <> 1 DO t_Date := t_Date + 1; END_WHILE; //Saving the date information for the next week FOR i := 1 TO 7 DO NextWeek[i] := DINT_TO_DATE(t_Date + i - 1); END_FOR; //Finding the first input bit containing "1" i := 0; k := 0; WHILE I[i,k] = TRUE DO k := k + 1; IF k = 8 THEN k := 0; i := i + 1; END_IF; IF i > i + 4 THEN EXIT; END_IF; END_WHILE; byteindex := i; bitindex := k;END_FUNCTION_BLOCK
REPEAT
// Statement Section ; UNTIL a = b // iu kin dng END_REPEAT; iu kin c tnh sau khi vng lp c thc thi. Ngha l vng lp c thc thi t nht 1 ln cho ngay c khi iu kin kt thc tha mn khi vng lp bt u.
V d minh ha:
FUNCTION_BLOCK "REPEAT" TITLE = 'REPEAT Statement' VAR Runtime_variable : INT := 0; Meas_values : ARRAY [1..32] OF INT; END_VAR VAR_TEMP SFC_ERROR : INT; busy, done : BOOL; END_VAR
Nhm I T04 Trang 62
LABEL End; END_LABEL BEGIN Meas_values [32] := -1; REPEAT Meas_values[Runtime_variable] := 0; Runtime_variable := Runtime_variable + 1; UNTIL Meas_values[Runtime_variable] = -1 END_REPEAT; REPEAT M4.1 := TRUE; IF I1.2 THEN CONTINUE; END_IF; M4.2 := TRUE; IF I1.3 THEN EXIT; END_IF; M4.3 := TRUE; UNTIL NOT I1.1 END_REPEAT; IF I1.4 THEN MB4 := 0; END_IF; GOTO End; //Call at restart REPEAT SFC_ERROR := COMPRESS( BUSY := busy, DONE := done); UNTIL done END_REPEAT; End: ; END_FUNCTION_BLOCK
Cu lnh ngay lp tc kt thc s thc thi ca vng lp. Ty thuc vo iu kin lp li vng lp c tha mn hay khng vng lp c thc thi ln na hay s lp li cu lnh c kich hot v cu lnh sau c thc thi. Trong cu lnh FOR, bin iu khin c tng ln bng cch xc nh s gia tng sau cu lnh CONTINUE.
END_IF; M(I,k) = TRUE; END_FOR; END_FOR; 5.7 Cu Lnh EXIT 1 cu lnh EXIT c dng thot vng lp (FOR,WHILE hay REPEAT) ti bt k thi im no m khng cn quan tm n iu kin kt thc c c tha mn. Cu lnh EXIT thc thi phi tun theo cc qui tc sau: Cu lnh ny to ra s lp li cu lnh ngay lp tc xung quanh cu lnh thot c thc thi ngay. Chng trnh tip tc c thc thi ngay sau cui vng lp (v d sau END_FOR).
V D:
FOR i = 0 TO 2 DO FOR k := 0 TO 7 DO IF( k<2& I =0) THEN EXIT ; END_IF; M(I,k) = TRUE; END_FOR; END_FOR; 5.8 Cu
Lnh GOTO
Bn c th b sung 1 chng trnh nhy dng cu lnh GOTO. iu ny to nn 1 bc nhy tc thi n 1 nhn xc nh v v vy n 1 cu lnh khc trong cng 1 khi. Cu lnh GOTO ch nn dng cho tnh hung c bit, v d trong x l li. Theo qui tc ca chng trnh cu trc, cu lnh GOTO khng nn s dng. y nhn l 1 nhn trong vng din gii END/END_LABEL. Nhn ny ng trc cu lnh s c thc thi sau cu lnh GOTO. Nu bn s dng lnh GOTO phi nh cc qui tc sau: Ni n ca php nhy phi trong cng 1 khi. Ni n ca php nhy phi l duy nht. Khng th nhy vo trong 1 vng lp. Ch c th nhy ra ngoi vng lp.
V D:
IF I1.0 THEN Return_jump := 1; GOTO subroutine; END_IF; M_1: (*Return jump from subroutine*); IF I1.1 THEN Return_jump := 2; GOTO subroutine; END_IF;
Nhm I T04 Trang 64
M_2: (*Return jump from subroutine*); IF I1.2 THEN Return_jump := 3; GOTO subroutine; END_IF; M_3: (*Return jump from subroutine*); GOTO End; //Jump over subroutine //********************************************************* CASE return_jump OF 1 : GOTO M_1; 2 : GOTO M_2; 3 : GOTO M_3; END_CASE; 5.9 Cu
Lnh RETURN
1 cu lnh RETURN thot khi khi ang hot ng (OB, FB, FC) v quay tr v khi ang gi hay quay v h thng hot ng khi 1 OB c thot. Ch 1 cu lnh RETURN t ti dng lnh cui ca 1 khi logic hay 1 din gii ca khi d liu th d tha v n c t ng thc thi.
Nhm I T04
Trang 65
Thay v thng s c nh bn c th ch r mt bin hoc hng s ca gi tr INT. S tin ch ca cch ny l vic gi hm c th ng bi vic gn mt bin hoc mt hng vi mt s khc nhau trong mi ln gi. V d cch gi tnh v cch gi ng: Cch gi Tnh ( c nh)
S_ODT (T_NO:=T10, S:=TRUE, TV:=T#1s, R:=FALSE, BI:=biVal, Q:=actFlag); Cch gi ng ( s hiu Timer l mt bin l cc phn t trong mng) FUNCTION_BLOCK TIME VAR_INPUT MY_TIMER: ARRAY [1..4] of STRUCT T_NO: INT; TV : WORD; END_STRUCT; . . END_VAR . . FOR I:= 1 TO 4 DO S_ODT(T_NO:=MY_TIMER[I].T_NO, S:=true, TV:= MY_TIMER[I].TV); END_FOR;
Nhm I T04
Trang 66
Bng tng hp: Tham s T_NO S TV R Gi tr hm Q BI Khai bo INPUT INPUT INPUT INPUT OUTPUT OUTPUT OUTPUT Kiu D Liu TIMER BOOL S5TIME BOOL S5TIME BOOL WORD Gii thch a ch timer Khi ng timer Gi tr timer Reset timer Ngun thi gian dng m BCD Trng thi ng ra Ngun thi gian dng m nh phn
Khi cc gi tr thng s c cha chung, th khng cn phi xc nh nhng gi tr trong mt tnh hung nht nh. Cc quy tc sau nn c ch khi gn mt thng s. Thng s xc nh thi gian T_NO phi c cung cp khi hm c gi. Thay cho thi gian c nh (v d, T10), bn c th xc nh bin INT huc thng s g vo ca ca d liu thi gian trong chng trnh gi.
c hai Thng s PV ( initialization value ) v s (set) c th c b qua Gi tr cui cng trong nh dng S5TIME lun lun l gi tr hm.
6.1.3.2. S_PEXT
Tn hiu ng ra vn cn li trng thi 1 cho chng trnh timer (t) bt chp ng vo cn gi tr 1 bao lu. s khi ng xung chy reset thi gian m xung ng ra c ko di n. Cch dng hm timer Bng m t cch lm vic ca thi gian xung ko di Hot ng Gii thch Khi ng thi S hot ng thi gian xung ko di (S_PEXT) bt u thi gian khi m gian trng thi tn hiu ti ng vo khi ng (S) tahy i t 0 n 1. kch cho php timer chy, th tn hiu thay i lun phi c yu cu. Khi ng li thi Nu trng thi tn hiu ti ng vo S gian m Khi to thi gian B timer chy vi gi tr ti ng vao TV cho n khi chng trnh time kt chy thc Reset Thi gian c c reset khi ng vo reset thay i gi tr t 0 n 1 Trong khi timer dang chy. Vi s thay i ny, c thi gian dc v thi gian khi to ban u c reset v 0. Trng thi tn hiu 1 ti cng R s khng c nh hng g khi timer khng hot ng Trng thi truy Ch cn timer ang chy m trng thi yu cu ca tn hiu l 1 ti ng ra Q vn to ra kt qu 1 bt cht tn hiu ca ng vo c thi gian truy Gi tr thi gian c th c yu cu ti ng ra BI v dng chc nng vn S_PEXT
Phng thc hot ng: bng sau m t cch l vic ca on delay timer
Nhm I T04 Trang 68
Gii thch B timer tr thi on khi ng mtt khon thi gian c bit khi m trng thi tn hiu ng vo khi ng (s) thay i t 0 sang 1. cho php timer chy, thay i 1 tn hiu lun pah c yu cu Nu m trng thi ca ng vo S thay i t 1 sang 0 khi m timer ang chy. Th n s b stop B timer tip tc chy vi gi tr ti ng ra TV min l trng thi tn hiu ti ng vo S=1 c t Thi gian c c reset khi ng vo reset r thay i gi tr t 0 n 1 Trong khi timer ang chy. Vi s thay i ny, c thi gian dc v thi gian khi to ban u c reset v 0. Thi gian cng b reset khi r=1 c thit lp cho d timer khng chy Truy vn trng thi tn hiu tip theo l 1 ti ng ra q s sinh ra 1 khi m thi gian kt thc m khng c li xy ra v ng vo s vn c thit lp 1. Nu m timer dng li,th trng thi yu cu c l 1 th cng luong lun sinh ra 0 Truy vn trng tn hiu sau khi 1 ng vo cng cho kt qu l 0 khi timer khng chy v trng thi tn hiu ti ng vo s vn l 1 Gi tr thi gian c th c yu cu ti ng ra BI v dng chc nng S_ODT.
c thi gian yu cu
Cch hot ng Bng sau cho thy s hot ng ca hm retentive on delay timer Hot ng
Nhm I T04
gii thch
Trang 69
Khi ng timer Khi ng li timer Xc nh thi gian chy Reset Trng thi tn hiu truy vn c thi gian yu cu
B timer tr thi ON c nh khi ng mt khong thi gian xc nh khi m trng thi tn hiu ng vo khi ng (S) thay i t 0 sang 1. cho php timer chy, thay i 1 tn hiu lun phi c yu cu Nu m trng thi ca ng vo S thay i t 0 sang 1 khi m timer ang chy. Th n s b khi ng li B timer tip tc chy vi gi tr ti ng vo TV ngay c nu tn hiu ng vo S thay i n 0 trc khi time kt thc Nu ng vo reset R thay i gi tr t 0 n, th timer s c reset bt chp tn hiu ng vo l g Truy vn trng thi tn hiu theo sau 1 ti ng ra Q s to ra kt qu l 1 sau khi thi gian kt thc bt chp tn hiu ca ng vo l g. Gi tr thi gian c th c yu cu ti ng ra BI v dng chc nng S_ODTS.
Hot ng ca hm: Bng di y gii thch cho vic hot ng ca hm off delay timer Hot ng Gii thch Khi ng timer B timer tr thi OFF khi ng mt khon thi gian xc nh khi m trng thi tn hiu ng vo khi ng (S) thay i t 1 sang 0. cho php timer chy, thay i 1 tn hiu lun pah c yu cu Khi ng li Timer ny o khi ng li khi m ng vo S thay i t 1 sang 0 timer Xc nh thi Thi gian chy c nhp vo t ng vo TV gian chy
Nhm I T04 Trang 70
Nu ng vo R thay i t 0 sang 1 khi m timer ang chy th thi gian s c reset Trng thi ng Truy vn trng thi ng vo theo sau l 1 ti ng ra s sinh ra l 1 nu trn vo truy vn thi tn hiu ti ng vo S l 1 c thit lp huc timer ang chy c thi gian Gi tr thi gian c th b yu cu ti ng ra BI v c s dng chc nng truy vn S_OFFDT Reset
6.1.4. V D V Cc Hm Ca Timer FUNCTION_BLOCK STD_TIMER VAR BCD : ARRAY [1..5] OF S5TIME := 5(T#0s); //BCD_value Bin : ARRAY [1..5] OF WORD := 5(16#0000); //Binary_value TV : ARRAY [1..5] OF S5TIME := T#1s, T#2s, T#3s, T#4s, T#5s; //Timer value Start : ARRAY [1..5] OF BOOL := 5(FALSE); //Start timer Reset : ARRAY [1..5] OF BOOL := 5(FALSE); //Reset timer Status : ARRAY [1..5] OF BOOL := 5(FALSE); //Timer status Pulse : TP; //SFB 3 IEC pulse Start1 : BOOL := FALSE; Status1 : BOOL := FALSE; Duration1 : TIME := T#1s; Tvalue1 : TIME := T#0s;
On : TON; //SFB 4 IEC on delay Start2 : BOOL := FALSE; Status2 : BOOL := FALSE; Duration2 : TIME := T#1s; Tvalue2 : TIME := T#0s; Off : TOF; //SFB 5 IEC off delay Start3 : BOOL := FALSE; Status3 : BOOL := FALSE; Duration3 : TIME := T#1s; Tvalue3 : TIME := T#0s; END_VAR BEGIN //************************************************************************
Nhm I T04
Trang 71
BCD[1] := S_PULSE( T_NO := "Timer1", S := Start[1], TV := TV[1], R := Reset[1], BI := Bin[1], Q := Status[1]); //Starting a timer function as an extended pulse BCD[2] := S_PEXT( T_NO := "Timer2", S := Start[2], TV := TV[2], R := Reset[2], BI := Bin[2], Q := Status[2]); //Starting a timer function as an on delay BCD[3] := S_ODT( T_NO := "Timer3", S := Start[3], TV := TV[3], R := Reset[3], BI := Bin[3], Q := Status[3]); //Starting a timer function as a latching on delay BCD[4] := S_ODTS( T_NO := "Timer4", S := Start[4], TV := TV[4], R := Reset[4], BI := Bin[4], Q := Status[4]); //Starting a timer function as an on delay BCD[5] := S_OFFDT( T_NO := "Timer5", S := Start[5], TV := TV[5], R := Reset[5], BI := Bin[5], Q := Status[5]); //************************************************************************
Nhm I T04 Trang 72
Pulse (
IN := Start1, PT := Duration1); Status1 := Pulse.Q; Tvalue1 := Pulse.ET; On ( //Start on delay IN := Start2, PT := Duration2); Status2 := On.Q; Tvalue2 := On.ET; Off ( //Start off delay IN := Start3, PT := Duration3); Status3 := Off.Q; Tvalue3 := Off.ET; //************************************************************************E ND_FUNCTION_BLOCK 6.2 B m ( Counter)
STEP 7 cung cp mt chui chun cc hm c chc nng m. Bn c th s dng cc b m trong chng trnh SLC m khng cn khai bo chng trc. n gin bn ch cn cung cp cho chng cc thng s yu cu. STEP 7 cung cp 3 hm m nh sau: S_CU S_CD S_CUD m ln m xung m ln xung
6.2.1 Gi Hm m
Hm m c gi ging nh cc hm khc. Hm ny c th c dng trong mt a ch c biu din hay mt dng hm gi tr thch hp vi mt a ch khc. Gi tr ca hm tr v khi gi khi l mt gi tr m (BCD) hoc trong kiu WORD.
V d: // Gi Hm m c nh: S_CUD (C_NO:=C12, CD:=I0.0, CU:=I0.1, S:=I0.2 & I0.3, PV:=120, R:=FALSE, CV:=binVal, Q:=actFlag); V d gi hm m ng FUNCTION_BLOCK COUNT VAR_INPUT Count: ARRAY [1..4] of STRUCT C_NO: INT; PV : WORD; END_STRUCT; . . END_VAR . . FOR I:= 1 TO 4 DO S_CD(C_NO:=Count[I].C_NO, S:=true, PV:= Count[I].PV); END_FOR; //Example of a dynamic call using a variable of the //COUNTER data type: FUNCTION_BLOCK COUNTER VAR_INPUT MYCounter:COUNTER; END_VAR . . CurrVal:=S_CD (C_NO:=MyCounter,.....);
6.2.2 Thng S Ca B m.
Bng bn di cung cp cho bn ci nhn tng quan v cc thng s ca chc nng m. Tn ng Khai bo dng data M t C_NO INPUT COUNTER S b m; khu vc ny ph thuc vo CPU CD INPUT BOOL Ng vo m xung CD INPUT BOOL Ng vo m ln S INPUT BOOL Ng vo thit lp trc cu b m PV INPUT WORD Gi tr c ci t 0 n 999 m
Nhm I T04 Trang 74
R Gi tr hm Q CV
Quy lut: Khi gi tr cc thng s ( v d: CD:=I0.0 ) c cha chung, th khng cn thit phi nh r chng trong mt v tr c nh. Cc quy tc chung nn c xem xt k khi m cung cp gi tr l nhng thng s: Thng s nh dng cho b m C_NO phi c cung cp khi m hm c gi. Thay v cc s c gi tr tuyt i, bn cng c th nh r mt gi tr huc mt hng s vi nh dng INT huc thng s ng vo ca b m trong khi gi n. V d: FUNCTION_BLOCK FB1 VAR CurrVal, binVal: word; actFlag: bool; END_VAR BEGIN CurrVal :=S_CD (C_NO: C10, CD:=TRUE, S:=TRUE, PV:=100, R:=FALSE, CV:=binVal,Q:=actFlag); CurrVal :=S_CU (C_NO: C11, CU:=M0.0, S:=M0.1, PV:=16#110, R:=M0.2, CV:=binVal,Q:=actFlag); CurrVal :=S_CUD(C_NO: C12, CD:=I0.0, CU:=I0.1, S:=I0.2 &I0.3, PV:=120, R:=FALSE, CV:=binVal,Q:=actFlag); CurrVal :=S_CD (C_NO: C10, CD:=FALSE, S:=FALSE, PV:=100, R:=TRUE, CV:=binVal,Q:=actFlag); END_FUNCTION_BLOCK Huc gi tr m ln CU (count up) huc gi tr m xung CD (count down) phi c cung cp. Gi tr PV (initialization value) v S (set) c th c b qua. Gi tr kt qu trong nh dng BCD lun lun l mt gi tr hm.
6.2.3 Ng Vo V nh Gi Gi Tr B m
a vo mt gi tr khi to huc nh gi kt qu ca hm bn yu cu m t bn trong ca gi tr m. Gi tr m l d liu dng Word chng gii hn t 0 n 11 thi chc bao hm c gi tr m dng BCD. gi hn t 12 n 15 thi khng c s dng. Khi bn t gi tr m, gi tr m bn nh dng phi c vit cho b m. Thang gi tr l t 0 n 999. bn c th thay i gi tr m bn trong thang gi tr ny ph hp vi s hot ng ca b m (S_CUD), count up (S_CU) v count down (S_CD). nh dng: hnh bn di m t cu trc ca gi tr b m.
Nhm I T04
Trang 75
Ng vo: S nh gi: Dng thp phn nh mt s interger: v d 295, gi nh gi tr ny tng ng nh dng BCD hp l nh dng BCD (ng vo nh mt hng s dng hex) :v d 16#127 Khi kt qa mt hm (dng Word): ng dng BCD. Khi thng s ng ra CV (type Word): trong m binary
Nhm I T04
m Reset B m c reset khi ng vo R=1 c set. Khi reset th gi tr ca b m c t v 0 Yu cu b Mt trng thi tn hiu c yu cu ti ng ra Q c tr v 1 nu gi tr m ln m hn 0. V ng ra tr v 0 nu gi tr bng 0 6.2.4.3
6.2.5
V D V Hm B m
FUNCTION_BLOCK STD_COUNTER TITLE = 'Call examples for counter functions' VAR BCD1, BCD2, BCD3 : WORD; //BCD_value Bin1, Bin2, Bin3 : WORD; //Binary_value PV1, PV2, PV3 : WORD; //Counter value Set1, Set2, Set3 : BOOL; //Set counter Up1, Up2, Up3 : BOOL; //Count up Down1, Down2, Down3 : BOOL; //Count down Reset1, Reset2, Reset3 : BOOL; //Reset counter Status1, Status2, Status3 : BOOL; //Counter status Up : CTU; //SFB 0 IEC up counter Up4 : BOOL := FALSE; Reset4 : BOOL := FALSE; Status4 : BOOL := FALSE; Svalue4 : INT := 0; Zvalue4 : INT := 0;
Nhm I T04
Trang 77
Down : CTD; //SFB 1 IEC down counter Down5 : BOOL := FALSE; Set5 : BOOL := FALSE; Status5 : BOOL := FALSE; Svalue5 : INT := 0; Zvalue5 : INT := 0; UpDown : CTUD; //SFB 2 IEC up-down counter Up6 : BOOL := FALSE; Down6 : BOOL := FALSE; Reset6 : BOOL := FALSE; Set6 : BOOL := FALSE; VStatus6 : BOOL := FALSE; ZStatus6 : BOOL := FALSE; Svalue6 : INT := 0; Zvalue6 : INT := 0; END_VAR BEGIN //***************************************************************************** //Up counter BCD1 := S_CU( C_NO := "Counter1", CU := Up1, S := Set1, PV := PV1, R := Reset1, CV := bin1, Q := Status1); //Down counter BCD2 := S_CD( C_NO := "Counter2", CD := Up2, S := Set2, PV := PV2, R := Reset2, CV := bin2, Q := Status2); //Up-down counter BCD3 := S_CUD( C_NO := "Counter3", CU := Up3, CD := Down3,
Nhm I T04 Trang 78
S := Set3, PV := PV3, R := Reset3, CV := bin3, Q := Status3); //***************************************************************************** Up ( //Up counter CU := Up4, R := Reset4, PV := Svalue4); Status4 := Up.Q; Zvalue4 := Up.CV; Down ( //Down counter CD := Down5, LOAD := Set5, PV := Svalue5); Status5 := Down.Q; Zvalue5 := Down.CV; UpDown ( //Up-down counter CU := Up6, CD := Down6, R := Reset6, LOAD := Set6, PV := Svalue6); VStatus6 := UpDown.QU; ZStatus6 := UpDown.QD; Zvalue6 := UpDown.CV; //***************************************************************************** END_FUNCTION_BLOCK
Cc Hm ACR ASIN : Hm sin ngc ACOS : Hm Cos Ngc ATAN : Hm tan ngc
Nhm I T04
Trang 79
D liu ph hp cho vic tnh ton l INT, DINT huc REAL. Ch rng cc thng s ng vo ca cc php tnh c chuyn i bn trong cc bin thc.
6.3.2. Cc hm Logarit
Kiu d liu tnh ton l INT, DINT or REAL.
FUNCTION_BLOCK STD_MATH VAR real1 : REAL := 0; real2 : REAL := 0; real3 : REAL := 0; real4 : REAL := 0; real5 : REAL := 0; real6 : REAL := 0; real7 : REAL := 0; real8 : REAL := 0; real9 : REAL := 0; real10 : REAL := 0; real11 : REAL := 0; real12 : REAL := 0; real13 : REAL := 0; real14 : REAL := 0; Reactive_power: REAL := 0; Voltage : REAL := 230; Current : REAL := 1.5; PHI : REAL := 0.35; Volume : REAL := 0;
Nhm I T04 Trang 80
Radius : REAL := 47; Level : REAL := 120; PI : REAL := 3.141593; a : REAL := 5; b : REAL := 12; c : REAL := 0; END_VAR
BEGIN //*************************************************************************** real2 := ABS(real1); //Absolute value real3 := SQR(real1); //Generate square real4 := SQRT(real1); //Generate square root real5 := SIN(real1); //Sine real6 := COS(real1); //Cosine real7 := TAN(real1); //Tangent real8 := ASIN(real1); //Arc sine real9 := ACOS(real1); //Arc cosine real10 := ATAN(real1); //Arc tangent real11 := EXP(real1); //Exponentiation to base e real12 := EXPD(real1); //Exponentiation to base 10 real13 := LN(real1); //Natural logarithm real14 := LOG(real1); //Decimal logarithm //******************************************************************** Reactive_power:= Voltage * Current * sin(PHI); Volume := SQR(Radius) * Level * PI; c := SQRT(SQR(a) + SQR(b)); //******************************************************************** END_FUNCTION_BLOCK
6.4 Cc Hm Chuyn i:
Nu bn s dng 2 a ch trong mt php ton logic, th bn phi chc chn hai kiu d liu tng thch vi nhau. nu nhng a ch d c kiu d liu khc nhau th mt ci cn phi thay i. s chuyn i kiu d liu c th thc hin c trong chng trnh SCL nh bn di y: Chuyn i d liu kiu n ngm Cc kiu d liu c tp hp li thnh nhiu loi. nu nhng a ch di vo trong lp ging nhau. SCL to ra mt s chuyn i kiu d liu n. chc nng ny c s dng khi trnh dch gom li trong
Nhm I T04 Trang 81
chuyn i d liu kiu hin Nu cc a ch khng thuc mt lp ging nhau th bn phi khi ng chc nng chuyn i. c php chuyn i d liu kiu hin SCL cung cp nhiu nhm hm chun trong cc lp bn di - Hm chuyn i dng lp B Hm lm trn v ct bt
Hm chuyn i lp A
Bng di y biu din cc chc nng chuyn i d liu ca nhm A. Tn hm OK Quy tc chuyn i BOOL_TO_BYTE N Filled with leading zeros BOOL_TO_DWORD N Filled with leading zeros BOOL_TO_WORD N Filled with leading zeros BYTE_TO_DWORD N Filled with leading zeros BYTE_TO_WORD N Filled with leading zeros WORD_TO_DWORD N Filled with leading zeros DINT_TO_REAL N chuyn sang s thc tun theo tiu chun IEEE. Gi tr c th thay i ( lin quan n chnh xc cu s thc INT_TO_DINT N Cc k t trng s cao ca gi tr hm c chn vo bng gi tr 16#FFFF cho mt thng s ng vo , huc n c a vo cc s 0. Gi tr vn nh c INT_TO_REAL N chuyn i s thc theo tiu chun IEEE. Gi tr c gi nh c. CHAR_TO_STRING Y chuyn i mt chui ri ghi vo mt k t ging
Gi tr hm Kt qu lun l gi tr hm. Tn ca hm
Cc kiu d liu ca thng s ng vo v ga tr hm c th c nhn dng r dng trong tn hm trong lp A v B.v d, hm BOOL_TO_BYTE, kiu d liu ca thng s ng vo l BOOL v kiu d liu ca gi tr hm BYTE.
hm chuyn i lp B
Bng di cho thy hm chuyn i d liu cu lp B. Cc hm ny phi c xc nh r dng. kt qu ny cng c th khng c nh ngha nu kiu ch n khng rng. Bn c th kim tra cho v tr ny bi vic lin quan vi mt s kim tra gii hn huc bn th c mt h thng to ra s kim tra bi s la chn OK flag c u tin trong n trinh dch. Trong nhng tnh hung ny ni m kt qu c nh ngha, h thng set c OK FALSE. Bng chuyn i lp B ( part 1) Tn hm Quy tc chuyn i OOK BYTE_TO_BOOL Copy bt bn pha phi nht NN BYTE_TO_CHAR Copy chui bit NN CHAR_TO_BYTE Copy chui bit NN CHAR_TO_INT chui bit trong thng s ng vo c a vo trong byte trong NN s thpca gi tr hm. Cc byte trng s cao c gn bng cc s 0 DATE_TO_DINT Copy chui bit YY DINT_TO_DATE Coppy chui bit N DINT_TO_DWORD Coppy chui bit YY DINT_TO_INT Coppy bit nh du. Gi tr cu thng s ng vo c bin YY dch thnh dng d liu dng INT. nu gi tr thp hn -32768 huc ln hn 32767, bin OK c set FALSE. DINT_TO_TIME Coppy chui bit YN DINT_TO_TOD Coppy chui bit YY DWORD_TO_BOOL Coppy bit trng s thp nht YY DWORD_TO_BYTE Coppy 8 bt trng s thp nht YY DWORD_TO_DINT Coppy chui bit NN DWORD_TO_REAL Coppy chui bit NN DWORD_TO_WORD Coppy 16 bit trong s thp YY INT_TO_CHAR Coppy chui bit YY INT_TO_WORD Coppy chui bit NN REAL_TO_DINT Lm trn theo chun IEEE REAL sang DINT. NN nu gi tr nh hn -2147483648 huc ln hn 2147483647, bin OK s b set v FALSE REAL_TO_DWORD Coppy chui bit YY REAL_TO_INT Lm trn theo chun IEEE REAL sang INT. NN
Nhm I T04 Trang 83
nu gi tr nh hn -32768huc ln hn 32767, bin OK s b set v FALSE STRING_TO_CHAR Coppy thng s u ca chui. nu STRING khng c mt di ca 1, th bin OK c set FALSE TIME_TO_DINT Coppy chui bit TOD_TO_DINT Coppy chui bit WORD_TO_BOOL Coppy bit trng s thp nht WORD_TO_BYTE Coppy 8 bt trng s thp nht WORD_TO_INT Coppy chui bit WORD_TO_BLOCK_DB dng bit ca WORD c bin dch nh s ca khi d liu BLOCK_DB_TO_WORD Thng s ca khi d liu c bin dch nh dng bt ca WORD Bng chuyn i lp B ( part 2) Hm BOOL_TO_INT BOOL_TO_DINT BYTE_TO_INT BYTE_TO_DINT WORD_TO_DINT DWORD_TO_INT INT_TO_BOOL INT_TO_BYTE INT_TO_DWORD DINT_TO_BOOL DINT_TO_BYTE DINT_TO_WORD INT_TO_STRING DINT_TO_STRING REAL_TO_STRING STRING_TO_INT STRING_TO_DINT STRING_TO_REAL BCD_TO_INT(x) WORD_BCD_TO_INT(x) BCD_TO_INT(x) DWORD_BCD_TO_INT(x) INT_TO_BCD(x) INT_TO_BCD_WORD(x) DINT_TO_BCD(x) DINT_TO_BCD_DWORD(x)
YY
YY YY NN NN YY YY NN
Ok N N N N N Y Y Y N Y Y Y N N N N N N N N N N Y Y Y Y
Quy tc chuyn i WORD_TO_INT(BOOL_TO_WORD) DWORD_TO_DINT(BOOL_TO_DWORD) WORD_TO_INT (BYTE_TO_WORD) DWORD_TO_INT (BYTE_TO_DWORD) INT_TO_DINT(WORD_TO_INT) DINT_TO_INT(DWORD_TO_DINT) WORD_TO_BOOL(INT_TO_WORD) WORD_TO_BYTE(INT_TO_WORD) WORD_TO_DWORD(INT_TO_WORD) DWORD_TO_BOOL(DINT_TO_DWORD) DWORD_TO_BYTE(DINT_TO_DWORD) DWORD_TO_WORD(DINT_TO_DWORD) Like loadable IEC function FC 16 I_STRING Like loadable IEC function FC 5 DI_STRING Like loadable IEC function FC 30 R_STRING Like loadable IEC function FC 38 I_STRING Like loadable IEC function FC 37 STRING_DI Like loadable IEC function FC 39 STRING_R Gi tr trong tm 999-9 999 999 kiu WORD hoc DWORD
Nhm I T04
Trang 84
6.5 Hm Lm Trn V Ct Bt
Chc nng lm trn v ct bt cc s cng thuc v chc nng chuyn i d liu. bng ny biu din nhng tn,kiu liu ( cho cc thng s ng vo v gi tr hm) v nhim v cu cc hm ny. Tn hm ROUND Kiu thng s u vo REAL Kiu gi tr hm DINT Nhim v Lm trn (hnh thnh mt s DINT) vic tun th DIN EN 61131-3, hm ny lun lm trn gi trj INT k; trong cc WORD khc, 1.5 tr v 2v 2.5 cng tr v 2 s ct ct bt (hnh thnh s DINT)
TRUNC
REAL
DINT
6.6 Cc Hm s hc:
SEL : Hm chn la nh phn MUX : Hm chn la bi s MAX : Hm chn la gia tr ln nht MIN : Hm chn la gi tr nh nht LIMIT : B hn ch Bng m t: Hm SEL Thng s G IN0 IN1 Gi tr hm K IN0 IN1 INn INELSE Gi tr hm IN1 IN2 INn Gi tr hm IN1 IN2 Khai bo INPUT INPUT INPUT RETURN INPUT INPUT INPUT INPUT INPUT RETURN INPUT INPUT INPUT RETURN INPUT INPUT Dng d liu BOOL ANY ANY ANY INT ANY ANY ANY ANY ANY ANY_NUM ANY_NUM ANY_NUM ANY_NUM ANY_NUM ANY_NUM
M t
MUX
MAX
MIN
Nhm I T04
Trang 85
LIMIT
Inn Gi tr hm MN IN MX Gi tr hm
Mi hm chun v chui bt u c 2 nh dng thng s ng vo l IN v N. kt qu lun lun l gi tr ca hm. bng di lit k cc hm v kiu d liu ca cc thng s ng vo v gi tr hm. gii thch cc thng s ng vo: Thng s ng vo IN: b m bn trong s hot ng ca chui s c hot ng. kiu d liu ca thng s ng vo quyt nh kiu d liu ca gi tr hm. Thng s Ng vo N: s chu k ca m xoay vng ROL v ROR huc s ln v tr uc dch trong trng hp ca SHL v SHR Bng sau th hin kh nng cc hm s l chui Tn hm ROL Ng vo IN Ng N BOOL INT BYTE INT WORD INT DWORD INT BOOL BYTE WORD DWORD BOOL BYTE WORD DWORD INT INT INT INT INT INT INT INT vo kiu Gi tr hm BOOL BYTE WORD DWORD BOOL BYTE WORD DWORD BOOL BYTE WORD DWORD nhim v Gi tr ng IN c c xoay tri bi s ln xc nh cha trong N
ROR
SHL
Nhm I T04
Trang 86
SHR
6.8. Cc Hm X L Chui K T:
LEN Hm LEN tr li di hin hnh ca chui. mt chui rng c di l 0. Hm khng xut li. V d : LEN ( S:= XYZ)
CONCAT Hm CONCAT lin kt 2 bin STRING vo mt STRING. nu kt qa STRING di hn gi tr ti ng ra, kt qu chui c gii hn vi mt di ln nht. ni c th c a ra ti c OK. V d: CONCAT (IN1:= Valve, IN2:= open) LEFT huc RIGHT Hm LEFT v RIGHT (FC20 v FC32) tr li k t u huc cui ca cu mt chui. nu L cao hn di ca chui, th chui hon thin s c tr li. nu L=0, mt chui rng c tr v, nu L l m, mt ti ng ra s l chi rng v c OK s c set v 0 V d LEFT ( IN:= valve , L:=4) MID hm MID (FC26) tr li mt phn ca chui. L l di cu chui. chui ny s c c ra ngoi, P l v tr ca k t u c c ra ngoi. Nu tng ca L v (P-1) di hn di hin c cu chui th mt chui s c tr v khi ng thng s chi dn bi P v ko di n cui ca gi tr ng vo. Trong tt c cc tnh hung khc ( P nm ngoi di, P v/ huc L l mt gi tr 0 hoc nh hn 0), mt chui rng lm cho ng ra v c OK u b set v 0 v d: MID (IN:= Temperature, L:= 2, P:= 3) INSERT Hm INSERT (FC17) chn chui k t ti ti IN2 vo trong chui ti IN1 sau nhn dng thng s bi B. nu P =0, th chui t 2 c chn vo trc chui 1. nu P c di ln hn chui u tin th chui th 2
Nhm I T04 Trang 87
c li thm vi chui th nht. nu P < 0 th c mt chui rrng ng ra v c OK =0. c OK=0 khi m kt qu ca chui di hn gi tr xc nh ti ng ra, trong trng hp ny, chui tnh ton c gii hn vi cu hnh di ln nht. V d: INSERT (IN1:= Participant arrived, IN2:=Miller:= 2, P:= 11) DELETE Hm DELETE (FC4) so L k t ti mt chui bt u xc nh t k t xc nh P. nu m L v/huc P bng 0 huc nu m P ln hn di ca chui ng vo, th chui ng vo c tr li. nu tng ca L v P ln hn di gi tr ng vo, chui ny c xo n kt thc. nu L v/ hoc P nh hn 0, ng ra s rng vo c OK c set v 0. V d: DELETE (IN:= Temperature ok, L:= 6, P:= 5) REPLACE Hm REPLACE (FC31) thay th L k t ca chui u (IN1) bt u ti k t xc nh ti P vi chui th 2 (IN2). nu L =0, th chui u tin s c tr v. nu P =0 huc 1, thng s c th ch bt u t gi tr thng s ban u. nu P nm bn ngoi ca chui u, chui th hai c oc ni thm vi chui u. nu L v P l m. mt ng vo v c OK s l 0. c OK cng bng 0 khi m chui kt qu di hn thng s ca ng ra, trong trng hp ny. chui kt qu c gii hn bi cu hnh ln nht. V d: REPLACE ((IN1:= Temperature, IN2:= high L:= 6,P:= 5) FIND Hm FIND (FC11) tr li v tr ca chui th 2 (IN2) gia chui u(IN1). vic tm bt u t phai tri ; ci sy ra u tin ca chui l bo co li. nu chui th 2 khng xut hin trong chui u tin, s 0 c tr v. Hm ny khng xut hin ni. V d FIND (IN1:= Processingstation, IN2:=station)
Nhm I T04
Trang 88
GE_STRNG and LE_STRNG Hm GE_STRNG v LE_STNG so snh ni dung ca 2 bin trong trong nh dng chui so snh ln hn nh hn huc bng v v li kt qu ca php so snh. Gi tr tr v c mt trng thi tn hiu 1nu chui ca thng s S1 ln hn ( nh hn) huc bng thng s ca S2.thng s c so snh bt u t pha tri s dng m ASCII v d, a ln hn A). Thng s u tin khc vi, quyt nh kt ca chng trinh so snh.nu phn bn tri ca chui di hn c n nht vi chui ngn hn th chui di hn coi nh l ln hn. Hm ny khng xut hin li.
GT_STRNG and LT_STRNG Hm GT_STRNG v LT_STNG so snh gi tr ca 2 bin trong trong nh dng chui so snh ln hn nh hn huc bng v tr li kt qu ca php so snh. Gi tr tr v c mt trng thi tn hiu 1nu chui ca thng s S1 ln hn ( nh hn) huc bng thng s ca S2. thng s c so snh bt u t pha tri s dng m ASCII v d, a ln hn A). Thng s u tin khc vi, quyt nh kt ca chng trinh so snh.nu phn bn tri ca chui di hn c n nhtvi chui ngn hn th chui di hn coi nh l ln hn. Hm ny khng xut hin li.
I_STRNG v STRNG_I
Nhm I T04
Trang 89
Hm I_STRING(FC16) v STRNG_I (FC38) chuyn i mt bin trong nh dng INT vo trong chui k t huc mt chui vo trong trong bin INT. chui ny c trnh ra vi k hiu u. Nu s xc lp bin ny ti thng s tr v qu ngn, th khng c s chuyn i v c OK =0
DI_STRNG v STRNG_DI Hm DI_STRNG (FC5) and STRNG_DI (FC37) chuyn i mt bin trong nh dng DINT vo trong chui k t huc mt chui vo trong trong bin DINT. chui ny c trnh ra vi k hiu u. Nu s xc lp bin ny ti thng s tr v qu ngn, th khng c s chuyn i v c OK = 0
R_STRNG and STRNG_R Hm R_STRNG (FC5) and STRNG_R (FC37) chuyn i mt bin trong nh dng REAL vo trong chui k t huc mt chui vo trong trong bin REAL. chui ny c a ra vi 14 v tr. v.nnnnnnnExx nu bin c xc nh ti gi tr tr v l qua ngn huc nu khng c s du chm ng hp l ti ng vo IN, th khng c chuyn i v c OK =0.
Nhm I T04
Trang 90
6.10 v d v s l chui
a cng lc nhng dng tin nhn texts //Put message texts together controlled by the process and store //them //////////////////////////////////////////////////////////////// //The block contains the necessary message texts and the last 20 //messages generated //////////////////////////////////////////////////////////////// DATA_BLOCK Messagetexts STRUCT Index : int; textbuffer : array [0..19] of string[34]; HW : array [1..5] of string[16]; //5 different devices statuses : array [1..5] of string[12]; // 5 different statuses END_STRUCT BEGIN Index :=0; HW[1] := Motor ; HW[2] := Valve ; HW[3] := Press ; HW[4] := Weldingstation ; HW[5] := Burner ; Statuses[1] := problem; Statuses[2] := started; Statuses[3] := temperature; Statuses[4] := repaired; Statuses[5] := maintained; END_DATA_BLOCK ////////////////////////////////////////////////////////////////
Nhm I T04 Trang 91
//The function puts message texts together and enters them in //the DB message texts. The message texts are stored in a //circulating buffer. The next free index of the text buffer is //also in the DB message texts and is updated by the function. //////////////////////////////////////////////////////////////// FUNCTION Textgenerator : bool VAR_INPUT unit : int; //Index of the device text no : int; // ID no. of the device status : int; value : int; END_VAR VAR_TEMP text : string[34]; i : int; END_VAR //initialization of the temporary variables text := ; Textgenerator := true; Case unit of 1..5 : case status of 1..5 : text := concat( in1 := Messagetexts.HW[unit], in2 := right(l:=2,in:=I_STRNG(no))); text := concat( in1 := text, in2 := Messagetexts.statuses[status]); if value <> 0 then text := concat( in1 := text, in2 := I_STRNG(value)); end_if; else Textgenerator := false; end_case; else Textgenerator := false; end_case; i := Messagetexts.index; Messagetexts.textbuffer[i] := text; Messagetexts.index := (i+1) mod 20; END_FUNCTION //////////////////////////////////////////////////////////////// //The function is called in the cyclic program at an edge change //in %M10.0 and a message is entered once if a parameter //changes. ////////////////////////////////////////////////////////////////
Nhm I T04 Trang 92
Organization_block Cycle Var_temp Opsy_ifx : array [0..20] of byte; error: BOOL; End_var; //////////////////////////////////////////////////////////////// //The following call enters the message "Motor 12 started" in //text buffer of DB message texts, with %MW0 supplying a 1, %IW2 //the 12 and %MW2 a 2. *) //////////////////////////////////////////////////////////////// if %M10.0 <> %M10.1 then error := Textgenerator (unit := word_to_int(%MW0), no := word_to_int(%IW2), status := word_to_int(%MW2), value := 0); %M10.1:=M10.0; end_if; end_organization_block
Nhm I T04
Trang 93
Tham s c xc nh trong vic gn gi tr. Vic gn gi tr b nhim 1 gi tr (tham s thc) n tham s c nh ngha trong phn din gii ca khi c gi (tham s chnh).
7.2 Gi khi hm Khi bn gi 1 khi hm, bn c th s dng cng lc khi d liu chia s v vng nh cc b ca khi d liu ang hot ng. Gi 1 FB nh 1 vng cc b khc vi gi nh 1 vng nh chia s trong vic d liu s c cha u. y d liu khng c lu trong DB c bit m trong khi d liu tc thi khi gi FB. C php
Php gi c to nn bi 1 lnh gi bng cch sau: Tn ca khi hm hay khi hn h thng (FB hay SFB). Khi d liu tc thi (DB). Tham s cung cp (tham s FB).
Php gi nh 1 chia s cc b Php gi c to nn bi 1 lnh gi bng cch sau: Tn ca khi cc b. Tham s cung cp (tham s FB).
1 php gi cc b tc thi lun l tng trng. Bn phi khai bo tn tng trng trong khi khai bo ca khi gi hm.
Cc qui tc sau c p dng khi cung cp tham s: Php gn c th l bt k lnh no. Loi d liu ca tham s thc v hnh thc phi ph hp. Cc php gn phi c tch ring bng du phy. Php gn ng ra l khng th trong vic gi FB. Gi tr tham s ng ra c cha trong d liu tc thi. T n c th c truy nhp bi tt c FBs. c 1 tham s ng ra, bn phi nh ngha truy nhp trong 1 FB. Ghi nh cc s liu c bit cho tham s ca bt k loi d liu v loi d liu con tr. Kt qu sau khi thc thi khi Sau khi thc thi khi: V d 1 php gi v 1 php gn cho 1 tham s vo v vo/ra biu din nh sau: FB31.DB7 (I_Par:=3, IO_Par:=LENGTH); 7.2.2 Php Tham s thc c chuyn i th khng thay i. Chuyn i v xc nh gi tr ca tham s vo/ra s c cp nht; tham s vo/ra ca 1 loi d liu n gin l 1 ngoi l trong qui tc ny. Tham s ng ra c th c c bng vic gi khi t khi d liu chia s tc thi hay chia s cc b.
Gn Ng Vo (FB)
Php gn ng vo b nhim tham s thc cho tham s hnh thc. FB khng th thay i tham s thc. Php gn cho tham s thc ng vo l ty chn. Nu khng c tham s thc no c xc nh th gi tr ca php gi cui c gi li. Cc tham s thc c th c c cho bn di:
Nhm I T04
Trang 96
C php
7.2.3 Php
Gn Vo/Ra (FB)
Php gn vo/ra c dng gn gi tr tham s thc n tham s hnh thc vo/ra. FB c gi c th thay i tham s vo/ra. Gi tr mi ca tham s ly kt qu t vic x l FB c ghi tr li tham s thc. Gi tr ban u b ghi . Nu tham s vo/ra khai bo trong FB c gi, chng phi c cung cp gi tr khi khi c gi ln u tin. Khi n c x l ln tip theo, tham s thc l ty chn. Trong tham s thc ca loi d liu n gin, khng c cp nht gi tr cho tham s thc nu tham s hnh thc khng c cung cp gi tr khi khi c gi. Khi gn gi tr cho tham s thc nh 1 tham s vo/ra c th thay i khi FB ang c thc thi, n phi l 1 bin.
Nhm I T04
Trang 97
C php
Ch Qui tc c bit p dng cung cp gi tr cho loi d liu ANY v POINTER. Khi sau khng th dng tham s thc gn cho tham s vo/ra ca loi d liu phc tp: Tham s vo/ra FB Tham s FC
7.2.4 c
Gi Tr Ng Ra (Php Gi FB)
Sau khi khi c gi c thc thi, tham s ng ra c th c c t khi chia s tc thi hay khi chia s cc b dng php gn gi tr. V d RESULT:= DB10.CONTROL; 7.2.5 V
1 v d v 1 khi hm vi vng lp FOR c th thy trong v d di. Cc v d ny cho thy k hiu TEST c khai bo trong bng k hiu FB17. Khi hm Php gi gi FB, bn c th chn 1 trong cc cch sau. N ch ra rng VARIABLE1 c khai bo trong khi ang gi nh 1 bin REAL.
Nhm I T04
Trang 98
Kt qu Sau khi khi c thc thi, gi tr c tnh ton cho tham s vo/ra IQ1 th nm trong VARIABLE1. c 1 gi tr ng ra Hai v d di cho thy c 2 cch c gi tr ng ra CONTROL
7.2.6 V
D V Php Gi Nh 1 Cc B Tc Thi
1 khi hm vi 1 vng lp FOR n gin c th c lp trnh nh trong v d php gi nh 1 cc b tc thi cho thy k hiu TEST c khai bo trong bng k hiu FB17. FB ny c th c gi nh bn di, cho thy VARIABLE1 c khai bo trong khi ang gi nh 1 bin REAL. Php gi
ng ra
Nhm I T04
Trang 99
7.3 Gi
Hm
Bn gi 1 hm bng cch xc nh tn hm (FC, SFC) v danh sch tham s. Bn c th xc nh tn hm c tr li gi tr bng cch c lp hay tng trng:
Sau khi gi hm, kt qu ca hm tr li gi tr hay tr li tham s ra v tham s vo/ra (tham s thc). C php
Ch Nu 1 hm c gi trong SCL v gi tr tr li ca n khng c cung cp, iu c th dn n vic thc thi chng trnh sai: C th xut hin 1 hm c lp trnh trong SCL khi gi tr tr li c cung cp nhng tr v cu lnh khng c thc thi. C th xut hin 1 hm c lp trnh trong STL/LAD/FBD, nu hm c lp trnh khng cung cp gi tr tr v hay cu lnh tr v khng c thc thi.
Gi Tr Tr V (FC)
7.3.1 Tri ngc vi khi hm, hm cung cp 1 kt qu c bit nh l kt qu tr v. V l do , hm c c nh du a ch (ngoi tr: hm loi VOID). Hm tnh ton gi tr tr v c cng tn hm v tr v khi khi ang c gi. V th, gi tr thay th hm gi. V d trong php gn gi tr sau, hm DISTANCE c gi v kt qu c gn cho bin LENGTH:
Nhm I T04 Trang 100
LENGTH := DISTANCE (X1:= -3, Y1:= 2) ; Gi tr tr v c th c s dng trong phn tip theo ca FC hay FB: Trong php gn gi tr, Trong din gii logic, s hc hay so snh hay Nh 1 tham s cho php gi hm hay khi hm tip theo. Ch Nu hm tr v gi tr ANY, t nht 1 tham s ng vo hay vo/ra phi l loi ANY. Nu c nhiu hn 1 tham s ANY, bn phi cung cp thm tham s thc ca lp cng loi (v d INT, DINT v REAL). Kt qu tr v t ng s thuc loi d liu ln nht trong lp . di ln nht ca loi d liu STRING l 254 k t tr xung.
7.3.2 Tham
s FC
Tri vi khi hm, hm khng cn vng nh lu tr gi tr ca tham s. D liu cc b ch lu tm thi khi hm hot ng. V l do , khi bn gi hm, tt c tham s ng vo, vo/ra v ng ra hnh thc uc nh ngha trong vng khai bo ca hm phi c gn cho tham s thc. C php
Qui tc Qui tc khi Php gn c th l bt k lnh no Loi d liu ca tham s hnh thc v thc phi ph hp. V d 1 php gi vi 1 php gn cho 1 tham s ng vo, ng ra v vo/ra c th xut hin nh v d sau: cung cp tham s
7.3.3 Php
Gn Ng Vo (FC)
Trang 101
Nhm I T04
Dng php gn ng vo, tham s ng vo hnh thc ca FC c gi l gn gi tr (tham s thc). FC c th hot ng vi tham s thc ny nhng khng thay i chng. Ngc li trong php gi FB, php gn ny l khng ty chn vi 1 php gi FC. Cc tham s thc sau c th c gn trong php gn ng vo:
C php
Ch Vi tham s ng vo hnh thc ca loi d liu phc tp, tham s vo/ra FB v tham s FC khng cho php l tham s thc. Ghi nh cc s liu c bit ca loi d liu ANY v POINTER.
7.3.4 Php
Gn Ng Ra V Vo/Ra (FC)
Trong php gn ng ra, bn phi xc nh bin ca khi ang gi trong gi tr ng ra c tnh t vic thc thi hm c ghi vo. 1 php gn vo/ra c dng khai bo 1 gi tr thc cho tham s vo/ra.
Nhm I T04 Trang 102
Tham s thc trong php gn ng vo v vo/ra phi l bin khi FC ghi gi tr vo tham s. V vy tham s ng vo khng th c gn trong php gn vo/ra (gi tr khng c ghi). Ngha l ch c cc bin m rng c gn trong php gn ng ra v vo/ra.
C php
Ch Cc tham s thc khng c i cng vi tham s ng ra v vo/ra hnh thc: Tham s ng vo FC/FB. Tham s vo/ra FB ca loi d liu phc tp. Tham s vo/ra FC v tham s ng ra ca loi d liu phc tp. Ghi nh cc s liu c bit ca loi d liu ANY v POINTER. di ln nht ca loi d liu STRING l 254 k t tr xung.
7.3.5 V
D V Php Gi Hm
Hm c gi 1 hm DISTANCE tnh ton khong cch gia 2 im (X1,Y1) v (X2,Y2) trong cng 1 mt phng dng h thng cc ca to c th dng cch sau.
Nhm I T04
Trang 103
Gi khi V d sau cho nhiu la chn hn cho nhiu cch s dng gi tr hm:
7.4 Tham
S Xc nh Hon Ton
7.4.1 Tham s ng vo EN Mi khi hm v mi hm u c tham s xc nh hon ton EN. EN thuc loi d liu kiu BOOL v c cha trong vng nh khi d liu tm thi. Nu EN l TRUE th khi c thc thi. Ngc li th khng c thc thi. Cung cp gi tr cho tham s EN l ty chn. Tuy nhin nh rng n khng cn khai bo trong vng khai bo ca khi hay hm. Khi EN l tham s ng vo, bn khng th thay th EN trong khi.
Nhm I T04 Trang 104
7.4.2 Tham
S Ng Ra ENO
Mi khi hm v mi hm u c tham s xc nh hon ton ENO. ENO thuc loi d liu kiu BOOL v c cha trong vng nh khi d liu tm thi. Khi khi c thc thi, gi tr hin thi ca c OK th c in vo trong ENO. Ngay sau khi khi c gi, bn c th kim tra gi tr ca ENO xem cc hot ng trong khi chy ng hay c li xy ra khng.
Nhm I T04
Trang 105
Vng B
n giao thng c 2 ch hot ng l Auto v Manual Trong ch bng tay ngi vn hnh cho cc n v Xanh 2 bn sng ty . Trong ch Auto th thi gian sng cc n nh sau:
Nhm I T04 Trang 106
Xanh B
Xanh A
16s
Vng A
4s
A Xanh B Vng B
20s
Bn iu khin gm c 4 nt v 4 n bo trng thi: Ban u vo chng trnh c 2 nt chn chc nng l Auto hoc Manual. Nu chn ch no th n tng ng ca ch sng. Sau khi chn ch xong ta nhn nt xc nhn Start th h thng bt u hot ng. Nu nhn stop th h thng s dng li trong bt k thi im no.
Nhm I T04 Trang 107
Trong ch t ng: n Xanh sng 16 giy n Vng sng 4 giy n sng 20 giy Trong ch tay: Xanh A V B hoc Xanh B hoc A c thi gian sng do ngi iu chnh. Chng trnh iu khin vit bng ngn ng SCL nh sau:
FUNCTION_BLOCK FB1 VAR_INPUT mytime : TIMER ; set END_VAR VAR_OUTPUT result : BOOL ; END_VAR VAR bcdvalue : S5TIME ; binvalue : WORD ; initialvalue: S5TIME ; END_VAR BEGIN : BOOL;
bcdvalue := S_ODT ( T_NO := mytime , // so hieu timer S := set , // start timer TV := initialvalue , // Gia tri thoi gian delay = 4s R := false , // ngo reset ta bo qua BI := binvalue , // hien thi thoi gian ma nhi phan Q := M0.1) ; // ngo ra END_FUNCTION_BLOCK
Nhm I T04 Trang 108
//-----------------------------------------FUNCTION_BLOCK FB2 VAR_INPUT mytime : TIMER ; set END_VAR VAR_OUTPUT result : BOOL ; END_VAR VAR bcdvalue : S5TIME ; binvalue : WORD ; initialvalue: S5TIME ; END_VAR BEGIN // chuong trinh chinh initialvalue:= T#4S ; bcdvalue := S_ODT ( T_NO := mytime , // so hieu timer S := set , // start timer TV := initialvalue , // Gia tri thoi gian delay = 4s R := false , // ngo reset ta bo qua BI := binvalue , // hien thi thoi gian ma nhi phan Q := M0.2) ; // ngo ra END_FUNCTION_BLOCK //-----------------------------------------FUNCTION_BLOCK FB3 VAR_INPUT mytime : TIMER ; // gan bien ten timer // Khai bao timer 3 la 16 s // dat thoi gian la 4 giay : BOOL; // gan bien ten timer // bien khoi dong timer // Khai bao timer 2 la 4 s
Nhm I T04
Trang 109
set END_VAR
: BOOL;
VAR_OUTPUT result : BOOL ; END_VAR VAR bcdvalue : S5TIME ; binvalue : WORD ; initialvalue: S5TIME ; END_VAR BEGIN // chuong trinh chinh initialvalue:= T#4S ; bcdvalue := S_ODT ( T_NO := mytime , // so hieu timer S := set , // start timer TV := initialvalue , // Gia tri thoi gian delay = 4s R := false , // ngo reset ta bo qua BI := binvalue , // hien thi thoi gian ma nhi phan Q := M0.3) ; // ngo ra END_FUNCTION_BLOCK //-----------------------------------------FUNCTION_BLOCK FB4 VAR_INPUT mytime : TIMER ; set END_VAR VAR_OUTPUT result : BOOL ; : BOOL; // gan bien ten timer // bien khoi dong timer // Khai bao timer 2 la 4 s // dat thoi gian la 4 giay
Nhm I T04
Trang 110
END_VAR VAR bcdvalue : S5TIME ; binvalue : WORD ; initialvalue: S5TIME ; END_VAR BEGIN // chuong trinh chinh initialvalue:= T#4S ; bcdvalue := S_ODT ( T_NO := mytime , // so hieu timer S := set , // start timer TV := initialvalue , // Gia tri thoi gian delay = 4s R := false , // ngo reset ta bo qua BI := binvalue , // hien thi thoi gian ma nhi phan Q := M0.4) ; // ngo ra END_FUNCTION_BLOCK //========================================= ORGANIZATION_BLOCK OB1 // Quy Uoc: Xanh 1 = q5.1 // Quy Uoc: Vng 1 = q5.2 // Quy Uoc: o 1 = q5.3 // Quy Uoc: Xanh 2 = q5.4 // Quy Uoc: Vng 2 = q5.5 // Quy Uoc: o 2 = q5.6 // Quy Uoc: en manual = q4.7 // Quy Uoc: en Auto = q4.6 // Quy Uoc: en Start = q4.4 // Quy Uoc: en Stop = q4.5 BEGIN //--------- Doan chuong trinh chon che do Auto/ Manual -------IF (( i0.7 OR q0.7) AND (NOT i0.6) AND (NOT i0.1))=1 THEN q0.7:=1; ELSE
Nhm I T04 Trang 111
q0.7:=0; END_IF; IF (( i0.6 OR q0.6) AND (NOT i0.7) AND (NOT i0.1))=1 THEN q0.6:=1; ELSE q0.6:=0; END_IF; //-------------------------IF (( i0.0 OR m4.7 OR q4.4) AND q4.7 AND (NOT i0.1))=1 THEN m4.7:=1; q4.4:=1; ELSE m4.7:=0; q4.4:=0; END_IF; IF (( i0.0 OR m4.6 OR q4.4 ) AND q4.6 AND (NOT i0.1))=1 THEN m4.6:=1; q4.4:=1; ELSE m4.6:=0; q4.4:=0; END_IF; //------- oan chuong trinh chay che do manual ------IF ((i0.5 OR m5.0 OR m5.1 ) AND m4.7 AND ( NOT i0.1))=1 THEN m5.0:=1; m5.1:=1; ELSE m5.0:=0; m5.1:=0; END_IF; //----------------------------------------IF ((i0.4 OR m5.2 OR m5.3 ) AND m4.7 AND ( NOT i0.1))=1 THEN m5.2:=1; m5.3:=1;
Nhm I T04 Trang 112
ELSE m5.2:=0; m5.3:=0; END_IF; // ------- chay che do auto --------------//-----------------------------------T1 chay IF (m4.6 AND (NOT m0.4))=1 THEN FB1.DB1(MYTIME:=T1,SET:=1); ELSE FB1.DB1(MYTIME:=T1,SET:=0); END_IF; //-----------------------------------T2 chay IF (m4.6 AND m0.1)=1 THEN FB2.DB2(MYTIME:=T2,SET:=1); ELSE FB2.DB2(MYTIME:=T2,SET:=0); END_IF; //-----------------------------------T3 chay IF (m4.6 AND m0.2)=1 THEN FB3.DB3(MYTIME:=T3,SET:=1); ELSE FB3.DB3(MYTIME:=T3,SET:=0); END_IF; //-----------------------------------T4 chay IF (m4.6 AND m0.3)=1 THEN FB4.DB4(MYTIME:=T4,SET:=1); ELSE FB4.DB4(MYTIME:=T4,SET:=0); END_IF; //----------------------------------IF ((m4.6 AND (NOT m0.1)) OR m5.0 ) =1 THEN q5.1:=1; ELSE q5.1:=0; END_IF; //---------------------------------------------Nhm I T04 Trang 113
IF ( m4.6 AND m0.1 AND (NOT m0.2)) = 1 THEN q5.2:= 1; ELSE q5.2:=0; END_IF; //--------------------------------------------IF ((m4.6 AND m0.1 AND m0.2 AND (NOT m0.3)) OR m5.2 ) =1 THEN q5.4:=1; ELSE q5.4:=0; END_IF; IF (m4.6 AND m0.1 AND m0.2 AND m0.3 AND (NOT m0.4))=1 THEN q5.5:=1; // ELSE q5.5:=0; END_IF; q4.5:= (i0.1 OR q4.5) AND (NOT i0.0); // den stop q5.3:= ( q5.4 OR q5.5); // den do A q5.6:= ( q5.1 OR q5.2); // den do B ; END_ORGANIZATION_BLOCK
Nhm I T04
Trang 114
Sau y l chng trnh dng LAD tng ng: on chng trnh chn ch hot ng
Nhm I T04
Trang 115
Nhm I T04
Trang 116
Nhm I T04
Trang 117
Bng m ha :
Nhm I T04
Trang 118
Nhm I T04
Trang 119