楊擁軍
摘 要 文章提出了數(shù)據(jù)塊(DB)中數(shù)組(Array)和結(jié)構(gòu)(Struct)等復(fù)雜數(shù)據(jù)類型的嵌套在物流輸送線自控西門子PLC程序中的應(yīng)用方案,該方案在PLC數(shù)據(jù)塊中的用戶數(shù)據(jù)存儲地址與實際設(shè)備號之間建立了數(shù)學(xué)模型,實現(xiàn)有序編址。以卷煙物流高架倉庫PLC控制程序為實例介紹了具體的實現(xiàn)過程,并詳細(xì)介紹了西門子Step7中的實現(xiàn)數(shù)組與結(jié)構(gòu)的嵌套、利用指針尋址以及數(shù)據(jù)傳遞的方法。
關(guān)鍵詞 數(shù)組;Struct;嵌套;物流;PLC
引言
在卷煙自動化物流控制系統(tǒng)中,信息流是不可或缺,需要同步傳遞的。PLC控制物流輸送時,運行參數(shù)、托盤條碼、物料品種等信息也同步傳遞。如何有序地存儲這些數(shù)據(jù),方法有很多。巧用數(shù)組和結(jié)構(gòu)這些復(fù)雜數(shù)據(jù)類型嵌套,是一個可行的方法[1]。
1 數(shù)組和結(jié)構(gòu)的定義
數(shù)組( Array)數(shù)據(jù)類型表示一個由固定數(shù)目的同一種數(shù)據(jù)類型元素組成的數(shù)據(jù)結(jié)構(gòu)。Array有時也被譯為“矩陣”。數(shù)組中的元素允許使用除了Array之外的所有數(shù)據(jù)類型。
STEP7中復(fù)雜數(shù)據(jù)類型(Struct)表示一個由確定數(shù)目組件構(gòu)成的數(shù)據(jù)結(jié)構(gòu),組件的數(shù)據(jù)類型可能各不相同。
嵌套的結(jié)構(gòu)就是指一個結(jié)構(gòu)作為另一個結(jié)構(gòu)的組件,結(jié)構(gòu)允許的嵌套深度可達(dá)6層。
2 問題提出
這幾百臺輸送機(jī)上需要傳遞的數(shù)據(jù)包含有多種基本數(shù)據(jù)類型,任務(wù)號、起始地址、目標(biāo)地址、件煙數(shù)量等為整形(INT),托盤條碼為雙整形(DINT),超長、超寬、超高等外型數(shù)據(jù)為布爾形(BOOL)。這幾千組數(shù)據(jù)如果直接在數(shù)據(jù)塊中順序建立和聲明,那將是非常大的工作量,程序維護(hù)起來非常困難[2]。
3 解決思路
數(shù)組( Array)和結(jié)構(gòu)(Struct)的嵌套可以很好地解決這個問題。具體做法是:建立一個Struct數(shù)據(jù)類型,分配固定長度的存儲區(qū)域,把需要傳遞的信息按照一定規(guī)則放在這一區(qū)域,每臺輸送機(jī)對應(yīng)一個Struct;
然后再建立一個數(shù)據(jù)塊,聲明一維數(shù)組Array,數(shù)組的上下邊界包含設(shè)備的所有平面,使數(shù)組順序與設(shè)備編號一一對應(yīng),可以一個建立數(shù)學(xué)模型。如設(shè)備編號從3001開始,就定義ARRAY[3001..3500]。在Array內(nèi)嵌套剛建立的Struct數(shù)據(jù)類型,就能把存放地址排序分配了。需要傳遞信息時,利用POINTER型指針尋址,將上一個輸送機(jī)的Struct傳送到下一個的Struct,實現(xiàn)信息的批量傳遞。
4 物流信息有序存儲及傳遞的功能實現(xiàn)
4.1 搭建環(huán)境
西門子S7系列PLC都有很強(qiáng)的數(shù)據(jù)存儲能力,為物流控制系統(tǒng)的信息流傳遞提供了很好的支撐。以西門子S7-300為例,實例說明數(shù)組在物流控制程序的應(yīng)用。
4.2 建立數(shù)據(jù)塊,聲明一維數(shù)組Array
插入一個數(shù)據(jù)塊,選擇復(fù)雜數(shù)據(jù)類型中的Array數(shù)組。數(shù)組以實際的設(shè)備平面號為邊界,比如生產(chǎn)線400多臺的輸送機(jī)平面號以3001為基準(zhǔn)平面號,就定義數(shù)組Array[3001..3500],抽象的數(shù)組更貼近實際生產(chǎn)現(xiàn)場,容易理解。
由于數(shù)組內(nèi)的數(shù)據(jù)類型要求同一種數(shù)據(jù)類型元素,所以在數(shù)組內(nèi)再嵌套聲明一個Struct數(shù)據(jù)類型。自定義的Struct長度為20個字。在這20個字里再定義任務(wù)號、起始地址、目標(biāo)地址、品牌代碼、件煙數(shù)量(INT)、托盤條碼(DINT),超長、超寬、超高(BOOL)等外型數(shù)據(jù)。這樣就巧妙地將不同數(shù)據(jù)類型的幾千條信息都存放在一個數(shù)組Array里。
4.3 數(shù)學(xué)模型的建立與地址邊界計算
每臺設(shè)備的存放地址分配原則從建立數(shù)據(jù)塊的思路中可以得知,一個Struct表示存儲一臺設(shè)備的信息,每臺輸送機(jī)分配了20個字節(jié)。設(shè)備的平面號以3001起始,那么就以3001為基準(zhǔn)平面號。計算某臺設(shè)備的存儲地址時,以當(dāng)前設(shè)備平面號減去基準(zhǔn)平面號3001的差值,再乘以20,就是這臺設(shè)備的存儲起始字節(jié)邊界。
當(dāng)設(shè)備編號為N,基準(zhǔn)平面號M,存儲起始字節(jié)邊界為S,那么
S=(N-M)*20
如設(shè)備3013,基準(zhǔn)平面號3001,則設(shè)備3013的存儲起始地址為:
S=(3013-3001)*20=240,
它的物料信息在DB50數(shù)據(jù)塊中的存放地址為DB50.dbw240,以DB50.dbw240為起始字節(jié),向后20個字。
4.4 編寫功能塊,利用指針POINTER信息傳遞
(1) 起始地址和目標(biāo)地址的計算
建立一個FC塊,變量#EQU1_NO表示從哪臺設(shè)備傳遞;#EQU2_NO要傳遞給哪臺設(shè)備;#OFFSET表示基準(zhǔn)平面號;
#EQU1_NO與基準(zhǔn)平面號#OFFSET的差值再乘以20,再乘以8,就是傳遞起始設(shè)備的起始地址位,地址存放在地址寄存器AR1中。
#EQU2_NO與基準(zhǔn)平面號#OFFSET的差值再乘以20,再乘以8,就是傳遞目標(biāo)設(shè)備的起始地址位。地址存放在地址寄存器AR2中。
(2) 利用POINTER指針進(jìn)行數(shù)據(jù)傳遞
如上圖2,變量#DB_INFO表示數(shù)據(jù)塊DB50;變量#INFO_LENGTH表示地址區(qū)域長度;地址寄存器AR1和AR2存放著剛才計算出的要傳遞的起始地址和目標(biāo)地址的邊界。
當(dāng)邏輯條件具備時,就會把前一臺設(shè)備存儲區(qū)域的第一位傳遞給當(dāng)前設(shè)備的對應(yīng)位。每傳遞一個字節(jié),地址寄存器AR1、AR2的POINTER指針者向后偏移1個字節(jié)。如此循環(huán)20次,將20個字節(jié)的數(shù)據(jù)都傳遞到下一個Struct。如圖3。
(3) 功能的調(diào)用
當(dāng)FC塊編寫完成后,在程序中可以調(diào)用FC塊,給變量賦值,當(dāng)條件具備時,設(shè)備3013的信息就傳遞到設(shè)備3014中。
5 物流PLC編程中應(yīng)用數(shù)組嵌套結(jié)構(gòu)的優(yōu)點
5.1 數(shù)據(jù)編址邏輯清晰,層次分明。
采用復(fù)雜數(shù)據(jù)類型來存儲、可以在存儲地址與實際設(shè)備之間建立數(shù)學(xué)關(guān)系,實現(xiàn)了物流信息的有序存儲。解決了輸送生產(chǎn)線大批量設(shè)備在PLC中的信息編址的問題,這在卷煙自動化物流倉儲控制程序中實用性很強(qiáng)。
5.2 程序結(jié)構(gòu)簡單
通過Array與Struct的嵌套,解決了Array里只能有同一種數(shù)據(jù)類型元素的問題,使數(shù)據(jù)塊的聲明長度明顯減少。只需要聲明一次Struct數(shù)據(jù)類型就可以把所有設(shè)備的數(shù)據(jù)都涵蓋了。
5.3 程序通用性和可擴(kuò)展性強(qiáng)
數(shù)組在建立時的數(shù)據(jù)終始邊界就大于現(xiàn)有的設(shè)備數(shù)量。當(dāng)生產(chǎn)線增加或減少設(shè)備時,只需在主程序中插入調(diào)用語句即可,增強(qiáng)了程序的通用性和可擴(kuò)展性。
6 結(jié)束語
對于自動化物流系統(tǒng)來說,物流與信息流的同步傳遞是非常重要的。在存儲地址與實際設(shè)備之間建立數(shù)學(xué)模型,對于編寫大規(guī)模生產(chǎn)線PLC程序時非常有用。巧用數(shù)組(Array)與結(jié)構(gòu)(Struct)的嵌套,可能很好地解決大量數(shù)據(jù)信息的編址問題,實現(xiàn)了存儲地址與實際設(shè)備建立數(shù)學(xué)對應(yīng)關(guān)系,數(shù)據(jù)可以有序存儲與傳遞,減少了程序體積,也使程序的通用性的可擴(kuò)展性增強(qiáng)。
參考文獻(xiàn)
[1] 時文飛.數(shù)組式編程方法在PLC編程中的應(yīng)用[J].電氣傳動,2014, 44(1):85-87.
[2] 李琦.數(shù)據(jù)結(jié)構(gòu)和指針在PLC編程中的靈活運用[C].中國儀器儀表學(xué)會第六次全國會員代表大會暨學(xué)術(shù)會議.中國儀器儀表學(xué)會第六次全國會員代表大會暨學(xué)術(shù)會議論文集.北京:中國儀器儀表學(xué)會,2003:124-126,130.