西門子S7-1200PLC模塊福建代理商

西門子S7-300/400用戶程序使用的局部數(shù)據(jù)堆棧(L堆棧)
各邏輯塊都有它的局部變量(L)存儲(chǔ)區(qū),局部變量在邏輯塊的變量聲明表中生成,只在它被創(chuàng)建的塊中有效。每個(gè)組織塊用20B的臨時(shí)局部數(shù)據(jù)來(lái)存儲(chǔ)它的啟動(dòng)信息。局部數(shù)據(jù)可以按位、字節(jié)、字和雙字來(lái)存取,例如L0.0、LB9、LW4和LD52。
CPU分配給當(dāng)前正在處理的塊的臨時(shí)局部數(shù)據(jù)的存儲(chǔ)器容量是有限的,這一存儲(chǔ)區(qū)(即局部堆棧)的大小與CPU的型號(hào)有關(guān)。CPU給每一優(yōu)先級(jí)分配了局部數(shù)據(jù)區(qū),這樣可以保證不同優(yōu)先級(jí)的OB都有它們可以使用的局部數(shù)據(jù)空間。
通過(guò)在STEP 7中設(shè)置參數(shù),可以給S7-400 CPU的每一優(yōu)先級(jí)不同大小的局部數(shù)據(jù)區(qū)。S7-300 CPU每一優(yōu)先級(jí)的局部數(shù)據(jù)區(qū)的大小是固定的。
程序編輯器左邊窗口的“庫(kù)”文件夾中的程序庫(kù)用來(lái)存放可以多次使用的程序部件,其中的子文件夾“Standard Library”(標(biāo)準(zhǔn)庫(kù))是STEP 7標(biāo)準(zhǔn)軟件包提供的標(biāo)準(zhǔn)程序庫(kù),它由以下子文件夾組成:
1) System Function Blocks:保存在CPU的操作系統(tǒng)中的系統(tǒng)功能塊SFB和系統(tǒng)功能SFC。
2) S5 - S7 Converting Blocks:用于將S5程序的塊轉(zhuǎn)換成S7程序所需的標(biāo)準(zhǔn)功能塊。
3) IEC Function Blocks:符合IEC標(biāo)準(zhǔn)的塊,處理時(shí)間和日期信息、比較操作、字符串處理與選擇大值/小值等。
4) Organization Blocks:組織塊。
5) PID Control Blocks:用于PID控制的功能塊。
6) Communication Blocks:用于SIMATIC NET通信的塊。
7) TI - S7 Converting Blocks:一般用途的標(biāo)準(zhǔn)功能。
8) Miscellaneous Blocks(其他塊),例如用于時(shí)間標(biāo)記和實(shí)時(shí)鐘同步的塊。
“庫(kù)”文件夾中還有其他程序庫(kù),例如“SIMATIC_NET_CP”文件夾中的塊用于通信處理器( CP)的編程,文件夾“Redundant IO(V1)”中的塊用于冗余控制系統(tǒng)。文件夾“stdlibs”與“Standard Library”的某些子文件夾的內(nèi)容重復(fù)。用戶安裝可選軟件包后,將增加其他程序庫(kù):例如安裝了順序功能圖語(yǔ)言S7 - Graph后,將會(huì)增加GRAPH7庫(kù)。
組織塊是操作系統(tǒng)與用戶程序的接口,由操作系統(tǒng)調(diào)用,用于控制掃描循環(huán)和中斷程序的執(zhí)行、PLC的啟動(dòng)和錯(cuò)誤處理等,CPU的檔次越高,能使用的同類型組織塊越多。
(1) OB1
OB1是用戶程序中的主程序,CPU的操作系統(tǒng)完成啟動(dòng)過(guò)程后,將循環(huán)執(zhí)行OB1,可以在OB1中調(diào)用其他邏輯塊。
(2)事件中斷處理
如果出現(xiàn)中斷事件,例如時(shí)間中斷、硬件中斷和錯(cuò)誤處理中斷等,當(dāng)前正在執(zhí)行的塊在當(dāng)前指令執(zhí)行完后被停止執(zhí)行(被中斷),操作系統(tǒng)將會(huì)調(diào)用一個(gè)分配給該事件的組織塊。該組織塊執(zhí)行完后,被中斷的塊將從斷點(diǎn)處繼續(xù)執(zhí)行。
這意味著部分用戶程序不必在每次循環(huán)中處理,而是在需要時(shí)才被及時(shí)地處理。處理中斷事件的程序放在該事件驅(qū)動(dòng)的OB中。
(3)中斷的優(yōu)先級(jí)
OB按觸發(fā)事件分成幾個(gè)級(jí)別,這些級(jí)別有不同的優(yōu)先級(jí),高優(yōu)先級(jí)的OB可以中斷低優(yōu)先級(jí)的OB。
PLC的程序分為操作系統(tǒng)和用戶程序,操作系統(tǒng)用來(lái)實(shí)現(xiàn)與特定的控制任務(wù)無(wú)關(guān)的功能,處理PLC的啟動(dòng)、刷新過(guò)程映像輸入/輸出表、調(diào)用用戶程序、處理中斷和錯(cuò)誤、管理存儲(chǔ)區(qū)和處理通信等。用戶程序包含處理用戶特定的自動(dòng)化任務(wù)所需要的所有功能。
STEP 7將用戶編寫的程序和程序所需的數(shù)據(jù)放置在塊中,使單個(gè)的程序部件標(biāo)準(zhǔn)化。通過(guò)塊與塊之間類似于子程序的調(diào)用,使用戶程序結(jié)構(gòu)化,可以簡(jiǎn)化程序組織,使程序易于修改、查錯(cuò)和調(diào)試。塊結(jié)構(gòu)顯著地增加了PLC程序的組織透明性、可理解性和易維護(hù)性。各種塊的簡(jiǎn)要說(shuō)明見表4-1,OB、FB、FC、SFB和SFC都包含程序,統(tǒng)稱為邏輯塊。程序運(yùn)行時(shí)所需的大量數(shù)據(jù)和變量存儲(chǔ)在數(shù)據(jù)塊中。
表4-1 用戶程序中的塊
塊 | 簡(jiǎn)要描述 |
組織塊(OB) | 操作系統(tǒng)與用戶程序的接口,決定用戶程序的結(jié)構(gòu) |
功能塊(FB) | 用戶編寫的包含經(jīng)常使用的功能的子程序,有的存儲(chǔ)區(qū)(即背景數(shù)據(jù)塊) |
功能(FC) | 用戶編寫的包含經(jīng)常使用的功能的子程序,沒(méi)有的存儲(chǔ)區(qū) |
系統(tǒng)功能塊(SFB) | 集成在CPU模塊中,通過(guò)SFB調(diào)用系統(tǒng)功能,有的存儲(chǔ)區(qū)(即背景數(shù)據(jù)塊) |
系統(tǒng)功能(SFC) | 集成在CPU模塊中,通過(guò)SFC調(diào)用系統(tǒng)功能,無(wú)的存儲(chǔ)區(qū) |
共享數(shù)據(jù)塊(DB) | 存儲(chǔ)用戶數(shù)據(jù)的數(shù)據(jù)區(qū)域,供所有的邏輯塊共享 |
背景數(shù)據(jù)塊(DI) | 用于保存FB和SFB的輸入、輸出參數(shù)和靜態(tài)變量,其數(shù)據(jù)在編譯時(shí)自動(dòng)生成 |
可以將控制任務(wù)分層劃分為工廠級(jí)、車間級(jí)、生產(chǎn)線、設(shè)備等多級(jí)任務(wù),分別建立與各級(jí)任務(wù)對(duì)應(yīng)的邏輯塊。每一層的控制程序(邏輯塊)作為上一級(jí)控制程序的子程序,前者又可以調(diào)用下一級(jí)的子程序。這種調(diào)用稱為嵌套調(diào)用,即被調(diào)用的塊又可以調(diào)用別的塊。
可以多次重復(fù)調(diào)用同一個(gè)塊,來(lái)處理同一類任務(wù)。FB和FC的內(nèi)部應(yīng)全部使用局部變量,不使用I、Q、M、T、C和共享數(shù)據(jù)塊中的全局地址。這樣的塊具有很好的可移植性,不作任何修改,就可以用于其他項(xiàng)目。
FB和FC通過(guò)其輸入、輸出參數(shù)來(lái)實(shí)現(xiàn)與“外部”的數(shù)據(jù)交換,即與過(guò)程控制的傳感器和執(zhí)行器、用戶程序中的其他塊交換數(shù)據(jù)。在塊調(diào)用中,調(diào)用者可以是各種邏輯塊,被調(diào)用的塊是OB之外的邏輯塊二調(diào)用功能塊和系統(tǒng)功能塊時(shí)需要為它們一個(gè)背景數(shù)據(jù)塊,后者隨這些塊的調(diào)用而打開,在調(diào)用結(jié)束時(shí)自動(dòng)關(guān)閉。
在圖4-1中,OB1調(diào)用FB1,FB1調(diào)用FC1,應(yīng)按下面的順序創(chuàng)建塊:FC1→FB1及其背景數(shù)據(jù)塊→OB1,即編程時(shí)被調(diào)用的塊應(yīng)該是已經(jīng)存在的。
如果出現(xiàn)中斷事件,CPU將停止當(dāng)前正在執(zhí)行的程序,去執(zhí)行中斷事件對(duì)應(yīng)的組織塊OB(即中斷程序)。中斷程序執(zhí)行完后,返回到程序中斷處繼續(xù)執(zhí)行。
下面是梯形圖編程時(shí)應(yīng)遵守的一些規(guī)則:
1)每個(gè)梯形圖的程序段都必須以輸出線圈或指令框( Box)結(jié)束,比較指令框(相當(dāng)于觸點(diǎn))、中線輸出線圈和上升沿、下降沿線圈不能用于程序段結(jié)束。
2)指令框的使能輸出端“ENO”可以和右邊的指令框的使能輸入端“EN”連接。
3)下列線圈要求布爾邏輯,即必須用觸點(diǎn)電路控制它們,它們不能與左側(cè)垂直“電源線”直接相連:輸出線圈、置位(S)線圈和復(fù)位(R)線圈;中線輸出線圈和上升沿、下降沿線圈;計(jì)數(shù)器和定時(shí)器線圈;邏輯非跳轉(zhuǎn)( JMPN);主控繼電器接通(MCR<);將RLO存入BR存儲(chǔ)器的SAVE線圈和返回線圈(RET)。
下面的線圈不允許布爾邏輯,即這些線圈必須與左側(cè)垂直“電源線”直接相連:主控繼電器激活( MCRA);主控繼電器關(guān)閉(MCRD)和打開數(shù)據(jù)塊(OPN)。
其他線圈既可以用布爾邏輯操作也可以不用。
4)下列線圈不能用于并聯(lián)輸出:邏輯非跳轉(zhuǎn)( JMPN)、跳轉(zhuǎn)(JMP)、調(diào)用(CALL)和返回( RET)。
5)如果分支中只有一個(gè)元件,刪除這個(gè)元件時(shí),整個(gè)分支也同時(shí)被刪掉:刪除一個(gè)指令框時(shí),該指令框除主分支外所有的布爾輸入分支都將同時(shí)被刪除。
6)不允許生成引起短路的分支。
BLD<number>(程序顯示指令)、NOP 0和NOP 1并不執(zhí)行什么功能,也不會(huì)影響狀態(tài)位。BLD指令只是用于編程設(shè)備的圖形顯示,用STEP 7將梯形圖或功能塊圖轉(zhuǎn)換為語(yǔ)句表時(shí),可能會(huì)出現(xiàn)BLD指令。指令中的常數(shù)<number>是編程設(shè)備自動(dòng)生成的。
字節(jié)加指令INC和字節(jié)減指令DEC將累加器1的低字節(jié)的內(nèi)容加上或減去指令中的8位常數(shù)(0~255),運(yùn)算結(jié)果仍在累加器的低字節(jié)。累加器1的其他3個(gè)字節(jié)不變。
這些指令并不適合于16位或32位算術(shù)運(yùn)算,因?yàn)槔奂悠?/span>1的低字節(jié)和它的相鄰字節(jié)之間沒(méi)有進(jìn)位產(chǎn)生。16位或32位算術(shù)運(yùn)算可以使用整數(shù)運(yùn)算指令。下面是將MB4加1的例程。
L MB 4 //MB4的內(nèi)容裝入累加器1的低字節(jié)
INC 1 //累加器1低字節(jié)的內(nèi)容加1,結(jié)果存放在累加器1的低字節(jié)
T MB 4 //運(yùn)算結(jié)果傳回MB4
S7 - 300的CPU的兩個(gè)累加器或S7 - 400的CPU的4個(gè)累加器組成一個(gè)堆棧,堆棧用來(lái)存放需要快速存取的數(shù)據(jù),堆棧中的數(shù)據(jù)按“先入后出”的原則存取。堆棧指令是否執(zhí)行與狀態(tài)字無(wú)關(guān),也不會(huì)影響狀態(tài)字。
PUSH(入棧)指令使堆棧中各層原有的數(shù)據(jù)依次向下移動(dòng)一層,棧底(累加器4)的值被推出丟失(見圖3-112),棧頂(累加器1)的值保持不變。POP(出棧)指令使堆棧中各層原有的數(shù)據(jù)向上移動(dòng)一層(見圖3-113),原來(lái)第2層(累加器2)中的數(shù)據(jù)成為堆棧新的棧頂值,原來(lái)在棧頂(累加器1)中的數(shù)據(jù)從棧內(nèi)消失。
圖3-112 入棧指令執(zhí)行前后
圖3-113 出棧指令執(zhí)行前后
進(jìn)入累加器堆棧指令ENT將累加器3的內(nèi)容復(fù)制到累加器4,累加器2的內(nèi)容復(fù)制到累加器3。使用ENT指令可以用累加器3、4來(lái)保存中間結(jié)果。
離開累加器堆棧指令LEAVE將累加器3的內(nèi)容復(fù)制到累加器2,累加器4的內(nèi)容復(fù)制到累加器3,累加器1和累加器4的內(nèi)容保持不變。
堆棧指令主要用來(lái)保存中間運(yùn)算結(jié)果,因?yàn)榭梢詫⒅虚g結(jié)果保存在累加器之外的存儲(chǔ)區(qū),實(shí)際上很少使用堆棧指令。
西門子S7-1200PLC模塊福建代理商