- 羅克韋爾ControlLogix系統(tǒng)應(yīng)用技術(shù)
- 伍錦榮編著
- 3709字
- 2022-01-13 15:04:33
2.4 控制器文件結(jié)構(gòu)
控制器的文件結(jié)構(gòu)是指控制器的程序文件結(jié)構(gòu)和數(shù)據(jù)文件結(jié)構(gòu)。在使用控制器前,應(yīng)該學(xué)習(xí)和了解控制器的文件結(jié)構(gòu),這對于合理設(shè)計程序文件,規(guī)劃程序、設(shè)備階段和數(shù)據(jù)及數(shù)據(jù)庫結(jié)構(gòu),優(yōu)化控制器內(nèi)存和邏輯執(zhí)行等,都是十分有幫助的。
2.4.1 程序文件
程序文件是用戶編寫的針對控制應(yīng)用的執(zhí)行文件,一個ControlLogix項目的程序文件結(jié)構(gòu)包括3層,即任務(wù)(Task)層、程序(Program)層和例程(Routine)層,結(jié)構(gòu)層次圖如圖2-21所示。其中,一個項目最多可以定義32個任務(wù),每個任務(wù)最多可以定義100個程序、設(shè)備階段或它們的組合。每個程序或設(shè)備階段擁有自己獨立的數(shù)據(jù)庫和例程,例程的個數(shù)由控制器的內(nèi)存決定,只要內(nèi)存足夠大,例程的數(shù)量沒有具體限制。

