在文章ControlLogix系統(tǒng)組態(tài)編程工具介紹(一)中對Studio5000組態(tài)編程軟件、RSLinx連接軟件和RSNetWorx 網(wǎng)絡(luò)組態(tài)軟件進(jìn)行介紹,本文繼續(xù)分享ControlLogix系統(tǒng)控制器文件結(jié)構(gòu)相關(guān)內(nèi)容。
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í)行等都是十分有幫助的。
1)程序文件
程序文件是用戶編寫的針對控制應(yīng)用的執(zhí)行文件,一個ControlLogix項目的程序文件結(jié)構(gòu)包括3層,即任務(wù)(Task)層、程序(Program) 層和例程(Routine)層,結(jié)構(gòu)層次架構(gòu)如圖所示。其中,一個項目最多可以定義32個任務(wù),每個任務(wù)最多可以定義100個程序、設(shè)備階段或它們的組合。每個程序或設(shè)備階段擁有自己獨立的數(shù)據(jù)庫和例程,例程的個數(shù)由控制器的內(nèi)存決定,只要內(nèi)存足夠大,例程的數(shù)量沒有具體限制。
①任務(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í)行。
②程序和設(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)的處理器移植到ContolLogix控制器時,它的結(jié)構(gòu)就對應(yīng)一個連續(xù)任務(wù)下的一個程序。當(dāng)一個任務(wù)下有多個程序時,控制器將按程序的組態(tài)順序執(zhí)行。這個順序可以根據(jù)需要在任務(wù)組態(tài)中進(jìn)行調(diào)整。
◆設(shè)備階段是專門針對基于狀態(tài)轉(zhuǎn)換模型的控制場合而開發(fā)的程序設(shè)計方法,也稱為設(shè)備相位。Stuio5000(或RSLogix5000 V15版及以后的版本)支持設(shè)備階段的編程和管理功能。它把設(shè)備運行劃分為各個操作狀態(tài)循環(huán)操作,任何時候只有一個模塊處于激活處理中,每個狀態(tài)按照設(shè)定的時間或給定的條件,決定完成并進(jìn)入下一個狀態(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)用對象不同而已。
③例程
例程是控制器執(zhí)行的所有控制代碼的集合,也稱為子程序,是一個項目實現(xiàn)各種控制策略的執(zhí)行邏輯代碼。例程可以用任一種編程語言進(jìn)行編寫,每個例程只能引用控制器數(shù)據(jù)庫和所在程序的數(shù)據(jù)庫。
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ù)進(jìn)行合理的規(guī)劃,包括數(shù)據(jù)范圍、數(shù)據(jù)類型和結(jié)構(gòu)等。
①數(shù)據(jù)標(biāo)簽
數(shù)據(jù)標(biāo)簽由字母開頭,包括大小寫字母、數(shù)字0~9和下劃線組成,如witch_1,Pump_5和Start等。在同一個數(shù)據(jù)范圍內(nèi),數(shù)據(jù)標(biāo)簽不分大小寫,大小寫主要用于輔助記憶。由于數(shù)據(jù)標(biāo)簽在數(shù)據(jù)庫中是按字母順序排列的,所以可用前綴、補齊標(biāo)簽字符長度的方法進(jìn)行命名。如A1_TK001,A2_TK151等,簡潔的數(shù)據(jù)標(biāo)簽可以節(jié)省內(nèi)存。
②數(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)簽可以重名。
③數(shù)據(jù)類型
ControlLogix系統(tǒng)的數(shù)據(jù)類型有基本數(shù)據(jù)類型和結(jié)構(gòu)數(shù)據(jù)類型2種。基本數(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),是程序或人機(jī)界面引用地址的最小單位,通常稱為操作數(shù)?;緮?shù)據(jù)類型的名稱、符號、格式和數(shù)值范圍見表,實數(shù)型數(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)存空間,空余的位被閑置。ControlLogix系統(tǒng)基本數(shù)據(jù)類型的內(nèi)存空間占用如圖陰影部分所示。很顯然,這樣的內(nèi)存分配其優(yōu)點是簡單,缺點是占用內(nèi)存較多。
CPU處理不同的數(shù)據(jù)類型時運算速度是不同的,如采用 SINT或INT類型運算時,CPU需要把SINT或INT轉(zhuǎn)換成DINT后進(jìn)行運算,運算完成后還要將結(jié)果分別轉(zhuǎn)換為 SINT或INT型數(shù)據(jù)。這都需要占用CPU處理時間?;旌线\算時的轉(zhuǎn)換略有不同,如SINT與DINT運算,結(jié)果為DINT等。數(shù)據(jù)類型都是DINT時,數(shù)據(jù)處理時不需要轉(zhuǎn)換,運算速度較快。
這在具體應(yīng)用編程時要注意,如果運算量不大,CPU運行速度足夠快,這點時間是可以忽略的。但如果程序較大,就需要做進(jìn)一步優(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種,每一種類型又包含幾種形式,見表。
◆系統(tǒng)預(yù)定義結(jié)構(gòu)數(shù)據(jù)類型
指系統(tǒng)預(yù)先定義的結(jié)構(gòu)數(shù)據(jù),具有固定的形式,在組態(tài)編程定義時自動產(chǎn)生,它包括以下幾種形式:
◆I/O組態(tài)時產(chǎn)生的數(shù)據(jù)
ContolLogix系統(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:0—本地框架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:0.Data.7表示2號槽位的DO模塊的輸出通道7等。AI和AO模塊的定義和別名調(diào)用方法類似。
◆多字元素文件數(shù)據(jù)
ControlLogix 系統(tǒng)擴(kuò)展了PLC-5增強型指令集,并繼續(xù)引用傳統(tǒng)PLC指令集中的多字元素文件,同時把指令中的16位整型數(shù)轉(zhuǎn)換為32位雙整型數(shù)。如定時器(Timer)指令、計數(shù)器(Counter)指令、比例積分微分(PID)指令、信息(MSG)指令和順序功能圖(SFC)操作指令等。
運動控制、功能塊圖、設(shè)備階段以及系統(tǒng)組態(tài)信息和狀態(tài)信息對應(yīng)的數(shù)據(jù)結(jié)構(gòu),分別在運動控制編程、功能塊(過程控制)編程、設(shè)備階段編程以及使用設(shè)置控制器狀態(tài)值指令(SSV)和讀取控制器狀態(tài)值指令(GSV)時引用。
◆自定義結(jié)構(gòu)數(shù)據(jù)類型,指用戶根據(jù)應(yīng)用需要自行定義的結(jié)構(gòu)數(shù)據(jù)。它包括以下幾種形式:
字符串自定義數(shù)據(jù)結(jié)構(gòu)。用戶可以自行定義長度為1KB~64KB的字符串?dāng)?shù)據(jù)結(jié)構(gòu),用于ASCⅡI碼的數(shù)據(jù)(英 文字符和數(shù)字符號等)表述。數(shù)據(jù)結(jié)構(gòu)中默認(rèn)一個長度為82B的字符串,與傳統(tǒng)PLC-5/SLC-500系統(tǒng)中定義的字符串長度一致以保證能相互兼容。
用戶自定義數(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ù)?。在建立?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ù)倍。
為電機(jī)控制而建立的UDF存儲空間如圖所示,各種數(shù)據(jù)類型占用的存儲空間與定義的順序(而不是按字母順序)和它們的類型有關(guān),把相同類型的數(shù)據(jù)整理到一起,數(shù)據(jù)所占用的空間只需40B(10*4=40B),比原來基本數(shù)據(jù)類型所占空間(14*4=56B )要小得多。
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ù)。
◆數(shù)組
數(shù)組是同一數(shù)據(jù)類型連續(xù)分布的集合,可由基本數(shù)據(jù)類型和結(jié)構(gòu)數(shù)據(jù)類型構(gòu)成。數(shù)組有一維、2維和3維等3種結(jié)構(gòu)。數(shù)組中元素的個數(shù)沒有限制,大小取決于控制器內(nèi)存。
一個數(shù)組元素具有相同的數(shù)據(jù)形式,而且可以用算術(shù)表達(dá)式來運算。
數(shù)組數(shù)據(jù)Array_1[2]表示一個一維數(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行交叉點的因素,數(shù)組數(shù)據(jù)元素如圖所示,圖中陰影的位置就表示數(shù)組元素的位置。
共有訪客發(fā)表了評論
網(wǎng)友評論