云南西門子S7-200SMART模塊代理經(jīng)銷商
西門子S7-200 PLC的程序結(jié)構(gòu)
PLC在RUN方式下通過主機(jī)循環(huán)掃描并連續(xù)執(zhí)行用戶程序來實(shí)現(xiàn)對(duì)任務(wù)或過程的控制,因此用戶程序決定了一個(gè)控制系統(tǒng)的功能。用戶程序的編制可以使用編程軟件在計(jì)算機(jī)或其他編程設(shè)備(如圖形輸入設(shè)備),也可使用手編器。
S7-200廣義上的程序由3部分構(gòu)成:用戶程序、數(shù)據(jù)塊和參數(shù)塊。
1.用戶程序
用戶程序是必選項(xiàng)。用戶程序在存儲(chǔ)器空間中也稱為組織塊OB1,OB1處于高層次,它可以管理其他塊,它是用各種語言(如STL、LAD或FBD等)編寫的用戶應(yīng)用程序。不同機(jī)型的CPU其程序空間容量也不同(可參見主機(jī)的主要技術(shù)指標(biāo)表)。
用戶程序的結(jié)構(gòu)比較簡(jiǎn)單,一個(gè)完整的用戶控制程序應(yīng)當(dāng)包含一個(gè)主程序、若干子程序和若干中斷處理程序3大部分。不同編程設(shè)備,對(duì)各程序塊的安排方法也不同。
如果編程使用的是手編器,主程序應(yīng)安排到程序的前面。其他部分的位置安排沒有嚴(yán)格的順序,但習(xí)慣上把子程序安排在中斷程序的前面。
如果用編程軟件在計(jì)算機(jī)上編程,程序的組織有兩種方法:
一種是利用編程軟件的程序結(jié)構(gòu)窗口雙擊主程序、子程序和中斷程序的圖標(biāo),即可進(jìn)入各程序塊的編程窗口。編譯時(shí)編程軟件自動(dòng)對(duì)各程序段進(jìn)行連接。
另一種是只用主程序窗口,把主程序和所有子程序及中斷程序放到一起,通常的放法是:把主程序放在前,然后是子程序和中斷程序。這兩種組織方法是*等效的。對(duì)大規(guī)模程序,用*種方法比較方便。
(1)主程序。
主程序?yàn)楸剡x部分,用手編器編程,主程序應(yīng)以一條MEND指令作為主程序結(jié)束指令。但STEP 7_Micro/Win 32軟件不再需要編程人員將這條指令加到主程序的結(jié)尾。而是在程序編譯時(shí)由系統(tǒng)自動(dòng)加入。
(2)子程序。
子程序?yàn)榭蛇x部分,每個(gè)子程序應(yīng)有不重復(fù)的序號(hào)SBR n,以便主程序正確調(diào)用。只有被主程序、中斷服務(wù)程序或者其他子程序調(diào)用時(shí),子程序才會(huì)執(zhí)行。當(dāng)希望重復(fù)執(zhí)行某項(xiàng)功能時(shí),子程序是非常有用的。
調(diào)用子程序有如下優(yōu)點(diǎn):
■ 用子程序可以減小程序的長(zhǎng)度。
■ 由于將代碼從主程序中移出,因而用子程序可以縮短程序掃描周期。S7-200在每個(gè)掃描周期中處理主程序中的代碼,不管代碼是否執(zhí)行。而子程序只有在被調(diào)用時(shí),S7-200才會(huì)處理其代碼。在不調(diào)用子程序時(shí),S7-200不會(huì)處理其代碼。
■ 用子程序創(chuàng)建的程序代碼是可傳遞的??梢栽谝粋€(gè)子程序中完成一個(gè)獨(dú)立的功能,然后將它復(fù)制到另一個(gè)應(yīng)用程序中而無需作重復(fù)工作。
(3)中斷處理程序。
中斷處理程序也是可選項(xiàng),當(dāng)特定的中斷事件發(fā)生時(shí),中斷服務(wù)程序執(zhí)行。可以為一個(gè)預(yù)先定義好的中斷事件設(shè)計(jì)一個(gè)中斷服務(wù)程序,當(dāng)特定的事件發(fā)生時(shí),S7-200會(huì)執(zhí)行中斷服務(wù)程序。每個(gè)中斷處理程序應(yīng)有不重復(fù)的序號(hào)INT n,以便主程序或子程序正確調(diào)用。
中斷服務(wù)程序不會(huì)被主程序調(diào)用。只有當(dāng)中斷服務(wù)程序與一個(gè)中斷事件相關(guān)聯(lián),且在該中斷事件發(fā)生時(shí),S7-200才會(huì)執(zhí)行中斷服務(wù)程序。
2.?dāng)?shù)據(jù)塊
數(shù)據(jù)塊為可選部分,又稱為DB1,在存儲(chǔ)空間中是大V存儲(chǔ)器范圍.它主要是存放控制程序運(yùn)行所需的數(shù)據(jù),在數(shù)據(jù)塊中允許以下數(shù)據(jù)類型:布爾型(表示編程元件的狀態(tài))、十進(jìn)制、二進(jìn)制或十六進(jìn)制數(shù)、字母、數(shù)字和字符型。
3.參數(shù)塊
參數(shù)塊也是可選部分,它存放的是CPU組態(tài)數(shù)據(jù),如果在編程軟件或其他編程工具上未進(jìn)行CPU的組態(tài),則系統(tǒng)以默認(rèn)值進(jìn)行自動(dòng)配置。
功能塊圖(FBD)的圖形結(jié)構(gòu)與數(shù)字電子電路的結(jié)構(gòu)極為相似。
功能塊圖中每個(gè)模塊有輸入和輸出端,輸入和輸出端的函數(shù)關(guān)系也使用與、或、非、異或等邏輯,模塊之間的連接方式與電路的連接方式也基本相同。熟悉電路工作的編程人員習(xí)慣使用這種語言。
LAD、STL和FBD是PLC較常用的3種編程語言,其中LAD和FBD屬于圖形語言,特點(diǎn)是易理解、易使用,但是靈活性較差;STL是更接近程序員的語言,能夠?qū)崿F(xiàn)指針等非常靈活的控制。STEP 7支持這3種語言的混合編程以及相互之間的轉(zhuǎn)換,一般說來LAD和FBD程序都可以通過STEP 7自動(dòng)轉(zhuǎn)換成STL程序,但是并非所有STL語句都可以轉(zhuǎn)換成LAD和FBD程序。
功能塊圖中每個(gè)模塊有輸入和輸出端,輸入和輸出端的函數(shù)關(guān)系也使用與、或、非、異或等邏輯,模塊之間的連接方式與電路的連接方式也基本相同。熟悉電路工作的編程人員習(xí)慣使用這種語言。
LAD、STL和FBD是PLC較常用的3種編程語言,其中LAD和FBD屬于圖形語言,特點(diǎn)是易理解、易使用,但是靈活性較差;STL是更接近程序員的語言,能夠?qū)崿F(xiàn)指針等非常靈活的控制。STEP 7支持這3種語言的混合編程以及相互之間的轉(zhuǎn)換,一般說來LAD和FBD程序都可以通過STEP 7自動(dòng)轉(zhuǎn)換成STL程序,但是并非所有STL語句都可以轉(zhuǎn)換成LAD和FBD程序。
梯形圖( LAD)較接近于繼電接觸控制系統(tǒng)中的電氣控制原理圖,是應(yīng)用多的一種編程語言。
與計(jì)算機(jī)的語言相比,梯形圖可以看作是PLC的高級(jí)語言,幾乎不用去考慮系統(tǒng)內(nèi)部的結(jié)構(gòu)原理和硬件邏輯。因此,它很容易被一般的電氣工程設(shè)計(jì)人員和運(yùn)行維護(hù)人員所接受,是初學(xué)者理想的編程工具,所有廠商的可編程序控制器都支持梯形圖語言。
PLC梯形圖的特點(diǎn)體現(xiàn)在以下幾個(gè)方面:
■ 梯形圖的符號(hào)(輸入觸點(diǎn)、輸入線圈)不是實(shí)際的物理元件,而是與I/O映像區(qū)域內(nèi)存區(qū)中的某一位相對(duì)應(yīng)的。
■ 梯形圖不是硬接線系統(tǒng),但可以借助“概念電流”來理解其邏輯運(yùn)算功能。
■ PLC根據(jù)梯形圖符號(hào)的排列順序按照從左到右、自上而下的方式逐行掃描。前一邏輯行的運(yùn)算結(jié)果,可被后面的程序所引用。
■ 每個(gè)梯形圖符號(hào)的常開屬性和常閉屬性在用戶程序中均可以被無限次引用。
■ 只有在每個(gè)掃描周期的I/O操作階段,PLC根據(jù)輸入觸點(diǎn)信號(hào)刷新輸入映像區(qū)的狀態(tài),輸出映像區(qū)的狀態(tài)通過輸出接口更新輸出信號(hào)。
本圖及后兩種語言的圖中的Network 1,以及后面所有的Network編號(hào)是各段程序的段號(hào),一個(gè)段實(shí)際就是一個(gè)梯級(jí),這在梯形圖語言中可以明顯看出程序的各段結(jié)構(gòu)。段號(hào)只是為了便于程序說明而附加的,實(shí)際編程時(shí)可以不進(jìn)行輸入(但如果需要利用STEP 7-Micro/Win32將STL轉(zhuǎn)換為LAD,則必須輸入)或變更。
一般來說,語句表語言在選用時(shí)主要應(yīng)作如下考慮:
■ 它更適合于熟悉可編程序控制器結(jié)構(gòu)原理及邏輯編程的有經(jīng)驗(yàn)的程序員。
■ 由于助記符是二進(jìn)制機(jī)器代碼的翻譯,兩者存在一一對(duì)應(yīng)的關(guān)系,翻譯后的機(jī)器代碼被CPU直接執(zhí)行,用語句表編寫的控制程序在PLC主機(jī)中生成的源機(jī)器代碼短,因而執(zhí)行速度較快。
■ 用這種語言可以編寫出用梯形圖和功能塊圖無法實(shí)現(xiàn)的程序。
間接尋址方式是指數(shù)據(jù)存放在存儲(chǔ)器或寄存器中,在指令中只出現(xiàn)所需數(shù)據(jù)所在單元的內(nèi)存地址的地址。存儲(chǔ)單元地址的地址又稱為地址指針。這種間接尋址方式與計(jì)算機(jī)的間接尋址方式相同。間接尋址在處理內(nèi)存連續(xù)地址中的數(shù)據(jù)時(shí)非常方便,而且可以縮短程序所生成的代碼的長(zhǎng)度,使編程更加靈活。
可以用指針進(jìn)行間接尋址的存儲(chǔ)區(qū)有:輸入繼電器I、輸出繼電器Q、通用輔助繼電器M、變量存儲(chǔ)器V、順序控制繼電器S、定時(shí)器T、計(jì)數(shù)器C。其中T和C僅僅是當(dāng)前值可以進(jìn)行間接尋址。
用間接尋址方式存取數(shù)據(jù)需要做的工作有3種:建立指針、間接存取和修改指針。使用方法與C語言中的指針應(yīng)用基本相同。
(1)建立指針。對(duì)存儲(chǔ)器的某一地址進(jìn)行間接尋址時(shí),必須首先為該地址建立指針。指針為雙字長(zhǎng),是所要訪問的存儲(chǔ)單元的32位物理地址。可用來作為指針的存儲(chǔ)區(qū)有:變量存儲(chǔ)器(V)、局部變量存儲(chǔ)器(L)和累加器(AC)。
建立指針必須用雙字傳送指令( MOVD),將存儲(chǔ)器所要訪問單元的地址裝入,用來作為指針的存儲(chǔ)器單元或寄存器,裝入的是地址而不是數(shù)據(jù)本身,格式如下:
例: MOVD &VB200,VD302
MOVD &MB10,AC2
MOVD &C2,LD14
“&”為地址符號(hào),與單元編號(hào)組合表示所對(duì)應(yīng)單元的32位物理地址,VB200只是一個(gè)直接地址編號(hào),并不是它的物理地址。
指令中的第二個(gè)地址數(shù)據(jù)長(zhǎng)度必須是雙字長(zhǎng),如VD、LD和AC。
指令中的&VB200如果改為&VW200或&VD200效果*相同。
(2)間接存取。指令中在操作數(shù)的前面加“*”表示該操作數(shù)為一個(gè)指針。
下面兩條指令是建立指針和間接存取的應(yīng)用方法:
MOVD &VB200,ACO
MOVW *AC0,AC
若存儲(chǔ)區(qū)的地址及單元中所存的數(shù)據(jù)如上圖所示,執(zhí)行過程如下:
MOVD &VB200,ACO
AC0

