技術(shù)頻道

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

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

時間:2008-12-03 13:45:00來源:ronggang

導(dǎo)語:?本文介紹了一種通過基于動態(tài)鏈接庫的插件技術(shù)實(shí)現(xiàn)監(jiān)控程序的在線功能擴(kuò)展的方法。通過西門子的PRODAVE軟件和VC++實(shí)現(xiàn)了對S7-300PLC的監(jiān)控,從而檢驗(yàn)了方案的可行性
摘 要:本文介紹了一種通過基于動態(tài)鏈接庫的插件技術(shù)實(shí)現(xiàn)監(jiān)控程序的在線功能擴(kuò)展的方法。通過西門子的PRODAVE軟件和VC++實(shí)現(xiàn)了對S7-300PLC的監(jiān)控,從而檢驗(yàn)了方案的可行性。 關(guān)鍵詞:動態(tài)鏈接庫、插件、PRODAVE、VC++ 1概述   在過程控制系統(tǒng)中,上位監(jiān)控程序已經(jīng)成了系統(tǒng)不可缺少的組成部分。通過上位監(jiān)控程序?qū)ο到y(tǒng)進(jìn)行控制可以使操作的難度和復(fù)雜度都大大降低。隨著計(jì)算機(jī)功能的日益增強(qiáng),監(jiān)控程序能完成的功能也越來越多,在有些情況下可以讓上位機(jī)協(xié)助下位機(jī)完成控制功能。   目前,上位機(jī)程序設(shè)計(jì)主要有兩種方式,其一是采用專門的組態(tài)軟件,如WinCC、組態(tài)王等;另外就是通過編程語言自行開發(fā)。第一種方法操作簡單、效率高、對開發(fā)人員的要求相對較低,但成本較高;第二種方法相對要復(fù)雜,要求開發(fā)者具有較高的編程水平,開發(fā)周期長,但與第一種方法比具有靈活、成本低的優(yōu)點(diǎn)。對于規(guī)模較小的項(xiàng)目出于降低成本的考慮可以采用第二種方法進(jìn)行開發(fā)。采用第二種方法就需要解決一些額外的技術(shù)難點(diǎn),比如系統(tǒng)已經(jīng)投入運(yùn)行后可能會由于生產(chǎn)規(guī)模的擴(kuò)大等原因需要增加額外的設(shè)備或模塊,這種情況下就要求監(jiān)控程序也要做出相應(yīng)的改動。這時采用第二種方法開發(fā)的程序一般就會遇到修改工作量大、需要停機(jī)升級程序的問題。特別對于后一問題,在上位機(jī)協(xié)助下位機(jī)完成控制功能時是應(yīng)該盡量避免出現(xiàn)的。本文就是針對這一問題提出的基于插件技術(shù)的解決方案。 2插件背景知 識   2.1插件原理   插件是一種遵循一定規(guī)范的應(yīng)用程序接口的程序,可以理解為一個插件就是一種新功能。實(shí)現(xiàn)插件功能對插件容器和插件本身都要進(jìn)行考慮。這里首先要解決的問題就是插件容器不知道將來要安裝的插件要實(shí)現(xiàn)什么功能,而插件本身可能需要知道一些插件容器的信息來更好的實(shí)現(xiàn)與容器之間的結(jié)合?;谶@種考慮,就需要在它們之間定義具體的接口(一般采用接口函數(shù)),接口的實(shí)際功能完全依賴于插件本身,如圖1所示。 [align=center] 圖1 插件結(jié)構(gòu)圖[/align]   采用插件的主要目的就是在不改動監(jiān)控程序(插件容器)的前提下擴(kuò)展監(jiān)控程序的功能,因此,應(yīng)該在程序設(shè)計(jì)之初就要考慮接口函數(shù)的參數(shù)和返回類型。另外,由于插件一般是在程序運(yùn)行過程中安裝的,那么在下一次程序啟動的時候希望程序能自動的添加已經(jīng)安裝過的插件,因此要使監(jiān)控程序?qū)σ呀?jīng)安裝的插件進(jìn)行統(tǒng)一管理。   2.2動態(tài)鏈接庫(DLL)   DLL是建立在客戶/服務(wù)器通信的概念上,包含若干函數(shù)、類或資源的庫文件。函數(shù)和數(shù)據(jù)被存儲在一個DLL(服務(wù)器)上并由一個或多個客戶導(dǎo)出而使用,這些客戶可以是應(yīng)用程序或者是其它的DLL。   微軟的Visual C++支持三種DLL,它們分別是Non-MFC DLL(非MFC動態(tài)庫)、Regular DLL(常規(guī)DLL)、Extension DLL(擴(kuò)展DLL)。Non-MFC DLL指的是不用MFC(微軟基礎(chǔ)類)的類庫結(jié)構(gòu),直接用C語言寫的DLL,其導(dǎo)出的函數(shù)是標(biāo)準(zhǔn)的C接口,能被非MFC或MFC編寫的應(yīng)用程序所調(diào)用。Regular DLL和下述的Extension DLL一樣,是用MFC類庫編寫的,它的一個明顯的特點(diǎn)是在源文件里有一個繼承CWinApp的類(注意:此類DLL雖然從CWinApp派生,但沒有消息循環(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開發(fā)的應(yīng)用程序。   常規(guī)DLL又可細(xì)分成靜態(tài)鏈接到MFC和動態(tài)鏈接到MFC上的。與常規(guī)DLL相比,使用擴(kuò)展DLL用于導(dǎo)出增強(qiáng)MFC基礎(chǔ)類的函數(shù)或子類,用這種類型的動態(tài)鏈接庫,可以用來輸出一個從MFC所繼承下來的類。   擴(kuò)展DLL是使用MFC的動態(tài)鏈接版本所創(chuàng)建的,并且它只被用MFC類庫所編寫的應(yīng)用程序所調(diào)用。擴(kuò)展DLL 和常規(guī)DLL不一樣,它沒有一個從CWinApp繼承而來的類的對象,所以,開發(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ì)對將來的功能擴(kuò)展來說至關(guān)重要。   為了提高開發(fā)效率,選用支持MFC的DLL是一個不錯的選擇。需要注意的是如果要從DLL導(dǎo)出繼承自MFC的類的對象最好使用擴(kuò)展DLL,否則可能導(dǎo)致DLL中的對象和導(dǎo)出的對象存在差異。 3示例編程   以下示例簡單的實(shí)現(xiàn)了對監(jiān)控畫面的擴(kuò)展。監(jiān)控主程序只對一個PLC進(jìn)行監(jiān)控,通過后續(xù)的插件可以在不影響主程序的前提下實(shí)現(xiàn)對更多PLC的監(jiān)控(這里只擴(kuò)展了一臺)。   3.1 插件部分   在VC 6.0的AppWizard中選擇”MFC AppWizard(dll)”,并在下一步選擇” MFC Extension DLL”(因?yàn)樵诖死幸獙?dǎo)出繼承自MFC的類的對象)。在資源中插入一對話框模板,設(shè)置屬性為”Child”、”Thin”、”Title bar”,并為它創(chuàng)建一個以CPropertyPage為基類的新類CPage。接下來要做的就是進(jìn)行數(shù)據(jù)采集和監(jiān)控界面的設(shè)計(jì)。PRODAVE是用于PC與S7系列PLC之間的數(shù)據(jù)鏈接通信的工具箱。通過PC的MPI通信處理器,例如CP5511、CP5611,或PC/MPI適配器(PC-Adaptor),可以方便地在PLC與PC間建立數(shù)據(jù)鏈接[3]。值得注意的是,由于使用了MFC擴(kuò)展DLL,所以必須動態(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)出的是一個屬性頁,所以可以在監(jiān)控程序中添加此屬性頁。結(jié)合前文所述,監(jiān)控程序所要實(shí)現(xiàn)的功能主要有主體監(jiān)控功能、加載插件DLL、啟動時自動加載插件。  ?、?主體監(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)  ?。鸅OOL 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;  ?。?   ③ 啟動時自動加載插件   此功能在函數(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)資料都曾介紹過監(jiān)控軟件的開發(fā)[4],但卻很少涉及成熟的開發(fā)軟件所具有的在線修改功能,這就限制了監(jiān)控軟件的應(yīng)用范圍。本文中提出的方法正是對這一不足進(jìn)行的必要補(bǔ)充。示例程序成功實(shí)現(xiàn)了在主監(jiān)控程序的基礎(chǔ)上通過插件的方法實(shí)現(xiàn)對更多PLC的監(jiān)控,說明了監(jiān)控程序是如何應(yīng)對生產(chǎn)設(shè)備增加這一情況的。采用這種方法不僅能成功解決自主開發(fā)的監(jiān)控程序需要停機(jī)進(jìn)行功能擴(kuò)展的問題,而且不需要對主監(jiān)控程序進(jìn)行任何改動,從而大大降低了工作量。 參考文獻(xiàn):   [1] 王艷. 用VC制作動態(tài)連接庫. 北京:微計(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è)自動化.2003.1:52~54.   [4] 王亞民、陳青等.組態(tài)軟件設(shè)計(jì)與開發(fā).西安:西安電子科技大學(xué)出版社.2003.   [5] MSDN Library online. Microsoft corporation.

標(biāo)簽:

點(diǎn)贊

分享到:

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

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

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

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

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

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

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

Chuandong.com Copyright ?2005 - 2025 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權(quán)所有
粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網(wǎng)安備 44030402000946號