• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于Vx Works的軟PLC 遠(yuǎn)程監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)?

    2013-05-15 08:10:40楊杰軍陳雄姿
    機(jī)械工程與自動(dòng)化 2013年3期
    關(guān)鍵詞:函數(shù)庫(kù)上位應(yīng)用程序

    詹 俊,龍 辛,黃 波,楊杰軍,陳雄姿

    (1.湘潭大學(xué) 信息工程學(xué)院 電氣工程系,湖南 湘潭 411105;2.湘電風(fēng)能有限公司,湖南 湘潭411105;3.長(zhǎng)沙金博聯(lián)信息技術(shù)有限公司,湖南 長(zhǎng)沙 410000)

    0 引言

    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ā)周期。

    1 遠(yuǎn)程監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    1.1 系統(tǒng)整體結(jié)構(gòu)設(shè)計(jì)

    遠(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 功能模塊設(shè)計(jì)

    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ù)包格式

    2 實(shí)時(shí)系統(tǒng)性能分析和故障排查

    基于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ù)為例)

    3 結(jié)束語(yǔ)

    通過(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.

    猜你喜歡
    函數(shù)庫(kù)上位應(yīng)用程序
    用于優(yōu)化雷達(dá)信號(hào)處理的VSIPL函數(shù)庫(kù)
    基于Python的開(kāi)源GIS應(yīng)用開(kāi)發(fā)
    Scratch求最值和平均值
    刪除Win10中自帶的應(yīng)用程序
    基于BB60C的IQ數(shù)據(jù)采集與存儲(chǔ)系統(tǒng)設(shè)計(jì)
    特斯拉 風(fēng)云之老阿姨上位
    車(chē)迷(2018年12期)2018-07-26 00:42:22
    “三扶”齊上位 決戰(zhàn)必打贏
    基于ZigBee和VC上位機(jī)的教室智能監(jiān)測(cè)管理系統(tǒng)
    以新思路促推現(xiàn)代農(nóng)業(yè)上位
    關(guān)閉應(yīng)用程序更新提醒
    電腦迷(2012年15期)2012-04-29 17:09:47
    和平区| 县级市| 大渡口区| 通州市| 昌宁县| 南部县| 吴忠市| 盐亭县| 沙田区| 西安市| 曲靖市| 杭锦后旗| 临漳县| 临夏市| 公主岭市| 遵义市| 翼城县| 陕西省| 济南市| 山东省| 鄂尔多斯市| 谢通门县| 定襄县| 五华县| 阜阳市| 望都县| 依兰县| 泸溪县| 阳山县| 凤翔县| 那曲县| 安国市| 泸州市| 台北市| 密山市| 格尔木市| 阜南县| 扶余县| 雷州市| 铜山县| 乐昌市|