MOVW *AC0,AC1
AC1

*條指令把VB200的地址裝入AC0,建立地址指針;第二條指令中的*AC0表示AC0為MOVW指令確定的一個(gè)字長(zhǎng)的存儲(chǔ)單元的指針,指令的執(zhí)行是把指針?biāo)傅囊粋€(gè)字長(zhǎng)的數(shù)據(jù)送到累加器AC1中。
(3)修改指針。處理連續(xù)存儲(chǔ)數(shù)據(jù)時(shí),可以通過修改指針很容易地存取其他緊挨著的數(shù)據(jù)。簡(jiǎn)單的數(shù)學(xué)運(yùn)算指令,如加法、減法、自增和自減等指令可以用來修改指針。
下面的兩條指令是修改指針的用法:
INCD AC0
INCD AC0
MOVW *AC0,AC1
執(zhí)行情況如下:
INCD AC0
INCD AC0
AC0中的內(nèi)容

MOVW *AC0,AC1
AC1中的內(nèi)容

前兩條指令使AC0中的內(nèi)容,即指針增加兩個(gè)單位形成下一個(gè)數(shù)據(jù)的地址(VW202的起始字節(jié)地址),指向下一個(gè)字9087;第三條指令中的*AC0表示AC0為MOVW指令確定的新字存儲(chǔ)單元的指針,指令的執(zhí)行是把指針?biāo)傅囊粋€(gè)字長(zhǎng)的數(shù)據(jù)(9087)送到累加器AC1中。
根據(jù)所存取的數(shù)據(jù)長(zhǎng)度正確調(diào)整指針:
當(dāng)存取字節(jié)時(shí),指針調(diào)整單位為1。
當(dāng)存取一個(gè)字、定時(shí)器或計(jì)數(shù)器的當(dāng)前值時(shí),指針調(diào)整單位為2。
當(dāng)存取雙字時(shí),指針調(diào)整單位為4。
云南西門子S7-200SMART模塊代理經(jīng)銷商