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