廣東西門子S7-1500PLC模塊代理(優(yōu)勢價(jià)格)

S7-300/400系列PLC賦值指令
LAD編程語言MOVE(賦值)指令將輸入端IN地址中的值或者常數(shù)賦值到輸出端OUT的地址中。MOVE多可以賦值4Byte的變量,用戶定義的數(shù)據(jù)類型(例如數(shù)組或者結(jié)構(gòu))必須使用系統(tǒng)功能“BLKMOVE”(SFC 20)進(jìn)行賦值。在STL編程語言中,使用裝載和傳遞指令實(shí)現(xiàn)相同功能,裝載功能實(shí)現(xiàn)將一個(gè)大4Byte的常數(shù)、變量或者地址寄存器傳送到累加器;傳遞功能實(shí)現(xiàn)將累加器中的值傳送到變量。除此之外,裝載和傳遞指令中還包含對地址寄存器操作的指令。
CPU內(nèi)部寄存器中有兩個(gè)地址寄存器,分別以AR1、AR2表示,每個(gè)地址寄存器占有32位地址空間。地址寄存器存儲(chǔ)區(qū)域內(nèi)部和區(qū)域交叉地址指針,用于地址的間接尋址、地址寄存器及指針的使用,在地址指針章節(jié)中將詳細(xì)介紹。賦值指令如表2-33所示。
從指令表中可以看到,使用LAD編程語言只有賦值指令,使用STL編程語言指令分為裝載和傳遞指令,其中包含地址寄存器的處理指令。
1.LAD賦值指令
賦值指令是數(shù)值的傳遞,所有指令的輸入、輸出端的數(shù)據(jù)類型沒有限制。例如輸入端是一個(gè)字節(jié),輸出端可以是一個(gè)字節(jié)、字、雙字,也可以是一個(gè)整數(shù)、雙整數(shù),數(shù)值的類型可以自動(dòng)轉(zhuǎn)換(已經(jīng)定義的數(shù)據(jù)類型不能轉(zhuǎn)換)。賦值指令的使用如圖2-16所示。
程序中,程序段1將常數(shù)123傳送到變量MW200中,將MB10中的數(shù)值傳送到變量MB20中。程序段2將變量MB30中的數(shù)值傳送到變量MW32中,字節(jié)傳送到字中,數(shù)值不會(huì)溢出,如果將變量MD40傳送到變量MB44中,則傳送的數(shù)值大于255,出現(xiàn)溢出(實(shí)際將MB43傳送到變量MB44,如果MD40的值為DW#16#1234,指令執(zhí)行后MB44的值為B#16#34),運(yùn)算出現(xiàn)錯(cuò)誤,編程時(shí)應(yīng)注意。
2.STL裝載、傳送指令
STL的賦值指令分為裝載和傳送指令,指令介紹如下。
(1)L(裝載)指令與T(傳送)指令
L指令將數(shù)值傳送給累加器1,T指令將累加器1中的數(shù)值傳送到變量,指令使用的示例程序如下:
LIB 10 //將IB10裝載到累加器1中
TQB 1 //將累加器1中的值(IB10)傳送到QB1
LMB 120 //將MB120裝載到累加器1中
TDBB 100 //將累加器1中的值(MB120)傳送到DBB100
LDIW 6 //將DIW16裝載到累加器1中
TDIW 80 //將累加器1中的值(DIW16)傳送到DIW80
LLD 252 //將臨時(shí)變量LD 252裝載到累加器1中
TMD 40 //將累加器1中的值(LD 252)傳送到MD40
LP#1 8.7 //將指針P#18.7裝載到累加器1中
TMD 80 //將累加器1中的值(指針為P#18.7)傳送到MD80
裝載指令L與傳送指令T配合使用,裝載指令也可以將累加器1中的值堆棧到累加器2中,例如:
LMB 10 //將MB10裝載到累加器1中
LMB 11 //將MB11裝載到累加器1中,MB10自動(dòng)進(jìn)入累加器2
TDBB 100 //將累加器1中的值(MB11)傳送到DBB100
傳送指令T只能將累加器1中的值傳送到變量中。
(2) LSTW與T STW指令
L STW指令裝載狀態(tài)字到累加器1中,但是不能將S7-300 CPU的/FC、STA、OR狀態(tài)位裝載到累加器;T STW指令將累加器1中的值傳送到狀態(tài)字中。指令使用的示例程序如下:
LSTW //將當(dāng)前的狀態(tài)字裝載到累加器1中
TMW 40 //將累加器1中的值(狀態(tài)字)傳送到MW140進(jìn)行分析判斷
L2#111111111 //將2#111111111裝載到累加器1中
TSTW //將狀態(tài)字中所有狀態(tài)位置1
L STW指令與T STW指令可以在程序中對狀態(tài)字進(jìn)行監(jiān)控,但在實(shí)際的編程應(yīng)用中很少使用。
(3) LAR1與TAR1指令
LAR1指令將累加器1中的值裝載到地址寄存器1中,TAR1指令將地址寄存器1中的值傳送到累加器1中,指令使用的示例程序如下:
LP#120.0 //將指針P# 120.0裝載到累加器1中
LAR1 //將累加器1中的值(指針P# 120.0)裝載到地址寄存器1
TAR1 //將地址寄存器1中地址(指針P# 120.0)傳送到累加器1中
TMD 80 //將累加器1中的值(指針P# 120.0)傳送MD80
上面的示例程序?qū)崿F(xiàn)對地址寄存器1的讀寫操作,程序?qū)嶋H將指針P#120.0傳送到變量MD80中。
(4) LAR2與TAR2指令
LAR2、TAR2指令與指令LAR1、TARI使用方式相同,實(shí)現(xiàn)對地址寄存器2的讀寫操作。
(5) LAR1<D>與TAR1<D>指令
與LAR1相比,LAR1<D>指令直接將地址指針裝載到地址寄存器1中,同樣,TAR1<D>直接將地址寄存器1中的地址指針傳送到變量中。指令中的<D>表示寄存器地址指針的雙整數(shù)變量或指針常數(shù)。指令使用的示例程序如下:
LAR1DBD 24 //將數(shù)據(jù)塊變量DBD24存儲(chǔ)的地址指針直接裝載到地址寄存器
AR1中
LAR1 LD 100 //將區(qū)域變量LD100存儲(chǔ)的地址指針直接裝載到地址寄存器AR1中
LAR1 MD 40 //將變量MD40存儲(chǔ)的地址指針直接裝載到地址寄存器AR1中
LAR1 P#M 100.0 //將地址指針常數(shù)P#Ml00.0直接裝載到地址寄存器AR1中
TAR1 DBD 20 //將地址寄存器AR1中的值,直接傳送到變量DBD20中
TAR1 DID 30 //將地址寄存器AR1中的值,直接傳送到變量DID30中
TAR1 LD 180 //將地址寄存器AR1中的值,直接傳送到變量LD180中
TAR1 MD 24 //將地址寄存器AR1中的值,直接傳送到變量MD24中
(6) LAR2<D>與TAR2<D>指令
LAR2<D>、TAR2<D>指令與指令LAR1<D>、TAR1<D>使用方式相同,實(shí)現(xiàn)對地址寄存器2的直接讀寫操作。
(7) LARIAR2與TAR AR2指令
LAR1 AR2指令將地址寄存器AR2中的值,直接裝載到地址寄存器AR1中;TAR1AR2指令將地址寄存器AR1中的值,直接傳送到地址寄存器AR2中,指令使用的示例程
序如下:
LAR1 P#10.0 //將地址寄存器P#10.0,直接裝載到地址寄存器AR1中
TAR1 AR2 //將地址寄存器AR1中的值,直接裝載到地址寄存器AR1中
LAR1 AR2 //將地址寄存器AR2存儲(chǔ)的地址直接裝載到地址寄存器AR1中
TAR1l MD 100 //將地址寄存器AR1中的值直接傳送到變量MD100中
A IMD 100] //如果I10.0為1,Q1.1輸出為1
= Q1.1
(8) CAR指令
CAR指令將地址寄存器1與地址寄存器2中存儲(chǔ)的地址指針相互交換,指令使用的示例程序如下:
LAR1 P#10.0 //降低至指針常數(shù)P#10.0直接裝載到地址寄存器AR1中
LAR2 P#11.0 //將地址指針常數(shù)P#11.0直接裝載到地址寄存器AR2中
CAR //AR1與AR2地址指針交換,AR1中裝載地址指針P#11.0,AR2
中裝在地址指針P#IO.O
TAR1 MD 100 //將地址寄存器AR1中的值直接傳送到變量MD100中,MD100中
存儲(chǔ)地址指針P#ll.0
CAR //AR1與AR2地址指針交換,AR1中裝載地址指針P#10.0,AR2
中裝載地址指針P#11.0
TAR1 MD 104 //將地址寄存器AR1中的值直接傳送到變量MD104中,MD104中
存儲(chǔ)地址指針P#10.0
A M [MD 100] //如果M11.0為1,M10.0輸出為1
= M [MD 104]
邏輯控制指令包含各種跳轉(zhuǎn)指令,通過跳轉(zhuǎn)指令及程序跳轉(zhuǎn)標(biāo)簽( Label)控制程序的跳轉(zhuǎn)。邏輯控制指令如表2-27所示。
使用LAD編程,程序跳轉(zhuǎn)指令少,使用比較簡單。使用STL編程時(shí),可以根據(jù)狀態(tài)位的狀態(tài)進(jìn)行程序跳轉(zhuǎn),跳轉(zhuǎn)指令比較靈活。下面分別介紹兩種編程語言的跳轉(zhuǎn)指令。
1.LAD編程指令
LAD跳轉(zhuǎn)指令有-(JMP)(為1跳轉(zhuǎn))和-(JMPN)(為0跳轉(zhuǎn))兩種,根據(jù)前面的條件,跳轉(zhuǎn)到自己定義的LABEL(標(biāo)號(hào),多4個(gè)字符,*字符必須是字母)程序段。LAD編程的跳轉(zhuǎn)指令如圖2-15所示。
使用-(JMP)指令,如果前面沒有觸發(fā)條件,程序執(zhí)行后無條件跳轉(zhuǎn)到標(biāo)號(hào)的程序段。使用-(JMPN)指令,前面必須有觸發(fā)條件,否則指令違法,跳轉(zhuǎn)指令中的標(biāo)號(hào)必須與程序段標(biāo)號(hào)*,可以調(diào)用多條跳轉(zhuǎn)指令跳轉(zhuǎn)到同一標(biāo)號(hào)的程序段中。在示例程序中,如果觸點(diǎn)信號(hào)M2.0為1,則程序跳轉(zhuǎn)到標(biāo)號(hào)為k1的程序段(程序段3);如果觸點(diǎn)信號(hào)M2.1為0,則程序跳轉(zhuǎn)到標(biāo)號(hào)為k2的程序段(程序段4),CPU將不掃描程序段3。
2.STL指令
STL與LAD編程跳轉(zhuǎn)的方式相同,所有跳轉(zhuǎn)指令必須定義跳轉(zhuǎn)的標(biāo)號(hào),格式如下:
JC M2
*
*
*
M2:*
*
*
JC為跳轉(zhuǎn)指令,M2為用戶定義的標(biāo)號(hào),在跳轉(zhuǎn)的程序標(biāo)號(hào)后面,必須加上符號(hào)“:”,
根據(jù)跳轉(zhuǎn)指令,STL編程語言可劃分下面幾種跳轉(zhuǎn)指令。
(1)無條件跳轉(zhuǎn)指令JU、JL
JU指令的使用示例程序如下:
A I1.2
JC DELE //如果I1.2為1,則跳轉(zhuǎn)到標(biāo)號(hào)“DELE”
LMB 10
INC 1
TMB 10
JU FORW //不需要觸發(fā)條件,程序無條件跳轉(zhuǎn)到標(biāo)號(hào)“FORW”
DELE:T MB 10
L 0
FORW:A I 2.1 //程序跳轉(zhuǎn)到標(biāo)號(hào)“FORW”后,程序從這里繼續(xù)執(zhí)行
JL指令根據(jù)累加器1的數(shù)值跳轉(zhuǎn)到相應(yīng)的標(biāo)號(hào)程序段,指令的示例程序如下:
LMB 0 //裝載MBO到累加器l
JL LSTX //累加器1的值大于3時(shí),跳轉(zhuǎn)到標(biāo)號(hào)LSTX程序段
JU SEGO //累加器1的值等于0時(shí),跳轉(zhuǎn)到標(biāo)號(hào)SEGO程序段
JU SEG1 //累加器1的值等于1時(shí),跳轉(zhuǎn)到標(biāo)號(hào)SEG1程序段
JU SEG2 //累加器1的值等于2時(shí),跳轉(zhuǎn)到標(biāo)號(hào)SEG2程序段
JU SEG3 //累加器1的值等于3時(shí),跳轉(zhuǎn)到標(biāo)號(hào)SEG3程序段
LSTX: JU COMM
SEGO:* //合法指令
*
JU COMM
SEG1:* //合法指令
*
JU COMM
SEG2:* //合法指令
*
JU COMM
SEG3:* //合法指令
*
JU COMM
COMM:* //合法指令
*
上面為JL指令固定的編程格式,多允許有255個(gè)跳轉(zhuǎn)條目,示例程序中有4個(gè)跳轉(zhuǎn)條目,每個(gè)條目有一個(gè)標(biāo)號(hào),條目的序號(hào)從0開始(JU的個(gè)數(shù)),如果累加器1的值大于所羅列的條目數(shù),則跳轉(zhuǎn)到JL指令的標(biāo)號(hào)。
(2)基于邏輯結(jié)果的跳轉(zhuǎn)指令JC、JCN、JCB、JNB
如果RLO=1,JC指令執(zhí)行,指令的使用示例程序如下:
A I1.2
JC JOVR //如果RLO=1(I1.2為1),則跳轉(zhuǎn)到標(biāo)號(hào)“JOVR”
LIW 8 //如果跳轉(zhuǎn)沒有執(zhí)行,程序從這里繼續(xù)掃描
TMW 22
JOVR:A I 2.1 //程序跳轉(zhuǎn)到標(biāo)號(hào)“JOVR”后,程序從這里繼續(xù)執(zhí)行
與JC指令相反,如果RLO=O,JCN指令執(zhí)行,即如果I1.2為0時(shí),觸發(fā)JCN指令執(zhí)行,示例程序如下:
A I1.2
JCN JOVR //如果RLO=0(I1.2為0),則跳轉(zhuǎn)到標(biāo)號(hào)“JOVR”
LIW 8 //如果跳轉(zhuǎn)沒有執(zhí)行,程序從這里繼續(xù)掃描
TMW 22
JOVR:A I 2.1 //程序跳轉(zhuǎn)到標(biāo)號(hào)“JOVR”后,程序從這里繼續(xù)執(zhí)行
注意:當(dāng)指令JC和JCN執(zhí)行時(shí),如果跳轉(zhuǎn)不執(zhí)行,將RLO位置1并從下一個(gè)指令開始執(zhí)行。
如果RLO=1,JCB指令執(zhí)行,并將RLO位的狀態(tài)復(fù)制到BR位,指令的使用示例程序如下:
A I1.2
JCB JOVR //如果RLO=1( 11.2=1),則跳轉(zhuǎn)到標(biāo)號(hào)“JOVR”,將RLO位的狀態(tài)復(fù)制到BR位
LIW 8 //如果跳轉(zhuǎn)沒有執(zhí)行,程序從這里繼續(xù)掃描
TMW 22
JOVR:A I 2.1 //程序跳轉(zhuǎn)標(biāo)號(hào)“JOVR”后,程序從這里繼續(xù)執(zhí)行
如果RLO=O,JNB指令執(zhí)行,并將RLO位的狀態(tài)復(fù)制到BR位,指令的示例程序如下:
A I1.2
JNB JOVR //如果RLO=1( 11.2=1),則跳轉(zhuǎn)到標(biāo)號(hào)“JOVR”,將RLO位的 狀態(tài)復(fù)制到BR位
LIW 8 //如果跳轉(zhuǎn)沒有執(zhí)行,程序從這里繼續(xù)掃描
TMW 22
JOVR:A I 1.2 //程序跳轉(zhuǎn)標(biāo)號(hào)“JOVR”后,程序從這里繼續(xù)執(zhí)行
(3)基于狀態(tài)字中位狀態(tài)(除RLO位)的跳轉(zhuǎn)指令JBI、JNB1、JO、JOS
JBI與JNBI指令根據(jù)BR位的狀態(tài)跳轉(zhuǎn),如果BR位為1,則執(zhí)行JBI指令,如果BR位為0,則執(zhí)行JNBI指令。以JBI指令為例,指令的使用示例程序如下:
CALL SFC14 //調(diào)用系統(tǒng)函數(shù)SFC14
LADDR :=MW2
RET_VAL:=MW4
RECORD:=MW6
JBI Ml //如果調(diào)用出錯(cuò),BR位為0,則函數(shù)執(zhí)行跳轉(zhuǎn)到標(biāo)號(hào)“M”
L 2
TMW 12
BE //程序結(jié)束
Ml: L 3
TMW 12 //程序跳轉(zhuǎn)到標(biāo)號(hào)“M1”后,程序從這里繼續(xù)執(zhí)行
如果運(yùn)算結(jié)果溢出,狀態(tài)字的溢出位OV=1,則JO指令通過判斷OV位進(jìn)行程序跳轉(zhuǎn),指令的使用示例程序如下:
LMW 10
L 30
*I//MW10
JO OVER //如果超上限(0V=1),則程序跳轉(zhuǎn)
T MW 10 //如果跳轉(zhuǎn)沒有執(zhí)行,程序從這里繼續(xù)掃描
A M4.0
R M4.0
JU NEXT
OVER: AN M 4.0 //程序跳轉(zhuǎn)到標(biāo)號(hào)“OVER”后,程序從這里繼續(xù)執(zhí)行
S M4.0
NEXT: NOP 0 //程序跳轉(zhuǎn)到標(biāo)號(hào)“NEXT”后,程序從這里繼續(xù)執(zhí)行
示例程序中,從位信號(hào)M4.0中,可以查詢運(yùn)算結(jié)果是否超上限(0V=1),若M4.0為1,指示運(yùn)算結(jié)果超上限;若M4.0為0,指示運(yùn)算結(jié)果正常。
如果運(yùn)算結(jié)果溢出,狀態(tài)字的溢出位OV=1,則運(yùn)算結(jié)果正常;若溢出位OV=0,但是狀態(tài)字的溢出保持位OS仍然為1,記錄運(yùn)算結(jié)果溢出是否出現(xiàn)。通過程序塊調(diào)用或者調(diào)用JOS復(fù)位OS狀態(tài)位,JOS指令通過判斷OS位進(jìn)行程序跳轉(zhuǎn),指令的使用示例程序如下:
LIW 10
LMW 12
*I
LDBW 25
+I
LMW 14
一I
JOS OVER //如果上面3條運(yùn)算指令中任何一條運(yùn)算結(jié)果超上限(0V=1),則
程序跳轉(zhuǎn)到標(biāo)號(hào)“OVER”
T MW 16 //如果跳轉(zhuǎn)沒有執(zhí)行,程序從這里繼續(xù)掃描
A M4.0
R M4.0
JU NEXT
OVER: AN M 4.0 //程序跳轉(zhuǎn)到標(biāo)號(hào)“OVER”后,程序從這里繼續(xù)執(zhí)行
S M 4.0
NEXT: NOP 0 //程序跳轉(zhuǎn)到標(biāo)號(hào)“NEXT”后,程序從這里繼續(xù)執(zhí)行
與JO跳轉(zhuǎn)指令程序相同,若M4.0為l,指示運(yùn)算結(jié)果超上限;若M4.0為0,指示運(yùn)算結(jié)果正常。
(4)基于運(yùn)算結(jié)果的跳轉(zhuǎn)指令JZ、JN、JP、JM、JPZ、JMZ、JUO
這些跳轉(zhuǎn)指令基于運(yùn)算結(jié)果CCO和CC1的狀態(tài),不同的狀態(tài)觸發(fā)不同的跳轉(zhuǎn)指令,CCO、CC1位的狀態(tài)與條件跳轉(zhuǎn)指令的關(guān)系如表2-28所示。
以JP指令為例,介紹跳轉(zhuǎn)指令的使用示例程序如下:
LIW 8
LMW 12
一I //IW8的值與MW12的值相減
JP POS //如果計(jì)算結(jié)果大于0(ACCU1>0),則跳轉(zhuǎn)到程序標(biāo)號(hào)“POS”
AN M 4.0 //如果跳轉(zhuǎn)沒有執(zhí)行,程序從這里繼續(xù)掃描
S M4.0
JU NEXT
POS: AN M 4.1 //程序跳轉(zhuǎn)到標(biāo)號(hào)“POS”后,程序從這里繼續(xù)執(zhí)行
S M4.1
NEXT: NOP 0 //程序跳轉(zhuǎn)到標(biāo)號(hào)“NEXT”后,程序從這里繼續(xù)執(zhí)行
在程序中,如果變量IW8大于變量MW12中存儲(chǔ)的值,則置位M4.1,否則置位M4.0。
廣東西門子S7-1500PLC模塊代理(優(yōu)勢價(jià)格)