圖2-21 程序文件結(jié)構(gòu)層次圖
(1)任務(wù)
任務(wù)是一個項目所有與控制有關(guān)的數(shù)據(jù)和邏輯的總和,有連續(xù)型、周期型和事件觸發(fā)型3種執(zhí)行類型。連續(xù)型任務(wù)是指周而復(fù)始執(zhí)行的任務(wù),周期型任務(wù)是指定時(中斷)執(zhí)行的邏輯程序,事件觸發(fā)型任務(wù)是指事件觸發(fā)引起的調(diào)用任務(wù)。
一個項目只能定義一個連續(xù)型任務(wù)。連續(xù)型任務(wù)執(zhí)行期間,可以被周期型任務(wù)和事件觸發(fā)型任務(wù)中斷(周期型任務(wù)和事件觸發(fā)型任務(wù)因此也稱為中斷型任務(wù))。中斷型任務(wù)的中斷級別有15個,序號為1~15,序號越小,中斷級別就越高,任務(wù)的優(yōu)先權(quán)也越高。高優(yōu)先權(quán)任務(wù)可以中斷所有低優(yōu)先權(quán)的任務(wù),一個中斷任務(wù)完成后返回到斷點繼續(xù)執(zhí)行。
(2)程序和設(shè)備階段
①程序是任務(wù)的下一層結(jié)構(gòu),由獨立的數(shù)據(jù)庫和例程組成。在數(shù)據(jù)庫中建立的標(biāo)簽只能被程序內(nèi)的例程引用,屬于內(nèi)部數(shù)據(jù)。每個程序中必須指定一個例程為主例程,作為程序運行的啟動程序,其余的例程由主例程中調(diào)用。程序中還可以指定一個故障處理例程,以解決程序中的例程在運行時引起的故障。
程序是一個完整的結(jié)構(gòu),可以理解為一個傳統(tǒng)的處理器。當(dāng)把傳統(tǒng)的處理器移植到ControlLogix控制器時,它的結(jié)構(gòu)就對應(yīng)一個連續(xù)任務(wù)下的一個程序。當(dāng)一個任務(wù)下有多個程序時,控制器將按程序的組態(tài)順序執(zhí)行。這個順序可以根據(jù)需要在任務(wù)組態(tài)中進行調(diào)整。
②設(shè)備階段是專門針對基于狀態(tài)轉(zhuǎn)換模型的控制場合而開發(fā)的程序設(shè)計方法,也稱為設(shè)備相位。Stuio5000(或RSLogix5000 V15版及以后的版本)支持設(shè)備階段的編程和管理功能。它把設(shè)備運行劃分為各個操作狀態(tài)循環(huán)操作,任何時候只有一個模塊處于激活處理中,每個狀態(tài)按照設(shè)定的時間或給定的條件,決定完成并進入下一個狀態(tài)。設(shè)備階段采用標(biāo)準(zhǔn)化的狀態(tài)編程模型,把編制的程序代碼寫入規(guī)定的狀態(tài)模塊,模塊之間只需通過轉(zhuǎn)換和命令調(diào)用來實現(xiàn)控制。
設(shè)備階段有自己獨立的數(shù)據(jù)庫和例程,要建立各種階段狀態(tài)例程,包括類似于主控例程的預(yù)設(shè)狀態(tài)例程或初始化狀態(tài)例程等。設(shè)備階段與程序處于同等位置,只是針對的應(yīng)用對象不同而已。
(3)例程
例程是控制器執(zhí)行的所有控制代碼的集合,也稱為子程序,是一個項目實現(xiàn)各種控制策略的執(zhí)行邏輯代碼。例程可以用任一種編程語言進行編寫,每個例程只能引用控制器數(shù)據(jù)庫和所在程序的數(shù)據(jù)庫。
2.4.2 數(shù)據(jù)文件
ControlLogix系統(tǒng)的數(shù)據(jù)文件與傳統(tǒng)的PLC處理器不同,它采用數(shù)據(jù)標(biāo)簽[注]來表示程序處理的數(shù)據(jù)或?qū)ο蟆?shù)據(jù)文件是用戶程序中使用的數(shù)據(jù)標(biāo)簽的集合,也稱為數(shù)據(jù)庫。一個好的ControlLogix項目,不僅要建立數(shù)據(jù)文件,還要對數(shù)據(jù)進行合理的規(guī)劃,包括數(shù)據(jù)范圍、數(shù)據(jù)類型和結(jié)構(gòu)等。
(1)數(shù)據(jù)標(biāo)簽
數(shù)據(jù)標(biāo)簽由字母開頭,包括大小寫字母、數(shù)字0~9和下劃線組成,如Switch_1、Pump_5和Start等。在同一個數(shù)據(jù)范圍內(nèi),數(shù)據(jù)標(biāo)簽不分大小寫,大小寫主要用于輔助記憶。由于數(shù)據(jù)標(biāo)簽在數(shù)據(jù)庫中是按字母順序排列的,所以可用前綴、補齊標(biāo)簽字符長度的方法進行命名,如A1_TK001、A2_TK151等。簡潔的數(shù)據(jù)標(biāo)簽可以節(jié)省內(nèi)存。
(2)數(shù)據(jù)范圍
ControlLogix系統(tǒng)建立的數(shù)據(jù)文件可分為全局?jǐn)?shù)據(jù)范圍和程序數(shù)據(jù)范圍。全局?jǐn)?shù)據(jù)范圍又稱為控制器數(shù)據(jù)范圍,對外數(shù)據(jù)和內(nèi)部數(shù)據(jù)全部都可以被控制器中的所有程序或例程引用。程序數(shù)據(jù)范圍屬于各程序的內(nèi)部數(shù)據(jù),只能被所在程序中的例程引用。各程序數(shù)據(jù)范圍是相互隔離的,不同程序范圍中的標(biāo)簽可以重名。
(3)數(shù)據(jù)類型
ControlLogix系統(tǒng)的數(shù)據(jù)類型有基本數(shù)據(jù)類型和結(jié)構(gòu)數(shù)據(jù)類型兩種。基本數(shù)據(jù)類型構(gòu)成結(jié)構(gòu)數(shù)據(jù)類型,結(jié)構(gòu)數(shù)據(jù)類型和關(guān)系數(shù)據(jù)庫的記錄結(jié)構(gòu)方式一致,有利于數(shù)據(jù)采集和管理系統(tǒng)的數(shù)據(jù)交換。
①基本數(shù)據(jù)類型 基本數(shù)據(jù)類型包括布爾型(BOOL)、短整數(shù)型(SINT)、整數(shù)型(INT)、雙整數(shù)型(DINT)和實數(shù)型(REAL),是程序或人機界面引用地址的最小單位,通常稱為操作數(shù)。基本數(shù)據(jù)類型的名稱、符號、格式和數(shù)值范圍如表2-8所示,實數(shù)型數(shù)據(jù)可以表示小數(shù)。
表2-8 基本數(shù)據(jù)類型的名稱、符號、格式和數(shù)值范圍

ControlLogix系統(tǒng)數(shù)據(jù)處理的基本單位是32位共4字節(jié)(B),數(shù)據(jù)標(biāo)簽的類型為BOOL、SINT或INT時,數(shù)據(jù)位分別只有1位、8位和16位,控制器仍按一個完整的32位分配內(nèi)存空間,空余的位被閑置。基本數(shù)據(jù)類型的內(nèi)存空間占用如圖2-22陰影部分所示。很顯然,這樣的內(nèi)存分配其優(yōu)點是簡單,缺點是占用內(nèi)存較多。

