技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國(guó)傳動(dòng)網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 上位監(jiān)控軟件在線擴(kuò)展功能的開(kāi)發(fā)

上位監(jiān)控軟件在線擴(kuò)展功能的開(kāi)發(fā)

時(shí)間:2008-12-03 13:45:00來(lái)源:ronggang

導(dǎo)語(yǔ):?本文介紹了一種通過(guò)基于動(dòng)態(tài)鏈接庫(kù)的插件技術(shù)實(shí)現(xiàn)監(jiān)控程序的在線功能擴(kuò)展的方法。通過(guò)西門子的PRODAVE軟件和VC++實(shí)現(xiàn)了對(duì)S7-300PLC的監(jiān)控,從而檢驗(yàn)了方案的可行性
摘 要:本文介紹了一種通過(guò)基于動(dòng)態(tài)鏈接庫(kù)的插件技術(shù)實(shí)現(xiàn)監(jiān)控程序的在線功能擴(kuò)展的方法。通過(guò)西門子的PRODAVE軟件和VC++實(shí)現(xiàn)了對(duì)S7-300PLC的監(jiān)控,從而檢驗(yàn)了方案的可行性。 關(guān)鍵詞:動(dòng)態(tài)鏈接庫(kù)、插件、PRODAVE、VC++ 1概述   在過(guò)程控制系統(tǒng)中,上位監(jiān)控程序已經(jīng)成了系統(tǒng)不可缺少的組成部分。通過(guò)上位監(jiān)控程序?qū)ο到y(tǒng)進(jìn)行控制可以使操作的難度和復(fù)雜度都大大降低。隨著計(jì)算機(jī)功能的日益增強(qiáng),監(jiān)控程序能完成的功能也越來(lái)越多,在有些情況下可以讓上位機(jī)協(xié)助下位機(jī)完成控制功能。   目前,上位機(jī)程序設(shè)計(jì)主要有兩種方式,其一是采用專門的組態(tài)軟件,如WinCC、組態(tài)王等;另外就是通過(guò)編程語(yǔ)言自行開(kāi)發(fā)。第一種方法操作簡(jiǎn)單、效率高、對(duì)開(kāi)發(fā)人員的要求相對(duì)較低,但成本較高;第二種方法相對(duì)要復(fù)雜,要求開(kāi)發(fā)者具有較高的編程水平,開(kāi)發(fā)周期長(zhǎng),但與第一種方法比具有靈活、成本低的優(yōu)點(diǎn)。對(duì)于規(guī)模較小的項(xiàng)目出于降低成本的考慮可以采用第二種方法進(jìn)行開(kāi)發(fā)。采用第二種方法就需要解決一些額外的技術(shù)難點(diǎn),比如系統(tǒng)已經(jīng)投入運(yùn)行后可能會(huì)由于生產(chǎn)規(guī)模的擴(kuò)大等原因需要增加額外的設(shè)備或模塊,這種情況下就要求監(jiān)控程序也要做出相應(yīng)的改動(dòng)。這時(shí)采用第二種方法開(kāi)發(fā)的程序一般就會(huì)遇到修改工作量大、需要停機(jī)升級(jí)程序的問(wèn)題。特別對(duì)于后一問(wèn)題,在上位機(jī)協(xié)助下位機(jī)完成控制功能時(shí)是應(yīng)該盡量避免出現(xiàn)的。本文就是針對(duì)這一問(wèn)題提出的基于插件技術(shù)的解決方案。 2插件背景知 識(shí)   2.1插件原理   插件是一種遵循一定規(guī)范的應(yīng)用程序接口的程序,可以理解為一個(gè)插件就是一種新功能。實(shí)現(xiàn)插件功能對(duì)插件容器和插件本身都要進(jìn)行考慮。這里首先要解決的問(wèn)題就是插件容器不知道將來(lái)要安裝的插件要實(shí)現(xiàn)什么功能,而插件本身可能需要知道一些插件容器的信息來(lái)更好的實(shí)現(xiàn)與容器之間的結(jié)合?;谶@種考慮,就需要在它們之間定義具體的接口(一般采用接口函數(shù)),接口的實(shí)際功能完全依賴于插件本身,如圖1所示。 [align=center] 圖1 插件結(jié)構(gòu)圖[/align]   采用插件的主要目的就是在不改動(dòng)監(jiān)控程序(插件容器)的前提下擴(kuò)展監(jiān)控程序的功能,因此,應(yīng)該在程序設(shè)計(jì)之初就要考慮接口函數(shù)的參數(shù)和返回類型。另外,由于插件一般是在程序運(yùn)行過(guò)程中安裝的,那么在下一次程序啟動(dòng)的時(shí)候希望程序能自動(dòng)的添加已經(jīng)安裝過(guò)的插件,因此要使監(jiān)控程序?qū)σ呀?jīng)安裝的插件進(jìn)行統(tǒng)一管理。   2.2動(dòng)態(tài)鏈接庫(kù)(DLL)   DLL是建立在客戶/服務(wù)器通信的概念上,包含若干函數(shù)、類或資源的庫(kù)文件。函數(shù)和數(shù)據(jù)被存儲(chǔ)在一個(gè)DLL(服務(wù)器)上并由一個(gè)或多個(gè)客戶導(dǎo)出而使用,這些客戶可以是應(yīng)用程序或者是其它的DLL。   微軟的Visual C++支持三種DLL,它們分別是Non-MFC DLL(非MFC動(dòng)態(tài)庫(kù))、Regular DLL(常規(guī)DLL)、Extension DLL(擴(kuò)展DLL)。Non-MFC DLL指的是不用MFC(微軟基礎(chǔ)類)的類庫(kù)結(jié)構(gòu),直接用C語(yǔ)言寫的DLL,其導(dǎo)出的函數(shù)是標(biāo)準(zhǔn)的C接口,能被非MFC或MFC編寫的應(yīng)用程序所調(diào)用。Regular DLL和下述的Extension DLL一樣,是用MFC類庫(kù)編寫的,它的一個(gè)明顯的特點(diǎn)是在源文件里有一個(gè)繼承CWinApp的類(注意:此類DLL雖然從CWinApp派生,但沒(méi)有消息循環(huán),被導(dǎo)出的函數(shù)是C函數(shù)、C++類或者C++成員函數(shù)),調(diào)用常規(guī)DLL的應(yīng)用程序不必是MFC應(yīng)用程序,只要是能調(diào)用類C函數(shù)的應(yīng)用程序就可以,它們可以是在Visual C++、Dephi、Visual Basic、Borland C等編譯環(huán)境下利用DLL開(kāi)發(fā)的應(yīng)用程序。   常規(guī)DLL又可細(xì)分成靜態(tài)鏈接到MFC和動(dòng)態(tài)鏈接到MFC上的。與常規(guī)DLL相比,使用擴(kuò)展DLL用于導(dǎo)出增強(qiáng)MFC基礎(chǔ)類的函數(shù)或子類,用這種類型的動(dòng)態(tài)鏈接庫(kù),可以用來(lái)輸出一個(gè)從MFC所繼承下來(lái)的類。   擴(kuò)展DLL是使用MFC的動(dòng)態(tài)鏈接版本所創(chuàng)建的,并且它只被用MFC類庫(kù)所編寫的應(yīng)用程序所調(diào)用。擴(kuò)展DLL 和常規(guī)DLL不一樣,它沒(méi)有一個(gè)從CWinApp繼承而來(lái)的類的對(duì)象,所以,開(kāi)發(fā)人員必須在DLL中的DllMain函數(shù)添加初始化代碼和結(jié)束代碼。   2.3插件DLL特性   插件DLL的最大特點(diǎn)就是它具有固定的結(jié)構(gòu)。作為容器的監(jiān)控程序一旦發(fā)布,插件的結(jié)構(gòu)也就不能再改變了。因此良好的插件結(jié)構(gòu)設(shè)計(jì)對(duì)將來(lái)的功能擴(kuò)展來(lái)說(shuō)至關(guān)重要。   為了提高開(kāi)發(fā)效率,選用支持MFC的DLL是一個(gè)不錯(cuò)的選擇。需要注意的是如果要從DLL導(dǎo)出繼承自MFC的類的對(duì)象最好使用擴(kuò)展DLL,否則可能導(dǎo)致DLL中的對(duì)象和導(dǎo)出的對(duì)象存在差異。 3示例編程   以下示例簡(jiǎn)單的實(shí)現(xiàn)了對(duì)監(jiān)控畫面的擴(kuò)展。監(jiān)控主程序只對(duì)一個(gè)PLC進(jìn)行監(jiān)控,通過(guò)后續(xù)的插件可以在不影響主程序的前提下實(shí)現(xiàn)對(duì)更多PLC的監(jiān)控(這里只擴(kuò)展了一臺(tái))。   3.1 插件部分   在VC 6.0的AppWizard中選擇”MFC AppWizard(dll)”,并在下一步選擇” MFC Extension DLL”(因?yàn)樵诖死幸獙?dǎo)出繼承自MFC的類的對(duì)象)。在資源中插入一對(duì)話框模板,設(shè)置屬性為”Child”、”Thin”、”Title bar”,并為它創(chuàng)建一個(gè)以CPropertyPage為基類的新類CPage。接下來(lái)要做的就是進(jìn)行數(shù)據(jù)采集和監(jiān)控界面的設(shè)計(jì)。PRODAVE是用于PC與S7系列PLC之間的數(shù)據(jù)鏈接通信的工具箱。通過(guò)PC的MPI通信處理器,例如CP5511、CP5611,或PC/MPI適配器(PC-Adaptor),可以方便地在PLC與PC間建立數(shù)據(jù)鏈接[3]。值得注意的是,由于使用了MFC擴(kuò)展DLL,所以必須動(dòng)態(tài)加載PRODAVE的DLL文件。方法如下:  ?、?定義函數(shù)指針   typedef int (WINAPI *Ploadtool)(char,char *,adr_table_type *);  ?、?加載DLL并獲得函數(shù)指針   hProdave=LoadLibrary("W95_s7.dll");   Ploadtool loadtool=(Ploadtool)GetProcAddress(hProdave,"load_tool");   Punloadtool unloadtool=(Punloadtool)GetProcAddress(hProdave,"unload_tool");  ?、?調(diào)用函數(shù)   loadtool(1, "S7ONLINE", &adr_table);   完成插件的具體功能后還需要實(shí)現(xiàn)導(dǎo)出函數(shù):   void showprop(void**dlg)   { *dlg=new CPdlg;  ?。?   3.2 監(jiān)控程序   因?yàn)椴寮﨑LL導(dǎo)出的是一個(gè)屬性頁(yè),所以可以在監(jiān)控程序中添加此屬性頁(yè)。結(jié)合前文所述,監(jiān)控程序所要實(shí)現(xiàn)的功能主要有主體監(jiān)控功能、加載插件DLL、啟動(dòng)時(shí)自動(dòng)加載插件。  ?、?主體監(jiān)控功能   這里實(shí)現(xiàn)了監(jiān)控程序的大部分功能,如主監(jiān)控畫面的設(shè)計(jì)等,但此處不是本文所要論述的重點(diǎn)。  ?、?加載插件DLL   此功能在函數(shù)BOOL CTestdllDlg::CreateObjectFromPath CreatePlugPage(CString name)中實(shí)現(xiàn):   BOOL CTestdllDlg::CreatePlugPage(CString name)   {BOOL brt=FALSE;   PAGE temp;   if(name){   temp.hdll=LoadLibrary(name);   if(temp.hdll)  ?。?fun func=(fun)GetProcAddress(temp.hdll,"showprop");   if(func)  ?。?func((void**)&temp.page);   s.AddPage(temp.page);   brt= -1!=pagelist.Add(temp);  ?。?   }  ?。?   if(!brt)   FreeLibrary(temp.hdll);   return brt;   }   創(chuàng)建目錄并保存DLL文件:   CreateDirectory(m_strPlugFile, NULL); // m_strPlugFile為指定目錄名   if (!CopyFile(filename, m_strPlugFile, TRUE)) // filename為插件DLL文件名  ?。?return;  ?。?  ?、?啟動(dòng)時(shí)自動(dòng)加載插件   此功能在函數(shù)BOOL CTestdllDlg::CreateObjectFromPath(LPCTSTR szPath)中實(shí)現(xiàn):   BOOL CTestdllDlg::CreateObjectFromPath(LPCTSTR szPath)  ?。?CString strPath = szPath;   CString strFindFile = szPath;   strFindFile += "\\*.dll";   WIN32_FIND_DATA wfd;   HANDLE hf = FindFirstFile(strFindFile, &wfd);   if (INVALID_HANDLE_VALUE != hf){   CreatePlugPage(strPath + "\\" + wfd.cFileName);   while (FindNextFile(hf, &wfd)){   CreatePlugPage(strPath + "\\" + wfd.cFileName);  ?。?   FindClose(hf);  ?。?   return TRUE;  ?。? 4總結(jié)   很多文獻(xiàn)資料都曾介紹過(guò)監(jiān)控軟件的開(kāi)發(fā)[4],但卻很少涉及成熟的開(kāi)發(fā)軟件所具有的在線修改功能,這就限制了監(jiān)控軟件的應(yīng)用范圍。本文中提出的方法正是對(duì)這一不足進(jìn)行的必要補(bǔ)充。示例程序成功實(shí)現(xiàn)了在主監(jiān)控程序的基礎(chǔ)上通過(guò)插件的方法實(shí)現(xiàn)對(duì)更多PLC的監(jiān)控,說(shuō)明了監(jiān)控程序是如何應(yīng)對(duì)生產(chǎn)設(shè)備增加這一情況的。采用這種方法不僅能成功解決自主開(kāi)發(fā)的監(jiān)控程序需要停機(jī)進(jìn)行功能擴(kuò)展的問(wèn)題,而且不需要對(duì)主監(jiān)控程序進(jìn)行任何改動(dòng),從而大大降低了工作量。 參考文獻(xiàn):   [1] 王艷. 用VC制作動(dòng)態(tài)連接庫(kù). 北京:微計(jì)算機(jī)信息. 2003.5: 70~71.   [2] 廖常初. S7-300/400 PLC應(yīng)用技術(shù). 北京: 機(jī)械工業(yè)出版社.2005.   [3] 姜建芳、蘇少鈺等.西門子S7-300系列PLC與PC機(jī)通信實(shí)現(xiàn)的研究.制造業(yè)自動(dòng)化.2003.1:52~54.   [4] 王亞民、陳青等.組態(tài)軟件設(shè)計(jì)與開(kāi)發(fā).西安:西安電子科技大學(xué)出版社.2003.   [5] MSDN Library online. Microsoft corporation.

標(biāo)簽:

點(diǎn)贊

分享到:

上一篇:IGBT驅(qū)動(dòng)器短路保護(hù)功能的測(cè)試

下一篇:微能WIN-V63矢量控制變頻器在...

中國(guó)傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來(lái)源:中國(guó)傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國(guó)傳動(dòng)網(wǎng)(www.treenowplaneincome.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“中國(guó)傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡(jiǎn)介|會(huì)員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見(jiàn)反饋|sitemap

中國(guó)傳動(dòng)網(wǎng)-工業(yè)自動(dòng)化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺(tái)

網(wǎng)站客服服務(wù)咨詢采購(gòu)咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號(hào) | 營(yíng)業(yè)執(zhí)照證書 | 不良信息舉報(bào)中心 | 粵公網(wǎng)安備 44030402000946號(hào)