西門(mén)子S7-1500PLC模塊江西代理商
在變量聲明表中,要明確局部變量的數(shù)據(jù)類型,這樣操作系統(tǒng)才能給變量分配確定的存儲(chǔ)空間。局部變量可以是基本數(shù)據(jù)類型或復(fù)合數(shù)據(jù)類型,也可以是專門(mén)用于參數(shù)傳遞的所謂的參數(shù)類型。參數(shù)類型包括定時(shí)器、計(jì)數(shù)器、塊的地址或指針等。
STEP 7對(duì)分配給邏輯塊局部變量(在變量聲明表中)的數(shù)據(jù)類型(基本、復(fù)合、參數(shù))是有一定限制的,見(jiàn)表5-5。
STEP 7允許用物理地址(地址)、符號(hào)地址或常數(shù)等形式作為實(shí)參給形參賦值,但對(duì)于不同的形參類型,STEP 7限制了賦值形式。
(1)定時(shí)器或計(jì)數(shù)器參數(shù)的類型
在邏輯塊中定義一個(gè)定時(shí)器或計(jì)數(shù)器類型的形參后,邏輯塊就能使用定時(shí)器或計(jì)數(shù)器編程,而不需明確定時(shí)器或計(jì)數(shù)器的編號(hào),等到調(diào)用該邏輯塊時(shí),再為形參分配實(shí)參,如T2或C10等,從而確定具體定時(shí)器或計(jì)數(shù)器的編號(hào)。
(2)塊參數(shù)類型
當(dāng)定義一個(gè)作為輸入/輸出的塊時(shí),可通過(guò)在數(shù)聲明內(nèi)的參數(shù)類型確定塊的類型( FB、FC、DB等)。在為塊參數(shù)類型的形參分配實(shí)參時(shí),可以使用物理地址(如FC10),也可使用符號(hào)地址(如Start)。
(3)指針參數(shù)類型
指針?biāo)o出的是變量的地址,而不是變量的數(shù)值大小。在有些邏輯塊中,可能使用指針編程更為方便。用定義指針類型的形參,就能在邏輯塊中先使用一個(gè)虛設(shè)的指針,待調(diào)用邏輯塊時(shí)再為其賦予確定的地址。當(dāng)為指針參數(shù)類型的形參分配實(shí)參時(shí),需要指明內(nèi)存地址,如P#M20.0。
(4) ANY參數(shù)類型
當(dāng)實(shí)參的數(shù)據(jù)類型不能確定或在邏輯塊中需要使用變化的數(shù)據(jù)類型時(shí),可以把形參定義為ANY參數(shù)類型。這樣就可以將任何數(shù)據(jù)類型的實(shí)參賦給ANY類形參,而不必像其他類型那樣保證實(shí)參、形參類型*。STEP 7自動(dòng)為ANY類型分配80 Bit的內(nèi)存,用于存儲(chǔ)實(shí)參的起始地址、數(shù)據(jù)類型和長(zhǎng)度編碼。
每個(gè)邏輯塊前部都有一個(gè)變量聲明表,稱為局部變量聲明表。局部變量聲明表對(duì)當(dāng)前邏輯塊控制程序所使用的局部數(shù)據(jù)進(jìn)行聲明。
局部數(shù)據(jù)分為參數(shù)和局部變量?jī)纱箢悺>植孔兞坑职o態(tài)變量和臨時(shí)變量(暫態(tài)變量)兩種。參數(shù)可在調(diào)用塊和被調(diào)用塊間傳遞數(shù)據(jù),是邏輯塊的接口。靜態(tài)變量和臨時(shí)變量是僅供邏輯塊本身使用的數(shù)據(jù),不能用作不同程序塊之間的數(shù)據(jù)接口。表5-3給出了局部數(shù)據(jù)聲明類型,表中內(nèi)容的排列順序也是在變量聲明表中聲明變量的順序和變量在內(nèi)存中的存儲(chǔ)順序。在邏輯塊中不需使用的局部數(shù)據(jù)類型,可以不必在變量聲明表中聲明。
對(duì)于功能塊( FB),操作系統(tǒng)為參數(shù)及靜態(tài)變量分配的存儲(chǔ)空間是背景數(shù)據(jù)塊。這樣參數(shù)變量在背景數(shù)據(jù)塊中留有運(yùn)行結(jié)果備份。在調(diào)用FB時(shí),若沒(méi)有提供實(shí)參,則功能塊使用背景數(shù)據(jù)塊中的數(shù)值。操作系統(tǒng)在L堆棧中給FB的臨時(shí)變量分配存儲(chǔ)空間。
對(duì)于功能( FC),操作系統(tǒng)在L堆棧中給FC的臨時(shí)變量分配存儲(chǔ)空間。由于沒(méi)有背景數(shù)據(jù)塊,因而FC不能使用靜態(tài)變量。I/O參數(shù)以指向?qū)崊⒌闹羔樞问酱鎯?chǔ)在操作系統(tǒng)為參數(shù)傳遞而保留的額外空間中。
對(duì)于組織塊(OB)來(lái)說(shuō),其調(diào)用的邏輯是由操作系統(tǒng)管理的,用戶不能參與。因此,OB只有定義在L堆棧中的臨時(shí)變量。
(1)形參
為保證功能( FC)和功能塊(FB)對(duì)同一類設(shè)備控制的通用性,用戶在編程時(shí)就不能使用具體設(shè)備對(duì)應(yīng)的存儲(chǔ)區(qū)地址參數(shù)(如不能使用11.0等),而要使用這類設(shè)備的抽象地址參數(shù)。這些抽象參數(shù)稱為形式參數(shù),簡(jiǎn)稱形參。在調(diào)用功能( FC)或功能塊(FB)時(shí),則將與形參對(duì)應(yīng)的具體設(shè)備的實(shí)際參數(shù)(簡(jiǎn)稱實(shí)參)傳遞給邏輯塊,并代替形參,從而可通過(guò)調(diào)用FB或FC實(shí)現(xiàn)對(duì)具體設(shè)備的控制。
形參需在功能(FC)和功能塊(FB)的變量聲明表中定義,實(shí)參在調(diào)用功能(FC)和功能塊( FB)時(shí)給出。在邏輯塊的不同調(diào)用處,可為形參提供不同的實(shí)參,但實(shí)參的數(shù)據(jù)類型必須與形參*。用戶程序可定義功能( FC)和功能塊(FB)的輸入值參數(shù)或輸出值參數(shù),也可定義一參數(shù)作為輸入/輸出值。參數(shù)傳遞可將調(diào)用塊的信息傳遞給被調(diào)用塊,也能把被調(diào)用塊的運(yùn)行結(jié)果返回給調(diào)用塊。
(2)靜態(tài)變量
靜態(tài)變量( Stat)在PLC運(yùn)行期間始終被存儲(chǔ)。S7將靜態(tài)變量定義在背景數(shù)據(jù)塊中,當(dāng)被調(diào)用塊運(yùn)行時(shí),能讀出或修改靜態(tài)變量;被調(diào)用塊運(yùn)行結(jié)束后,靜態(tài)變量保留在數(shù)據(jù)塊中。由于只有功能塊( FB)才有與其有關(guān)聯(lián)的背景數(shù)據(jù)塊,因此只能為FB定義靜態(tài)變量。功能(FC)不能有靜態(tài)變量。
(3)臨時(shí)變量
臨時(shí)變量( Temp)是一種在塊執(zhí)行時(shí),用來(lái)暫時(shí)存儲(chǔ)數(shù)據(jù)的變量,這些臨時(shí)數(shù)據(jù)存儲(chǔ)在局部數(shù)據(jù)堆棧(L stack)中。臨時(shí)變量可以在組織塊(OB)、功能(FC)和功能塊(FB)中使用,當(dāng)塊執(zhí)行的時(shí)候它們被用來(lái)臨時(shí)存儲(chǔ)數(shù)據(jù),一旦塊執(zhí)行結(jié)束,堆棧重新分配,這些數(shù)據(jù)將丟失。
功能( FC)、功能塊(FB)和組織塊(OB)統(tǒng)稱為邏輯塊(或程序塊),實(shí)質(zhì)上都是用戶編寫(xiě)的子程序,功能塊( FB)有一個(gè)數(shù)據(jù)結(jié)構(gòu)與該功能塊的參數(shù)*相同的數(shù)據(jù)塊,稱為背景數(shù)據(jù)塊,背景數(shù)據(jù)塊依附于功能塊,它隨著功能塊的調(diào)用而打開(kāi),隨著功能塊的結(jié)束而關(guān)閉。存放在背景數(shù)據(jù)塊中的數(shù)據(jù)在功能塊結(jié)束時(shí)繼續(xù)保持。而功能( FC)則不需要背景數(shù)據(jù)塊,功能調(diào)用結(jié)束后數(shù)據(jù)不能保持。組織塊(OB)是由操作系統(tǒng)直接調(diào)用的邏輯塊。 邏輯塊(OB、FB、FC)由局部變量聲明表區(qū)、程序編輯區(qū)及其屬性區(qū)等幾部分組成。
在用戶程序中可能存在多個(gè)數(shù)據(jù)塊,而每個(gè)數(shù)據(jù)塊的數(shù)據(jù)結(jié)構(gòu)并不*相同,因此在訪問(wèn)數(shù)據(jù)塊時(shí),必須指明數(shù)據(jù)塊的編號(hào)、數(shù)據(jù)類型與位置。如果訪問(wèn)不存在數(shù)據(jù)單元或數(shù)據(jù)塊,而且沒(méi)有編寫(xiě)錯(cuò)誤處理OB塊,CPU將進(jìn)入STOP模式。
1.尋址數(shù)據(jù)塊
與位存儲(chǔ)器相似,數(shù)據(jù)塊中的數(shù)據(jù)單元按字節(jié)進(jìn)行尋址,S7-300的大塊長(zhǎng)度是8 KB??梢匝b載數(shù)據(jù)字節(jié)、數(shù)據(jù)字或數(shù)據(jù)雙字。當(dāng)使用數(shù)據(jù)字時(shí),需要*個(gè)字節(jié)地址(如L DBW 2),按該地址裝入兩個(gè)字節(jié)。使用雙字時(shí),按該地址裝入4個(gè)字節(jié)。
2.訪問(wèn)數(shù)據(jù)塊
訪問(wèn)數(shù)據(jù)塊時(shí)需要明確數(shù)據(jù)塊的編號(hào)和數(shù)據(jù)塊中的數(shù)據(jù)類型及位置,在STEP 7中可以采用傳統(tǒng)訪問(wèn)方式,即先打開(kāi)后訪問(wèn),也可以采用*表示的直接訪問(wèn)方式。
(1)先打開(kāi)后訪問(wèn)
可用指令“OPN DB…”打開(kāi)共享數(shù)據(jù)塊(自動(dòng)關(guān)閉之前打開(kāi)的共享數(shù)據(jù)塊),或用指令“OPN DI…”打開(kāi)背景數(shù)據(jù)塊(自動(dòng)關(guān)閉之前打開(kāi)的背景數(shù)據(jù)塊)。如果在創(chuàng)建數(shù)據(jù)塊時(shí),給數(shù)據(jù)塊定義了符號(hào)名,如Motor_DB,也可以使用指令OPN“Motor_DB”打開(kāi)數(shù)據(jù)塊。
如果DB已經(jīng)打開(kāi),則可用裝入(L)或傳送(T)指令訪問(wèn)數(shù)據(jù)塊。
【例5-1】 打開(kāi)并訪問(wèn)共享數(shù)據(jù)塊
OPN“Motor_DB1” 說(shuō)明:打開(kāi)數(shù)據(jù)塊DB1,作為共享數(shù)據(jù)塊
L DBW2 將DB1的數(shù)據(jù)字DBW2裝入累加器1的低字中
T MW0 將累加器低字中的內(nèi)容傳送到存儲(chǔ)字MW0
T DBW4 將累加器1低字中的內(nèi)容傳送到DB1的數(shù)據(jù)字DBW4
OPN DB2 打開(kāi)數(shù)據(jù)塊DB2,作為共享數(shù)據(jù)塊,同時(shí)關(guān)閉數(shù)據(jù)塊DB1
L DB10 裝入共享數(shù)據(jù)塊DB2的長(zhǎng)度
L MD10 將MD10裝入累加器
<D 比較數(shù)據(jù)塊DB2的長(zhǎng)度是否足夠長(zhǎng)
JC ERRO 如果長(zhǎng)度小于存儲(chǔ)雙字MD10中的數(shù)值,則跳轉(zhuǎn)到ERRO
【例5-2】 打開(kāi)并訪問(wèn)背景數(shù)據(jù)塊
OPN DB1 說(shuō)明:打開(kāi)數(shù)據(jù)塊DB1,作為共享數(shù)據(jù)塊
L DBW2 將DB1的數(shù)據(jù)字DBW2裝入累加器1的低字中
T W0 將累加器低字中的內(nèi)容傳送到存儲(chǔ)字MW0
T DBW4 將累加器1低字中的內(nèi)容傳送到DB1的數(shù)據(jù)字DBW4
OPN DB2 打開(kāi)數(shù)據(jù)塊DB2,作為背景數(shù)據(jù)塊
L DBB2 將DB2的數(shù)據(jù)字節(jié)DBB2裝入累加器1低字的低字節(jié)中
T DBB10 將累加器1低字低字節(jié)的內(nèi)容傳送到DB2的數(shù)據(jù)字節(jié)DBB10
(2)直接訪問(wèn)數(shù)據(jù)塊
直接訪問(wèn)數(shù)據(jù)塊,就是在指令中間同時(shí)給出數(shù)據(jù)塊的編號(hào)和數(shù)據(jù)塊中的地址??梢杂玫刂?,也可以用符號(hào)地址直接訪問(wèn)數(shù)據(jù)塊。使用地址訪問(wèn)數(shù)據(jù)塊,必須手動(dòng)定位程序中的數(shù)據(jù)塊單元,采用符號(hào)就可以很容易地用源程序調(diào)整。數(shù)據(jù)塊中的存儲(chǔ)單元的地址由兩部分組成,如DB1. DBW2則表示數(shù)據(jù)塊DB1的第二個(gè)數(shù)據(jù)字表示。
用地址直接訪問(wèn)數(shù)據(jù)塊如下:
L DB1.DBW2 說(shuō)明:打開(kāi)數(shù)據(jù)塊DB1,并裝入地址為2的字?jǐn)?shù)據(jù)單元
T DB1.DBW4 將數(shù)據(jù)傳送到數(shù)據(jù)塊DB1的數(shù)據(jù)字單元DBW4
要用符號(hào)地址直接訪問(wèn)數(shù)據(jù)塊,必須在符號(hào)表中為DB分配一個(gè)符號(hào)名,同時(shí)為數(shù)據(jù)塊中的數(shù)據(jù)單元用LAD/STL/FBD S7程序編輯器分配符號(hào)名,如下所示:
L“Motor_DB”.V1 說(shuō)明:打開(kāi)符號(hào)名為“Motor_DB的數(shù)據(jù)塊,并裝入名為“V1”的數(shù)據(jù)單元。
西門(mén)子S7-1500PLC模塊江西代理商