本發(fā)明涉及控制領(lǐng)域,特別是指一種支持協(xié)程功能的PLC控制器。
背景技術(shù):
在工業(yè)控制領(lǐng)域,從控制指令的發(fā)出,到控制指令的執(zhí)行,中間往往需要延時。因此當(dāng)一個指令執(zhí)行后,要等待這個指令執(zhí)行完畢才能執(zhí)行下一個指令,這個過程稱作阻塞。阻塞使控制器的效率和實時性大大降低。因此我們往往要采取非阻塞的編程策略,即當(dāng)一個指令執(zhí)行后,不必等待這個指令執(zhí)行完畢才能執(zhí)行下一個指令,但是這種情況下執(zhí)行后續(xù)指令時要不停檢查當(dāng)前指令是否結(jié)束,否則會造成時序錯誤。這樣編程的復(fù)雜性就增大了。
協(xié)程是一種用戶級的輕量級線程。協(xié)程擁有自己的寄存器上下文和棧。協(xié)程調(diào)度切換時,將寄存器上下文和棧保存到其他地方,在切回來的時候,恢復(fù)先前保存的寄存器上下文和棧。協(xié)程可以大大簡化多任務(wù)并行執(zhí)行的編程。比如,我們控制4臺機械手的運動,當(dāng)?shù)谝慌_機械手的控制指令下達后,這臺機械手的協(xié)程被掛起;系統(tǒng)切換至等待指令執(zhí)行的下一個協(xié)程控制;這樣控制系統(tǒng)的效率和實時性就大大地提高了。同時,每臺機械手的控制程序在一個協(xié)程之中,編程的復(fù)雜度也得到降低。
PLC控制器的IEC61131-3國際標準的編程語言包括圖形化編程語言和文本化編程語言ST。然而標準ST語言不包含協(xié)程功能。
技術(shù)實現(xiàn)要素:
鑒于協(xié)程功能在工業(yè)控制領(lǐng)域的重要性,本發(fā)明提出一種支持協(xié)程功能的PLC控制器,
包括:中央處理單元,存儲器,電源模塊,程式輸入裝置,輸入輸出回路;其特征在于,
在中央處理單元中擴展了對程序協(xié)程功能的支持,包括以下方案:
在用于所述PLC控制器編程的ST語言中加入?yún)f(xié)程的關(guān)鍵詞,用于標記程序協(xié)程的起始和結(jié)束;
在用于所述PLC控制器編程的ST語言中加入?yún)f(xié)程基本操作的庫函數(shù)的支持;
用于所述PLC控制器編程的ST語言編譯器獨立編譯各協(xié)程段,每一個協(xié)程擁有自己的寄存器上下文和棧;
用于所述PLC控制器編程的ST語言編譯器編譯生成字節(jié)碼,下載至PLC控制器,PLC控制器的字節(jié)碼虛擬機執(zhí)行此字節(jié)碼;
在所述PLC控制器字節(jié)碼虛擬機中增加了對協(xié)程指令集的支持。
進一步的,所述字節(jié)碼虛擬機運行在一個實時操作系統(tǒng)的環(huán)境下,一個字節(jié)碼虛擬機占用一個線程,這個系統(tǒng)下有獨立于虛擬機的線程對字節(jié)碼虛擬機進行監(jiān)視,并進行異常處理;此監(jiān)視線程有獨立于字節(jié)碼虛擬機的寄存器上下文和棧,一旦虛擬機異常,監(jiān)視線程仍可正常運行,其對虛擬機的監(jiān)視和異常處理能正常運行。
進一步的,一個PLC控制器可以運行多個字節(jié)碼虛擬機。
本發(fā)明的有益效果是:簡化了過程控制的編程復(fù)雜度;多任務(wù)執(zhí)行的實時性、執(zhí)行效率大大提升。
附圖說明
圖1為協(xié)程調(diào)度切換原理圖。
具體實施方式
PLC控制器的IEC61131-3國際標準的編程語言包括圖形化編程語言和文本化編程語言(ST語言)。ST語言具有編程功能強大高效的特點,然而標準ST語言不包含協(xié)程功能。
要實現(xiàn)支持協(xié)程功能,必須先讓ST語言編譯器加入支持協(xié)程的功能。因此首先要在ST語言中加入?yún)f(xié)程的關(guān)鍵詞,用于標記協(xié)程的起始和結(jié)束;同時在ST語言中加入?yún)f(xié)程基本操作的庫函數(shù)的支持。在ST語言編譯器編譯時,要獨立編譯各協(xié)程段,每一個協(xié)程擁有自己的寄存器上下文和棧。
ST語言編譯器編譯生成字節(jié)碼,字節(jié)碼類似于在CPU上運行的機器碼。把字節(jié)碼下載至PLC控制器,PLC控制器的字節(jié)碼虛擬機模擬CPU運行,執(zhí)行此字節(jié)碼。要實現(xiàn)在所述字節(jié)碼虛擬機對協(xié)程的支持,就必須增加字節(jié)碼虛擬機協(xié)程指令集;另外還必須將協(xié)程操作以庫函數(shù)進行處理。
下面,結(jié)合一個具體的實施例來說明在ST語言中擴展協(xié)程的方法。
首先,在ST語言中增加TASK,END_TASK兩個關(guān)鍵詞標記協(xié)程的起始和結(jié)束。
如代碼:
TASK taskA
……
END_TASK
TASK taskB
……
END_TASK
含義是標記2個協(xié)程,在ST語言編譯器編譯時,要獨立編譯各協(xié)程段,每一個協(xié)程擁有自己的寄存器上下文和棧,但是不同的協(xié)程可以有公共的全局變量。
增加Start(taskA),End(taskA),Yiled(taskA),Resum(taskA)幾個函數(shù)進行協(xié)程的基本操作,編程用戶調(diào)用這些函數(shù)就能實現(xiàn)協(xié)程功能,這些函數(shù)構(gòu)成協(xié)程函數(shù)庫。ST語言編譯器按系統(tǒng)默認的庫函數(shù)編譯這些函數(shù),這些函數(shù)編譯成的字節(jié)碼含有協(xié)程指令集指令,從而實現(xiàn)對協(xié)程的支持。因為字節(jié)碼虛擬機是模擬CPU的運行機制,對協(xié)程的支持表現(xiàn)在協(xié)程擁有自己的寄存器上下文和棧,即虛擬機為每一個協(xié)程定義了獨立的上下文寄存器,并分配獨立的??臻g;虛擬機執(zhí)行每一個協(xié)程程序就好比不同的PLC控制器執(zhí)行他們獨立的程序一樣;協(xié)程調(diào)度切換時,虛擬機將協(xié)程寄存器上下文和棧保存起來,在切回來的時候,恢復(fù)先前保存的寄存器上下文和棧。這種模擬的協(xié)程與真實的協(xié)程一樣的原理,如圖1所示,為協(xié)程調(diào)度切換原理圖,虛擬機增加了協(xié)程調(diào)度器,用于實現(xiàn)協(xié)程的調(diào)度,原理和C語言下的協(xié)程是一樣的。
為了提高單片機的效率和安全性,PLC控制器字節(jié)碼虛擬機運行在一個實時操作系統(tǒng)的環(huán)境下,一個字節(jié)碼虛擬機占用一個線程,一個線程不會干擾另外線程,從而保證系統(tǒng)的安全性,同時也能讓一個PLC控制器可以運行多個字節(jié)碼虛擬機。另外,這個系統(tǒng)下有獨立于虛擬機的線程對字節(jié)碼虛擬機進行監(jiān)視管控,并進行異常處理;此監(jiān)視線程有獨立于字節(jié)碼虛擬機的寄存器上下文和棧,一旦虛擬機異常,監(jiān)視線程仍可正常運行,其對虛擬機的監(jiān)視和異常處理能正常運行。這樣一旦虛擬機異常,整個單片機系統(tǒng)不會全面崩潰,系統(tǒng)的會保存關(guān)鍵數(shù)據(jù),并從異常中自動恢復(fù)。
由于PLC控制器字節(jié)碼虛擬機運行在一個實時操作系統(tǒng)的環(huán)境下,因此可以運行多個字節(jié)碼虛擬機,只要PLC控制器有足夠的內(nèi)存空間運行這些虛擬機并且在運行速度上能達到目標要求,這樣就能模擬運行多個PLC控制器。
需要說明的是,本發(fā)明實施例中所有使用“第一”和“第二”的表述均是為了區(qū)分兩個相同名稱非相同的實體或者非相同的參量,可見“第一”“第二”僅為了表述的方便,不應(yīng)理解為對本發(fā)明實施例的限定,后續(xù)實施例對此不再一一說明。
所屬領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:以上任何實施例的討論僅為示例性的,并非旨在暗示本公開的范圍(包括權(quán)利要求)被限于這些例子;在本發(fā)明的思路下,以上實施例或者不同實施例中的技術(shù)特征之間也可以進行組合,步驟可以以任意順序?qū)崿F(xiàn),并存在如上所述的本發(fā)明的不同方面的許多其它變化,為了簡明它們沒有在細節(jié)中提供。
另外,為簡化說明和討論,并且為了不會使本發(fā)明難以理解,在所提供的附圖中可以示出或可以不示出與集成電路(IC)芯片和其它部件的公知的電源/接地連接。此外,可以以框圖的形式示出裝置,以便避免使本發(fā)明難以理解,并且這也考慮了以下事實,即關(guān)于這些框圖裝置的實施方式的細節(jié)是高度取決于將要實施本發(fā)明的平臺的(即,這些細節(jié)應(yīng)當(dāng)完全處于本領(lǐng)域技術(shù)人員的理解范圍內(nèi))。在闡述了具體細節(jié)(例如,電路)以描述本發(fā)明的示例性實施例的情況下,對本領(lǐng)域技術(shù)人員來說顯而易見的是,可以在沒有這些具體細節(jié)的情況下或者這些具體細節(jié)有變化的情況下實施本發(fā)明。因此,這些描述應(yīng)被認為是說明性的而不是限制性的。
盡管已經(jīng)結(jié)合了本發(fā)明的具體實施例對本發(fā)明進行了描述,但是根據(jù)前面的描述,這些實施例的很多替換、修改和變型對本領(lǐng)域普通技術(shù)人員來說將是顯而易見的。例如,其它存儲器架構(gòu)(例如,動態(tài)RAM(DRAM))可以使用所討論的實施例。
本發(fā)明的實施例旨在涵蓋落入所附權(quán)利要求的寬泛范圍之內(nèi)的所有這樣的替換、修改和變型。因此,凡在本發(fā)明的精神和原則之內(nèi),所做的任何省略、修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。