基于DSP/BIOS的PLC執(zhí)行系統(tǒng)開(kāi)發(fā)
摘要:分析了目前軟PLC在實(shí)時(shí)性方面存在的不足;提出采用基于DSP/BIOS實(shí)時(shí)內(nèi)核的嵌入式處理器的軟PLC執(zhí)行系統(tǒng)架構(gòu)。首先,通過(guò)分析軟PLC執(zhí)行系統(tǒng)的架構(gòu)及工作原理,給出了基于DSP/BIOS的任務(wù)調(diào)度方案;其次,建立PLC指令的執(zhí)行函數(shù)庫(kù),確定PLC執(zhí)行系統(tǒng)的運(yùn)行流程:最后,對(duì)該P(yáng)LC執(zhí)行系統(tǒng)性能進(jìn)行的測(cè)試表明,基于嵌入式處理器的軟PLC執(zhí)行系統(tǒng)能有效地彌補(bǔ)軟PLC在實(shí)時(shí)性及穩(wěn)定性方面的不足,在自動(dòng)控制方面具有相當(dāng)大的發(fā)展?jié)摿Α?br />
關(guān)鍵詞:DSP/BIOS;軟PLC;執(zhí)行系統(tǒng);嵌入式處理器
目前工控領(lǐng)域中廣泛使用的可編程邏輯控制器(Programmable Logic Controller)大概可以分為兩類:傳統(tǒng)PLC與軟PLC。傳統(tǒng)PLC由于自身存在一些不足,例如封閉的硬件體系結(jié)構(gòu),主要由幾家廠商所壟斷,而軟PLC在開(kāi)放性及低成本方面潛力巨大,目前歐美等很多西方國(guó)家已經(jīng)把軟件PLC作為一個(gè)重點(diǎn)對(duì)象進(jìn)行研究開(kāi)發(fā)。
傳統(tǒng)PLC具有硬實(shí)時(shí)性,正因?yàn)槿绱怂拍芴峁┛焖佟⒋_定而可重復(fù)的響應(yīng)。另一方面,由于軟PLC是基于PC而建立在一定的操作系統(tǒng)上,例如Windows NT,而這并不是一個(gè)硬實(shí)時(shí)的操作系統(tǒng),這使得以PC為基礎(chǔ)的控制引擎實(shí)時(shí)性問(wèn)題成為制約軟PLC發(fā)展的主要因素之一。
針對(duì)軟PLC在實(shí)時(shí)性方面的不足,本項(xiàng)目采用基于嵌入式處理器的控制方案,軟PLC執(zhí)行系統(tǒng)作為一個(gè)任務(wù)在控制器固件內(nèi)。美國(guó)TI公司推出的C6000系列數(shù)字信號(hào)處理器(Digital Signal Processor)具有很高的處理能力,特別是為其TMS320C6000TM、TMS320C5000TM和TMS320 C28xTM系列DSP平臺(tái)所設(shè)計(jì)開(kāi)發(fā)的一個(gè)尺寸可裁剪的實(shí)時(shí)多任務(wù)操作系統(tǒng)內(nèi)核DSP/BIOS,提供搶占式多線程、硬件抽象、實(shí)時(shí)分析和配置工具,可實(shí)現(xiàn)實(shí)時(shí)線程調(diào)度與同步、主機(jī)與目標(biāo)DSP間通信或?qū)崟r(shí)監(jiān)測(cè)。DSP是串行控制的,運(yùn)算速度快。基于DSP/BIOS實(shí)時(shí)內(nèi)核的PLC執(zhí)行系統(tǒng),具有相當(dāng)好的實(shí)時(shí)性及穩(wěn)定性。下面著重介紹其設(shè)計(jì)及實(shí)現(xiàn)方法。
1 軟PLC的設(shè)計(jì)規(guī)劃
1.1 軟PLC的架構(gòu)分析
由PLC執(zhí)行系統(tǒng)控制的PLC程序劃分為一級(jí)程序和二級(jí)程序,它們的執(zhí)行周期不一致。一級(jí)程序每8 ms執(zhí)行一次,處理響應(yīng)快的短脈沖信號(hào),例如外部的操作面板信號(hào)和報(bào)警信號(hào),在程序末尾自動(dòng)給出結(jié)束標(biāo)記END1。二級(jí)程序?yàn)橐话愕腜LC指令,每8n ms執(zhí)行一次,n為第二級(jí)程序的分割數(shù)。在開(kāi)始執(zhí)行二級(jí)程序時(shí),PLC執(zhí)行系統(tǒng)模塊會(huì)根據(jù)執(zhí)行程序所需要的時(shí)間自動(dòng)把二級(jí)程序分割成n塊,每個(gè)8 ms只執(zhí)行其中一塊,并在二級(jí)程序結(jié)束時(shí)自動(dòng)給出結(jié)束標(biāo)記END2。
1.2 PLC執(zhí)行系統(tǒng)的工作原理
PLC采用循環(huán)掃描方式工作,首先進(jìn)行系統(tǒng)初始化,然后進(jìn)入循環(huán)工作過(guò)程包括輸入采樣、PLC指令執(zhí)行及輸出刷新幾個(gè)階段,其基本流程如圖1所示。
1)系統(tǒng)初始化:在循環(huán)執(zhí)行PLC程序前,首先要進(jìn)行執(zhí)行系統(tǒng)的初始化,包括參數(shù)的輸入及變量初值的設(shè)置;2)輸入的采樣:每次執(zhí)行PLC程序時(shí),要讀取外部輸入狀態(tài)至緩沖區(qū)中,以備后面程序查詢;3)執(zhí)行用戶PLC程序:執(zhí)行用戶程序,就是CPU從PLC程序的首地址開(kāi)始按順序逐個(gè)執(zhí)行編譯后的PLC指令,過(guò)程結(jié)果暫存在相應(yīng)的寄存器內(nèi);4)輸出的刷新:執(zhí)行完用戶程序后,需要把處理后需要輸出的結(jié)果進(jìn)行外部輸出。由于PLC控制的對(duì)象大都是變化緩慢的信號(hào),而PLC每次掃描輸入和邏輯運(yùn)算的時(shí)間很短,本PLC執(zhí)行系統(tǒng)設(shè)定為每執(zhí)行一個(gè)循環(huán),就進(jìn)行一遍輸出的刷新。
1.3 DSP/BIOS的線程調(diào)度
文中的PLC執(zhí)行系統(tǒng)的開(kāi)發(fā)均在TI公司提供的集成開(kāi)發(fā)環(huán)境CCS(Code Composer Studio)中進(jìn)行,CCS不僅集成了常規(guī)的開(kāi)發(fā)工具,如源程序編輯器、代碼生成工具及調(diào)試環(huán)境,還提供DSP/BIOS開(kāi)發(fā)工具。DSP/BIOS是一個(gè)精簡(jiǎn)的實(shí)時(shí)操作系統(tǒng)內(nèi)核,具有實(shí)時(shí)操作系統(tǒng)功能。它提供搶占式多線程,支持多種不同優(yōu)先級(jí),每種線程都有不同的執(zhí)行和搶占特性,分別是硬件中斷(HWI)包括時(shí)鐘函數(shù)(CLK)、軟件中斷(SWI)包括周期函數(shù)(PRD)、任務(wù)線程(TSK)、后臺(tái)線程(IDL)。線程類型的選取原則:HW1只用來(lái)處理對(duì)時(shí)間要求苛刻的關(guān)鍵任務(wù);SWI用來(lái)處理相對(duì)獨(dú)立的函數(shù),如果算法要求比較復(fù)雜則使用TSK。TSK提供了很多任務(wù)通信和同步的手段,并且擁有自己獨(dú)立的堆棧,因此比SWI更靈活。IDL用于執(zhí)行與時(shí)間無(wú)關(guān)的非關(guān)鍵任務(wù)。
在DSP/BIOS線程調(diào)度中,硬件中斷與軟件中斷的高優(yōu)先級(jí)線程可以暫停運(yùn)行中的低優(yōu)先級(jí)任務(wù),而高優(yōu)先級(jí)的任務(wù)線程必須用特定的API才能搶占當(dāng)前運(yùn)行的低優(yōu)先級(jí)任務(wù)線程,且只有任務(wù)線程才能暫停狀態(tài)?;赑LC執(zhí)行是一個(gè)循環(huán)執(zhí)行過(guò)程,且與其它運(yùn)動(dòng)線程有復(fù)雜的通訊交互,本執(zhí)行系統(tǒng)將其建立為一任務(wù)線程,由DSP/BIOS實(shí)時(shí)操作系統(tǒng)進(jìn)行調(diào)度。
2 PLC執(zhí)行系統(tǒng)的具體實(shí)現(xiàn)
2.1 數(shù)據(jù)結(jié)構(gòu)定義
1)PLC指令代碼數(shù)據(jù)結(jié)構(gòu)的定義。PLC用戶程序在系統(tǒng)內(nèi)部以一定的二進(jìn)制格式存放,采用如下指令開(kāi)辟一個(gè)a字節(jié)的內(nèi)存區(qū)存放編譯后的PLC指令代碼,內(nèi)存區(qū)大小a根據(jù)實(shí)際情況設(shè)定。
long*plc_pt;
plc_pt=(long*)malloc(a);
2)PLC執(zhí)行指令結(jié)構(gòu)體的定義。PLC指令代碼主要包含內(nèi)容為指令類型及變量地址,定義如下PLC執(zhí)行指令結(jié)構(gòu)體:
struct plc_code_type //PLC執(zhí)行指令結(jié)構(gòu)體
{
unsigned char code_type;//指令類型
unsigned short pt addr;//變量地址
};
由此,在初始化時(shí)定義一個(gè)pk_code_type類型的指針直接指向PLC指令代碼區(qū).在進(jìn)行PLC指令解析時(shí),可直接移動(dòng)該指針進(jìn)行指令解析并輸出。
2.2 PLC指令解析
PLC執(zhí)行系統(tǒng)的一個(gè)關(guān)鍵問(wèn)題在于PLC指令的解析,利用DSP的C語(yǔ)言,建立相應(yīng)的PLC指令的執(zhí)行函數(shù)庫(kù)。PLC用戶程序可看成由多段執(zhí)行塊組成,每個(gè)執(zhí)行塊包括條件指令及執(zhí)行指令。下面分為條件指令解析及執(zhí)行指令解析來(lái)進(jìn)行描述。
2.2.1 條件指令解析
首先定義一個(gè)變量來(lái)保存條件指令解析結(jié)果,以便在解析執(zhí)行指令時(shí)根據(jù)此條件指令解析結(jié)果進(jìn)行執(zhí)行指令處理。
例如常開(kāi)觸點(diǎn)(LD)可以用如下函數(shù)實(shí)現(xiàn):
void plcLD(plc_code_type&pc)
//pc表示當(dāng)前指令在用戶程序中的指針位置
{ if(1==pc->pt_addr)//指令獲取的地址為1
{
plc_result&=0x01;//閉合狀態(tài)置位
}
}
2.2.2 執(zhí)行指令解析
執(zhí)行指令則根據(jù)當(dāng)前執(zhí)行塊條件指令結(jié)果來(lái)判斷對(duì)元件地址進(jìn)行相應(yīng)處理。例如置位指令(SET)可以用如下函數(shù)實(shí)現(xiàn):
void plcSET(plc_code_type&pc)
{ if(plc_result&1)
//判斷條件指令,閉合,有輸出
{
pc->pt_addr|=0xff;//對(duì)應(yīng)地址置位
}
}
這樣,逐個(gè)對(duì)PLC執(zhí)行塊進(jìn)行解析,輸入和輸出單元的刷新同樣利用函數(shù)來(lái)實(shí)現(xiàn),最后通過(guò)輸出口送出控制量,實(shí)現(xiàn)對(duì)用戶PLC程序的執(zhí)行控制。
2.3 PLC執(zhí)行系統(tǒng)運(yùn)行流程
首先在DSP/BIOS配置工具下的Scheduling項(xiàng)目中建立一個(gè)任務(wù)線程,比如為PLC_Deal_Task,并對(duì)該任務(wù)函數(shù)的優(yōu)先級(jí)及其它相關(guān)內(nèi)容進(jìn)行設(shè)置,則可直接在PLC_Deal_Task線程中進(jìn)行PLC指令解析處理,并實(shí)現(xiàn)PLC的循環(huán)掃描功能。
總體設(shè)計(jì)思想如下:設(shè)定一級(jí)程序的執(zhí)行周期為m個(gè)指令計(jì)數(shù)執(zhí)行一次,m與掃描周期有關(guān)。在進(jìn)入二級(jí)循環(huán)后,首先判斷指令計(jì)數(shù)是否大于m,未到m,則進(jìn)入執(zhí)行二級(jí)程序。如果條件滿足,跳出循環(huán),1周期完成,具體調(diào)度流程如圖2所示。
3 測(cè)試分析及應(yīng)用
3.1 軟PLC執(zhí)行系統(tǒng)的測(cè)試分析
根據(jù)上述設(shè)計(jì)方法構(gòu)建出PLC執(zhí)行系統(tǒng),設(shè)計(jì)實(shí)際應(yīng)用的PLC程序并在試驗(yàn)機(jī)上進(jìn)行測(cè)試,觀察設(shè)備的邏輯動(dòng)作及執(zhí)行系統(tǒng)性能情況。C CS提供了一系列可視化工具對(duì)運(yùn)行系統(tǒng)的性能進(jìn)行測(cè)試,“CPU負(fù)荷圖”用于分析CPU的利用率,“任務(wù)執(zhí)行圖”可以檢測(cè)出系統(tǒng)是否符合實(shí)時(shí)性要求?,F(xiàn)根據(jù)微鉆刃面檢測(cè)機(jī)的工藝過(guò)程設(shè)計(jì)了其PLC程序,下載到本軟PLC執(zhí)行系統(tǒng)中運(yùn)行,通過(guò)CCS監(jiān)測(cè)工具監(jiān)測(cè)其運(yùn)行性能。圖3是CPU負(fù)荷圖,負(fù)荷峰值在25%左右,變化平穩(wěn);圖4是任務(wù)執(zhí)行圖,圖中左邊欄最下面的Assertions項(xiàng)目用于指示某個(gè)實(shí)時(shí)性要求沒(méi)有達(dá)到,或是偵測(cè)到某個(gè)無(wú)效狀態(tài),如果Assertions項(xiàng)目沒(méi)有出現(xiàn)小方塊則表示對(duì)應(yīng)線程的調(diào)度滿足實(shí)時(shí)性要求。另外,經(jīng)上機(jī)調(diào)試,設(shè)備整體運(yùn)行邏輯也完全按照程序要求運(yùn)行。此實(shí)驗(yàn)表明,基于DSP/BIOS的軟PLC執(zhí)行系統(tǒng)能夠滿足實(shí)時(shí)控制的要求且工作穩(wěn)定。
3.2 軟PLC執(zhí)行系統(tǒng)的應(yīng)用
傳統(tǒng)PLC的一個(gè)缺點(diǎn)是硬件體系結(jié)構(gòu)相對(duì)封閉,并且成本高,例如日本三菱PLC FX2N系列控制器本身未集成運(yùn)動(dòng)軸控制功能,每增加一個(gè)運(yùn)動(dòng)軸的控制均需額外擴(kuò)展脈沖發(fā)生器單元(Pulse Generatint Unit,PGU),如果在多軸設(shè)備上應(yīng)用可能會(huì)造成成本過(guò)高并且靈活不夠。本課題組開(kāi)發(fā)的運(yùn)動(dòng)控制器IPMC8188可獨(dú)立控制8軸,軟PLC執(zhí)行系統(tǒng)作為一個(gè)任務(wù)運(yùn)行在該控制器的固件中。對(duì)比傳統(tǒng)PLC,有穩(wěn)定強(qiáng)大的PLC功能的運(yùn)動(dòng)控制器可降低控制系統(tǒng)構(gòu)建的復(fù)雜程度,提高控制效率及開(kāi)發(fā)效率。圖5所示為內(nèi)嵌軟PLC執(zhí)行系統(tǒng)的IMPC8188運(yùn)動(dòng)控制器,目前,該型運(yùn)動(dòng)控制器已在全自動(dòng)刃面檢測(cè)機(jī)、自動(dòng)貼片機(jī)及全自動(dòng)微鉆磨尖機(jī)等自動(dòng)化設(shè)備上使用并穩(wěn)定運(yùn)行。
4 結(jié)束語(yǔ)
基于嵌入式處理器的軟PLC執(zhí)行系統(tǒng)能有效的彌補(bǔ)軟PLC在實(shí)時(shí)性及穩(wěn)定性方面的不足,并且由于自帶操作系統(tǒng),有可靠地?cái)?shù)據(jù)存儲(chǔ)和自恢復(fù)功能。文中論述的基于DSP/BIOS的PLC執(zhí)行系統(tǒng)的設(shè)計(jì),與運(yùn)動(dòng)控制相結(jié)合,在小中型自動(dòng)化設(shè)備方面應(yīng)用廣泛,另外在實(shí)現(xiàn)大規(guī)模系統(tǒng)的綜合性自動(dòng)控制方面也有很大的發(fā)展?jié)摿Α?/p>