西門子S7-1200PLC模塊湖南代理商

西門子S7-300/400的循環(huán)指令概述及實(shí)例
如果需要重復(fù)執(zhí)行若干次同樣的任務(wù),可以使用循環(huán)指令。循環(huán)指令LOOP <jump label>用累加器的低字作循環(huán)計(jì)數(shù)器,每次執(zhí)行LOOP指令時(shí)累加器低字的值減1,若減1后累加器的低字非0,將跳轉(zhuǎn)到LOOP指令的標(biāo)號處,在跳步目標(biāo)處又恢復(fù)線性程序掃描。跳步目標(biāo)號應(yīng)是的,跳步只能在同一個(gè)邏輯塊內(nèi)進(jìn)行。
【實(shí)例】 用循環(huán)指令和間接尋址求從MW60開始存放的5個(gè)字的累加和。累加的結(jié)果用MD50保存,用臨時(shí)局部變量LD24作地址指針,LW32作循環(huán)次數(shù)計(jì)數(shù)器。
L L#0 //32位雙整數(shù)0裝入累加器1
1 MD 50 //將保存累加和的雙字清零
L P#60.0
T LD 24 //起始地址送地址指針
L 5 //將循環(huán)次數(shù)(需要累加的字的個(gè)數(shù))裝入累加器1的低字
BACK:T LW 32 //暫存循環(huán)計(jì)數(shù)值
L MW[LD 24] //取數(shù)據(jù),*次循環(huán)取的是MW60
ITD //轉(zhuǎn)換為雙整數(shù)
L MD 50 //取累加和
+D //累加
T MD 50 //保存累加和
L LD 24 //取地址指針值
L L#16
+D //地址值增加兩個(gè)字節(jié)(16位),指針指到下一個(gè)字
T LD 24 //保存地址指針值
L LW 32 //循環(huán)計(jì)數(shù)器值裝入累加器
LOOP BACK //若循環(huán)計(jì)數(shù)器值的內(nèi)容減1后非0,跳轉(zhuǎn)到標(biāo)號BACK
NOP 0
每次累加完成后,為了使地址指針指向下一個(gè)字,地址指針的值應(yīng)加16或加P#2.0(1個(gè)字由16位組成)。上面程序中的指令“L L#16”可改為“L P#2.0”,表示地址指針將增加兩個(gè)字節(jié)。如果是對字節(jié)進(jìn)行操作,每次循環(huán)地址指針應(yīng)加8或加P#1.0。如果是對雙字進(jìn)行操作,每次循環(huán)地址指針應(yīng)加32或加P#4.0。
圖3-91是用于驗(yàn)證程序的變量表,MD50中是MW60開始的5個(gè)字的值的累加和:
圖3-91 變量表
在存儲(chǔ)器間接尋址指令中,用方括號給出了一個(gè)作為地址指針的存儲(chǔ)器,該存儲(chǔ)器的內(nèi)容是操作數(shù)所在存儲(chǔ)單元的地址。地址指針就像收音機(jī)調(diào)臺(tái)的指針,改變指針的位置,指針指向不同電臺(tái)。改變地址指針中的地址值,地址指針“指向”不同的地址。間接尋址的優(yōu)點(diǎn)是可以在程序處理期間,通過改變指針的值動(dòng)態(tài)地修改指令中的地址。
存儲(chǔ)器間接尋址可用于循環(huán)程序和查表程序。在累加一片連續(xù)的存儲(chǔ)區(qū)中的數(shù)據(jù)的循環(huán)程序中,每次循環(huán)累加一個(gè)數(shù)據(jù)。累加后修改地址指針的值,使它指向下一個(gè)存儲(chǔ)單元,為下一次循環(huán)的累加運(yùn)算做好準(zhǔn)備。
間接尋址可能會(huì)造成重復(fù)使用用于其他用途的存儲(chǔ)器,從而導(dǎo)致PLC的意外動(dòng)作。
(1) 16位指針的間接尋址
定時(shí)器(T)、計(jì)數(shù)器(C)、數(shù)據(jù)塊(DB)、功能塊(FB)和功能(FC)的編號范圍小于65 535,因此使用16位的字指針。下面是定時(shí)器的存儲(chǔ)器間接尋址的例子,用16位的MW8作地址指針。MW8的值為3,T[MW8]相當(dāng)于T3。在PLCSIM中監(jiān)控T3,令I0.2為1狀態(tài),可以看到T3的當(dāng)前值的變化。改變MW8的值,可以操作其他的定時(shí)器。
L 3
T MW 8
A 1 0.2
L S5T#5S
SD T[MW 8] //接通延時(shí)定時(shí)器T3的線圈
(2) 32位指針的存儲(chǔ)器間接尋址
其他地址則要使用雙字指針,雙字指針的格式如圖3-88所示,第0~2位為被尋址地址中位的編號(0~7),第3~18位為被尋址的字節(jié)的編號(0~65 535)。
如果要用雙字格式的指針訪問一個(gè)字、字節(jié)或雙字存儲(chǔ)器,必須保證指針的位編號為0,例如P#Q20.0。只有雙字MD、LD、DBD和DID能作地址指針。用共享數(shù)據(jù)塊中的字或雙字作指針時(shí),首先應(yīng)打開該數(shù)據(jù)塊。下面是存儲(chǔ)器間接尋址的例子:
OPN DB 1 //打開DB 1
L P#4.0 //因?yàn)橐L問字節(jié),指針的位編號為0,字節(jié)編號為4
T DBD 10
L QB[DBD 10] //將QB4裝入累加器1,QB的地址在雙字指針DBD10中
T MB 6
L P#4.3
T LD 20
A M[LD 20] //M4.3的值送RLO,M4.3的地址在指針LD20中
= Q 5.0
運(yùn)行時(shí)啟動(dòng)程序狀態(tài)監(jiān)控,用鼠標(biāo)右鍵點(diǎn)擊圖3-89中的STANDARD(累加器1),執(zhí)行出現(xiàn)的快捷菜單中的命令“顯示”→“間接”,出現(xiàn)“INDIRECT”(間接)列,可以看到地址指針DBD10和LD20中的地址值。
圖3-89 間接尋址的程序狀態(tài)
【實(shí)例】某表格用MW10開始的20個(gè)字存放數(shù)據(jù),表格的偏移量(表格中字的序號)在地址指針MD40中。第1個(gè)字MW10的序號為0,第2個(gè)字MW12的序號為1……在I0.0的上升沿,用間接尋址將表格中相對于偏移量的字的數(shù)值傳送到MW110中去。
下面是滿足要求的語句表程序(見隨書光盤中的例程“存儲(chǔ)器間接尋址”),LD28是存儲(chǔ)器間接尋址的地址指針,它的值實(shí)際上是以位為單位的整數(shù)。相鄰的兩個(gè)字相差16位,因此偏移量乘以16或乘以指針常數(shù)P#2.0,加上表格的起始地址,便得到要讀取的字的地址。
A I 0.0
FP M 0.0
JNB m001 //不是I0.0的上升沿則跳轉(zhuǎn)
L MD 40
L L#16 //L#16可改為P#2.0
*D //偏移量乘以16或乘以P#2.0
L P#10.0
+D //加上表格的起始地址,得到要讀取的數(shù)據(jù)字的地址
T LD 28 //數(shù)據(jù)的地址送地址指針LD28
L MW[LD 28] //表格中的數(shù)據(jù)送累加器1
T MW 110 //保存數(shù)據(jù)
m001:NOP 0
使用32位地址指針對數(shù)據(jù)塊內(nèi)的地址尋址時(shí),首先必須用OPN指令打開要尋址的數(shù)據(jù)塊,然后才能尋址,例如DBW[MD10]。如果使用完整的數(shù)據(jù)格式(例如DB2. DBW[MD10])進(jìn)行間接尋址,則會(huì)被視為出錯(cuò),輸入的指令變?yōu)榧t色。
在用仿真軟件調(diào)試程序時(shí),用變量表設(shè)置MW10開始的數(shù)據(jù)區(qū)各個(gè)字的數(shù)值(見圖3-90),設(shè)置MD40的值為2,表示要讀取數(shù)據(jù)區(qū)中的第2個(gè)字MW14。在I0.0的上升沿之后,可以看到MW110中讀取的數(shù)據(jù)與MW14的相同。改變指針的值,可以讀取別的字的值。
圖3-90 變量表
西門子S7-1200PLC模塊湖南代理商