詹 俊,龍 辛,黃 波,楊杰軍,陳雄姿
(1.湘潭大學(xué) 信息工程學(xué)院 電氣工程系,湖南 湘潭 411105;2.湘電風(fēng)能有限公司,湖南 湘潭411105;3.長(zhǎng)沙金博聯(lián)信息技術(shù)有限公司,湖南 長(zhǎng)沙 410000)
PLC在工業(yè)控制領(lǐng)域扮演十分重要的角色,區(qū)別于傳統(tǒng)的PLC,軟PLC系統(tǒng)具有通用性強(qiáng)、操作方便、開(kāi)發(fā)周期短等多方面的優(yōu)點(diǎn),逐漸成為未來(lái)工業(yè)控制器的主力軍。
軟PLC主要分為基于PC軟PLC系統(tǒng)和基于嵌入式操作系統(tǒng)的軟PLC系統(tǒng)。其中后者以其實(shí)時(shí)性能的優(yōu)勢(shì)成為主流。Vx Works操作系統(tǒng)作為一款具有強(qiáng)實(shí)時(shí)性能的嵌入式操作系統(tǒng),能根據(jù)需求靈活地對(duì)其進(jìn)行裁剪,所以目前被廣泛應(yīng)用在基于嵌入式操作系統(tǒng)的軟PLC開(kāi)發(fā)上[1]。CodeSys是由3S公司開(kāi)發(fā)的一種功能強(qiáng)大的PLC軟件編程工具,它支持IEC61131-3標(biāo)準(zhǔn),通過(guò)其runtime庫(kù)可以與底層操作系統(tǒng)很好地鏈接[2]。二者結(jié)合不僅可以很好地保證系統(tǒng)的實(shí)時(shí)性能,同時(shí)也可大大地縮短開(kāi)發(fā)周期。
遠(yuǎn)程監(jiān)控系統(tǒng)由基于Vx Works的數(shù)據(jù)采集與發(fā)送模塊、上位機(jī)監(jiān)控及數(shù)據(jù)分析處理模塊和基于CodeSys的輸出信息函數(shù)庫(kù)三大部分組成。遠(yuǎn)程監(jiān)控系統(tǒng)結(jié)構(gòu)如圖1所示。
上位機(jī)與被監(jiān)控設(shè)備直接采用UDP協(xié)議進(jìn)行通信,以減少對(duì)系統(tǒng)資源的消耗,同時(shí)提高處理的速度。被監(jiān)控目標(biāo)系統(tǒng)循環(huán)偵聽(tīng)請(qǐng)求,一旦接收到上位機(jī)發(fā)送過(guò)來(lái)的監(jiān)控請(qǐng)求即以固定頻率收集信息并發(fā)送,如果接收到其他控制請(qǐng)求則進(jìn)行其他操作。
圖1 遠(yuǎn)程監(jiān)控系統(tǒng)結(jié)構(gòu)圖
Vx Wor ks系統(tǒng)中通過(guò)啟動(dòng)數(shù)據(jù)采集發(fā)送任務(wù)(TInf Send)及PLC信息采集任務(wù)(Get Log Data)實(shí)現(xiàn)全部信息的收集發(fā)送工作。主要任務(wù)包括:任務(wù)信息采集、CPU及內(nèi)存使用信息采集、系統(tǒng)異常處理、程序計(jì)數(shù)器計(jì)數(shù)值采集、PLC應(yīng)用程序輸出信息采集、信息發(fā)送。數(shù)據(jù)采集發(fā)送主程序流程見(jiàn)圖2。
1.2.1 系統(tǒng)任務(wù)信息
Vx Works操作系統(tǒng)函數(shù)庫(kù)提供了taskInfo庫(kù)函數(shù)用于用戶獲取所有任務(wù)的信息,其中主要的信息包括:任務(wù)ID、任務(wù)名稱、入口地址、優(yōu)先級(jí)、當(dāng)前狀態(tài)、堆棧值等。系統(tǒng)是根據(jù)可以唯一識(shí)別任務(wù)的ID號(hào)來(lái)檢索任務(wù)相關(guān)信息的,通過(guò)函數(shù)taskId List Get()可以獲取到當(dāng)前系統(tǒng)運(yùn)行的所有任務(wù)的ID,同時(shí)系統(tǒng)提供根據(jù)ID檢索任務(wù)信息的函數(shù)taskInfo Get(),獲取的信息以TASK_DESC結(jié)構(gòu)體格式存儲(chǔ)[3],提取其中有用的信息存于構(gòu)建的TASK_INFO結(jié)構(gòu)體中,打包成發(fā)送數(shù)據(jù)包的格式,實(shí)現(xiàn)了任務(wù)信息的采集。任務(wù)信息數(shù)據(jù)結(jié)構(gòu)如下所示:
typedef struct/*TASK_INFO-任務(wù)結(jié)構(gòu)體 */
{
int td_id;/* 任務(wù)ID*/
Char td_na me[12];/* 任務(wù)名稱 */
int td_priority;/* 優(yōu)先級(jí) */
int td_status;/* 任務(wù)當(dāng)前狀態(tài) */
int td_stack Size;/* 堆棧大小 */
int td_stack Current;/* 當(dāng)前堆棧大小 */
int td_error Status;/*任務(wù)錯(cuò)誤狀態(tài) */
}TASK_INFO;
圖2 數(shù)據(jù)采集發(fā)送主程序流程圖
1.2.2 資源信息
系統(tǒng)資源包括CPU資源和內(nèi)存資源,Vx Works提供的系統(tǒng)工具直接將這些信息定位到文件或指定IO輸出。這里通過(guò)構(gòu)建函數(shù)截取CPU資源的信息,并且通過(guò)修改系統(tǒng)函數(shù)直接將內(nèi)存使用信息定位到指定的內(nèi)存區(qū)域。
Vx Works提供了spy Lib庫(kù)函數(shù)用于監(jiān)控CPU的使用情況,spy利用輔助時(shí)鐘的中斷服務(wù)程序,并且為每個(gè)任務(wù)維護(hù)一個(gè)計(jì)數(shù)器,這樣在特定的時(shí)間周期內(nèi)即可統(tǒng)計(jì)出每個(gè)任務(wù)的CPU占用率。在庫(kù)的源程序中提供了spy Report Co mmon(FUNCPTR print-Rtn)用于系統(tǒng)工具(Shell等)獲取CPU信息,這里通過(guò)構(gòu)建print Rtn函數(shù)[4],直接將信息格式輸出到指定的內(nèi)存區(qū)域,相關(guān)函數(shù)代碼如下所示:
Void spy Ptn Func(const char*fmt Ptn)
{
va_list va1;
va_start(va1,f mt Pt n);
/*Cpu Dt Buf存儲(chǔ)CPU信息的全局變量*/
vsprintf(Cpu Dt Buf,f mt Pt n,va1);
va_end;
}
Vx Wor ks對(duì)內(nèi)存信息進(jìn)行統(tǒng)計(jì),系統(tǒng)提供的memshow()函數(shù)直接將信息定位標(biāo)準(zhǔn)輸出,目前的辦法一般都是將其定位到文件再?gòu)闹凶x取。本文通過(guò)重新構(gòu)建函數(shù)庫(kù),然后獲取CPU信息的辦法可以將信息定位到指定的區(qū)域,主要函數(shù)代碼如下:
STATUS jbl_mem Part Show(PART_ID part Id ,int type ,F(xiàn)UNCPTR print Pt n)
{
Int nu mBlocks;
Unsigned total Bytes=0;
Unsigned biggest words=0;
...
/* 調(diào)用系統(tǒng)函數(shù)獲取總大小及內(nèi)存塊參數(shù) */
If((total Bytes= mem Prat Available(patr Id,&biggest Words,type))== ERROR)
{...;
}...
nu m Blocks=dll Count(&part Id->free List);
...
/* 格式化輸出到指定位置 */
If(nu m Blocks!=0)
{
(* print Ptn)("free%10u%9u%10u%10u\n",total Bytes,nu m Blocks,total Bytes/nu m Blocks,2*biggest Words);
}...
}
1.2.3 PLC應(yīng)用程序信息
以Vx Works加CodeSys模式構(gòu)建的軟PLC系統(tǒng),在脫離在線編程模式時(shí)很難獲取客戶運(yùn)行的PLC程序相關(guān)信息,因此在程序中安插信息輸出函數(shù),使PLC程序運(yùn)行到指定位置時(shí)如果滿足輸出要求即輸出一條消息,這樣就能像在C語(yǔ)言中加printf函數(shù)一樣獲取到程序不同位置的信息[5]。本設(shè)計(jì)中構(gòu)建基于ST語(yǔ)言的PLC函數(shù)庫(kù)、Util_LogInfo()函數(shù)和Util_Log Wr n()函數(shù),其用法如以下ST代碼所示:
(* 變量定義 *)
PROGRA M PLC_PRG
VAR
...
Log Msg:STRING:='Rd Data is:';
Log Msg2:STRING:='Gd Su m2- Gd Su m =';
END_VAR
(* 程序?qū)嵗?*)
...
My_Log Msg:= CONCAT(Log Msg,DINT_TO_STRING(Gd-Su m));
Util_LogInf o(My_Log Msg);
My_Log Msg2:= CONCAT(Log Msg2,DINT_TO_STRING(Gd Su m - Gd Su m2));
Util_LogInf o(My_Log Msg2);
…
底層基于Vx Wor ks消息機(jī)制,接口函數(shù)定義為:jbl_Log Msg(char*f mt,int ar g1,...,int ar g6)。CodeSys通過(guò)RUNTI ME SYSTEM調(diào)用此接口函數(shù),系統(tǒng)同時(shí)開(kāi)辟任務(wù)Get Log Data用于獲取來(lái)自PLC應(yīng)用程序的輸出信息,并且將其定向到指定的內(nèi)存區(qū)域和記錄到日志文件里面。輸出信息格式定義見(jiàn)表1。
表1 PLC應(yīng)用程序的輸出信息格式
1.2.4 信息發(fā)送
設(shè)計(jì)中對(duì)每幀網(wǎng)絡(luò)包的數(shù)據(jù)區(qū)進(jìn)行重新定義,這就保證了上位機(jī)對(duì)數(shù)據(jù)進(jìn)行準(zhǔn)確的解析,數(shù)據(jù)包格式見(jiàn)表2。
表2 數(shù)據(jù)包格式
基于Windows開(kāi)發(fā)上位機(jī)程序,項(xiàng)目中已經(jīng)搭建了基于Vx Works加CodeSys的軟PLC系統(tǒng),在系統(tǒng)初始化階段啟動(dòng)信息采集任務(wù),并且運(yùn)行上位機(jī)程序監(jiān)控到如圖3所示數(shù)據(jù)。
Vx Works提供一個(gè)異常處理句柄(handler)和一個(gè)名為t Exc Task的任務(wù)來(lái)處理異常。異常出現(xiàn)后任務(wù)將變?yōu)閽炱馉顟B(tài)(suspend),并且不能轉(zhuǎn)變?yōu)槠渌麪顟B(tài),通過(guò)任務(wù)信息窗口STAT可以準(zhǔn)確觀測(cè)到任務(wù)的狀態(tài),選擇相應(yīng)任務(wù),通過(guò)點(diǎn)擊左側(cè)按鈕欄對(duì)任務(wù)進(jìn)行掛起、恢復(fù)、刪除處理。
圖3 上位機(jī)監(jiān)控主界面
程序非法執(zhí)行或訪問(wèn)內(nèi)存越界等都會(huì)發(fā)生任務(wù)異常,通過(guò)異常處理函數(shù)打印輸出的信息反映了當(dāng)前異常的具體信息。
運(yùn)行一段時(shí)間,點(diǎn)擊繪制曲線按鈕可得到free內(nèi)存的柱狀圖(如圖4所示)和其中TInf Send任務(wù)CPU占用率曲線圖(如圖5所示)。由圖5可直觀看到一段時(shí)間內(nèi)CPU占用率為8%,所以此時(shí)可以直觀觀測(cè)系統(tǒng)運(yùn)行情況。
圖4 內(nèi)存使用信息柱狀圖
圖5 CPU使用信息圖(以采集任務(wù)為例)
通過(guò)測(cè)試,系統(tǒng)在開(kāi)發(fā)和運(yùn)行階段通過(guò)網(wǎng)線簡(jiǎn)單連接目標(biāo)板和上位機(jī)即可準(zhǔn)確及時(shí)獲取到軟PLC系統(tǒng)運(yùn)行的各項(xiàng)參數(shù),同時(shí)可以對(duì)數(shù)據(jù)進(jìn)行分析,方便技術(shù)人員及時(shí)排查故障和優(yōu)化應(yīng)用程序,具有一定的使用價(jià)值。下一步將進(jìn)一步優(yōu)化故障處理,增加可控項(xiàng)目,使系統(tǒng)實(shí)用性更強(qiáng)。
[1] 李峰,應(yīng)宏.利用TCP/IP實(shí)現(xiàn) Windows與Vx works的通信[J].微計(jì)算機(jī)信息,2006(5):80-82.
[2] 王麗麗,康存鋒,馬春敏,等.基于codesys的嵌入式軟PLC系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代制造工程,2007(3):54-56.
[3] 汪毅,顧曉霞,奚宏明.Vx Works嵌入式系統(tǒng)遠(yuǎn)程監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].科學(xué)技術(shù)與工程,2011(27):6747-6755.
[4] Bollerslev T.PLC and PSTN based expert system for long-distance fault diagnosis of can-body resistance welding machine[J].Review of Economics and Statistics,2007,72:498-505.
[5] Mohammad Abu Zalata,Tariq M Younes,Mohammad A K Alia.Development of equivalent virtual instruments to PLC functions and net works[J].Journal of Soft ware Engineering and Applications,2011(3):172-180.