圖2-22 基本數(shù)據(jù)類型內(nèi)存空間占用圖
CPU處理不同的數(shù)據(jù)類型時運算速度是不同的,如采用SINT或INT類型運算時,CPU需要把SINT或INT轉(zhuǎn)換成DINT后進行運算,運算完成后還要將結(jié)果分別轉(zhuǎn)換為SINT或INT型數(shù)據(jù),這都需要占用CPU處理時間。混合運算時的轉(zhuǎn)換略有不同,如SINT與DINT運算,結(jié)果為DINT等。數(shù)據(jù)類型都是DINT時,數(shù)據(jù)處理時不需要轉(zhuǎn)換,運算速度較快。具體應(yīng)用編程時要注意,如果運算量不大,CPU運行速度足夠快,這點時間是可以忽略的。但如果程序較大,就需要做進一步優(yōu)化[注]。
②結(jié)構(gòu)數(shù)據(jù)類型 結(jié)構(gòu)數(shù)據(jù)類型包括系統(tǒng)預(yù)定義結(jié)構(gòu)數(shù)據(jù)類型、用戶自定義結(jié)構(gòu)數(shù)據(jù)類型和數(shù)組等3種,每一種類型又包含幾種形式,如表2-9所示。
表2-9 結(jié)構(gòu)數(shù)據(jù)類型表

a.系統(tǒng)預(yù)定義結(jié)構(gòu)數(shù)據(jù)類型 指系統(tǒng)預(yù)先定義的結(jié)構(gòu)數(shù)據(jù),具有固定的形式,在組態(tài)編程定義時自動產(chǎn)生。它包括以下幾種形式。
(a)I/O組態(tài)時產(chǎn)生的數(shù)據(jù)。ControlLogix系統(tǒng)在創(chuàng)建I/O模塊時,數(shù)據(jù)庫中自動生成相應(yīng)的I/O結(jié)構(gòu)數(shù)據(jù)。設(shè)在本地框架1號和2號槽位分別添加DI和DO模塊時,就有:
Local:1:C——本地框架1號槽位DI模塊組態(tài)數(shù)據(jù);
Local:1:I——本地框架1號槽位DI模塊輸入數(shù)據(jù);
Local:2:C——本地框架2號槽位DO模塊組態(tài)數(shù)據(jù);
Local:2:I——本地框架2號槽位DO模塊狀態(tài)數(shù)據(jù);
Local:2:O——本地框架2號槽位DO模塊輸出數(shù)據(jù)。
每一種I/O模塊其結(jié)構(gòu)數(shù)據(jù)是不一樣的,編程時可以直接采用相應(yīng)的數(shù)據(jù),或通過別名的方式讀寫I/O通道。I/O模塊的這種結(jié)構(gòu)數(shù)據(jù),大大簡化了ControlLogix系統(tǒng)的I/O尋址方式。如Local:1:I.Data.1表示本地框架1號槽位DI模塊的輸入通道1,Local:2:O.Data.7表示本地框架2號槽位的DO模塊的輸出通道7等。AI和AO模塊的定義和別名調(diào)用方法類似。
(b)多字元素文件數(shù)據(jù)。ControlLogix系統(tǒng)擴展了PLC-5增強型指令集,并繼續(xù)引用傳統(tǒng)PLC指令集中的多字元素文件,同時把指令中的16位整型數(shù)轉(zhuǎn)換為32位雙整型數(shù)。如定時器(Timer)指令、計數(shù)器(Counter)指令、比例積分微分(PID)指令、信息(MSG)指令和順序功能圖(SFC)操作指令等。
(c)運動控制、功能塊圖、設(shè)備階段以及系統(tǒng)組態(tài)信息和狀態(tài)信息對應(yīng)的數(shù)據(jù)結(jié)構(gòu),分別在運動控制編程、功能塊(過程控制)編程、設(shè)備階段編程以及使用設(shè)置系統(tǒng)參數(shù)指令(SSV)和讀取系統(tǒng)參數(shù)指令(GSV)時引用。
b.用戶自定義結(jié)構(gòu)數(shù)據(jù)類型 指用戶根據(jù)應(yīng)用需要自行定義的結(jié)構(gòu)數(shù)據(jù)。它包括以下幾種形式。
(a)字符串自定義數(shù)據(jù)結(jié)構(gòu)。用戶可以自行定義長度為1KB~64KB的字符串?dāng)?shù)據(jù)結(jié)構(gòu),用于ASCII碼的數(shù)據(jù)(英文字符和數(shù)字符號等)表述。數(shù)據(jù)結(jié)構(gòu)中默認(rèn)一個長度為82B的字符串,與傳統(tǒng)PLC-5/SLC-500系統(tǒng)中定義的字符串長度一致以保證能相互兼容。
(b)用戶自定義數(shù)據(jù)結(jié)構(gòu)。用戶自定義數(shù)據(jù)結(jié)構(gòu)(UDF)是在編程時為了某一控制任務(wù)組織相關(guān)數(shù)據(jù)而建立的數(shù)據(jù)結(jié)構(gòu),以便于數(shù)據(jù)的查找、監(jiān)視和傳輸?shù)取T诮?shù)據(jù)結(jié)構(gòu)的過程中,數(shù)據(jù)元素的定義順序與存儲器空間的占用有關(guān)。BOOL類型占1位,每建立一個BOOL元素,都會存放在剩余的空間上。如果空間不夠,再劃出新的32位字的空間。同理,SINT類型占8位,每建立一個SINT元素,都會存放在剩余的空間上。如果空間不夠,再劃出新的32位字的空間。其他類型以此類推。一個完整的用戶自定義數(shù)據(jù)結(jié)構(gòu)UDF的大小一定是32位的整數(shù)倍。
圖2-23所示是一個為電機控制而建立的UDF,各種數(shù)據(jù)類型占用的存儲空間與定義的順序(而不是按字母順序)和它們的類型有關(guān),把相同類型的數(shù)據(jù)整理到一起,數(shù)據(jù)所占用的空間只需40B(10×4=40B),比原來基本數(shù)據(jù)類型所占空間(14×4=56B)要小得多。

圖2-23 UDF存儲空間
(c)AOI自定義指令結(jié)構(gòu)。AOI自定義指令數(shù)據(jù)結(jié)構(gòu)是建立AOI時需要分配的輸入/輸出參數(shù)和指令內(nèi)部使用的參數(shù)構(gòu)成的數(shù)據(jù)庫,類似于指令的數(shù)據(jù)結(jié)構(gòu)。AOI建立后,就會在項目目錄的【用戶自定義】(Add-On-Defined)文件夾中自動產(chǎn)生與AOI指令同名的自定義數(shù)據(jù)結(jié)構(gòu)。AOI指令調(diào)用時,都要分配一個相應(yīng)結(jié)構(gòu)的數(shù)據(jù)標(biāo)簽,作為指令執(zhí)行時的輸入和輸出參數(shù)。
c.數(shù)組 數(shù)組是同一數(shù)據(jù)類型連續(xù)分布的集合,可由基本數(shù)據(jù)類型和結(jié)構(gòu)數(shù)據(jù)類型構(gòu)成。數(shù)組有1維、2維和3維等三種結(jié)構(gòu)。數(shù)組中元素的個數(shù)沒有限制,大小取決于控制器內(nèi)存。一個數(shù)組元素具有相同的數(shù)據(jù)形式,而且可以用算術(shù)表達式來運算。
如數(shù)組數(shù)據(jù)Array_1[2]表示一個1維數(shù)據(jù),數(shù)組名為Array_1,[2]表示數(shù)組的第3個元素(0、1和2)。Pump_2[1,3]表示一個2維數(shù)組中的第2行、第3列交叉的元素。同理,Motor_A[2,3,0]表示一個3維數(shù)組,數(shù)組名為Motor_A,[2,3,0]表示其中3維中第3、第4和第0行交叉點的元素。如圖2-24所示,圖中黑點的位置就表示數(shù)組元素的位置。

圖2-24 數(shù)組數(shù)據(jù)
- Go Web編程
- 程序員面試白皮書
- TypeScript入門與實戰(zhàn)
- Beginning Java Data Structures and Algorithms
- Unity 2020 Mobile Game Development
- 精通網(wǎng)絡(luò)視頻核心開發(fā)技術(shù)
- Learning Apache Mahout Classification
- jQuery炫酷應(yīng)用實例集錦
- MySQL入門很輕松(微課超值版)
- Go語言底層原理剖析
- 大學(xué)計算機基礎(chǔ)
- Java7程序設(shè)計入門經(jīng)典
- Angular Design Patterns
- OpenCV Android開發(fā)實戰(zhàn)
- Docker:容器與容器云(第2版)