版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
精品文檔-下載后可編輯COM組件技術在現(xiàn)場總線控制系統(tǒng)-設計應用COM(ComponentObjectModel)組件技術是構造二進制兼容軟件的規(guī)范,通過它可以建立能夠相互傳輸數(shù)據的組件,其服務器-客戶機結構非常適合工控軟件應用程序的開發(fā)。由于工控軟件不僅包括PC機上的HMI(人-機界面)程序,還包括與各種基于ISA或PCI總線的數(shù)據采集卡進行數(shù)據交換的程序,這部分程序對開發(fā)人員的硬件水平要求較高,而且開發(fā)難度較大,與HMI程序是相互獨立的所以可以把工控軟件分成兩部分,即把HMI程序作為客戶機端程序,把與硬件進行數(shù)據交換的程序作為服務器端程序?;谶@種思想,本文將服務器-客戶機結構應用到現(xiàn)場總線控制系統(tǒng)的組態(tài)軟件中,著重介紹客戶機和服務器的功能及實現(xiàn)。首先介紹現(xiàn)場總線控制系統(tǒng)的組成。1系統(tǒng)組成
現(xiàn)場總線控制系統(tǒng)主要由PC機、ISA或PCI總線智能適配器、智能測控模塊、組態(tài)軟件、HMI軟件、COM服務器、用戶軟件等構成。
現(xiàn)場總線系統(tǒng)中所有信息的傳遞都是雙向的,COM服務器介于智能適配器和上位機軟件之間,負責完成數(shù)據的傳輸。上位機軟件相當于客戶機端應用軟件,它使用COM服務器提供的接口來操作適配器,對適配器進行初始化及向特定單元寫入和讀出數(shù)據。
由于在Windows保護模式下不能直接訪問存儲器,所以需要編寫VxD驅動程序將物理地址轉換成線性地址,然后COM就可以象使用DLL一樣調用VxD的函數(shù),完成對ISA或PCI總線智能適配器的操作。從測控模塊到上位機軟件自下而上的數(shù)據傳輸完成了用戶對測控模塊的監(jiān)測;而上層軟件通過COM將數(shù)據送往適配器,再由適配器送往測控模塊,實現(xiàn)了用戶對測控模塊工作參數(shù)的設置及工作狀態(tài)的管理。圖1給出了系統(tǒng)軟件結構框圖。
2組態(tài)軟件的功能
現(xiàn)場總線控制系統(tǒng)組態(tài)軟件是一套基于Windows98和Windows2000平臺(或更高版本)、用于快速構造和生成上位機監(jiān)控系統(tǒng)的組態(tài)軟件,它提供了從數(shù)據采集到數(shù)據處理、遠程控制、報警處理、報表輸出等實際工程問題的完整解決方案。它使用COM服務器提供的接口與適配器進行數(shù)據交換,是COM客戶機端的程序。
3COM組件技術
組件是完成一定功能的軟件塊,可以被其它程序使用,而且容易替換。為了使每個人編寫的組件具有可移植性,必須建立一個標準,保證其兼容性和可互換性。COM正是這樣一種標準,遵循COM規(guī)則就可以建立能夠相互交換數(shù)據的組件。
在現(xiàn)場總線控制系統(tǒng)中,COM組件服務器負責組態(tài)軟件等上位機軟件與智能適配器之間的數(shù)據傳輸,因為適配器通過CAN現(xiàn)場總線與測控模塊連接,所以對適配器的操作就是對模塊的監(jiān)測與控制。COM服務器提供的接口中有適配器初始化、模塊檢查、向模塊發(fā)送數(shù)據及讀取模塊數(shù)據等函數(shù)。下面著重介紹數(shù)據發(fā)送接收格式及如何編寫這4個有代表性的函數(shù)。
3.1適配器初始化函數(shù)
只有適配器初始化成功后,才能進行其它操作。由于在Windows保護模式下不能直接訪問適配器,COM程序需要調用VxD程序將存儲器對應的物理地址轉換成線性地址指針lpBaseAddress,這樣對適配器的操作就轉換成對以該指針為首地址的數(shù)組的操作。向這個數(shù)組的0x3F0、0x3F1和0x3F8單元分別寫入上位機節(jié)點號以及適配器與模塊間的通信波特率和適配器程序規(guī)定的命令字0xC6(表示適配器初始化),等待幾十ms后,如果適配器接收到上面的數(shù)據并做出適當?shù)姆磻?,它會將0x3F8單元清零,這就表示初始化適配器成功;如果該單元不為零,則初始化失敗。
3.2數(shù)據傳輸格式
適配器初始化成功后,就可以同它交換數(shù)據了。下面簡單說明一下發(fā)送數(shù)據和接收數(shù)據的格式。
適配器初始化得到的線性地址指針lpBaseAddress的1~5單元分別存放上位機節(jié)點號、模塊節(jié)點號、保留字、發(fā)送或接收字節(jié)長度及模塊操作的命令字。lpBaseAddress[6]~lpBaseAddress[256]存放所要發(fā)送的數(shù)據;從lpBaseAddress[0x106]單元開始存放接收到的數(shù)據。lpBaseAddress[0x3F8]存放操作適配器的命令字,適配器根據這個單元內容進行處理,如果是0xC6,則初始化適配器和模塊上的CAN控制器;如果是0xC7,則將數(shù)組里的數(shù)送給模塊上的E2PROM,模塊收到數(shù)據后根據lpBaseAddress[5]的命令字進行相應處理如果是0xB0,則按照接收到的數(shù)據配置模塊工作狀態(tài);如果是0xA5,則將此時的測量值送到適配器上,由COM程序讀出。3.3模塊檢查函數(shù)
適配器初始化成功后,還要檢查適配器與下面的測控模塊是否連接好或者是否存在組態(tài)軟件要組態(tài)的模塊,也就是要進行模塊檢查操作。模塊檢查的命令字是0xAD,向數(shù)組的1~5單元分別寫入上位機節(jié)點號、模塊節(jié)點號、保留字、發(fā)送數(shù)據長度和模塊檢查命令字0xAD,向0x3F8單元寫入0xC7(表示向適配器寫入數(shù)據),等待幾十ms后,如果0x3F8單元清零而且0x100單元被置為0xAA,表示該模塊存在而且可以通信否則,表明該模塊不存在或者硬件上有問題。
3.4寫適配器數(shù)據函數(shù)
在確定了網絡中存在哪些可通信的模塊之后,就可以向它們發(fā)送數(shù)據并進行配置。為了實現(xiàn)向適配器發(fā)送數(shù)據,總共編寫了4個函數(shù)、SendData([in]BYTESendBuf[256])、SendFinish([in]BOOLbFinish)、FinishQuery([out]BOOL*bFinish)和ReceiveResult([out]BOOL*bSendFinish)。SendData負責把一個模塊所需要發(fā)送的數(shù)據以數(shù)組的形式放到服務器的一個二維數(shù)組(Room[64][256])里,每個模塊的數(shù)據作為一行。由于向適配器發(fā)送數(shù)據后,要等待一段時間判斷模塊是否接收成功,所以在SendFinish中開啟輔助線程來發(fā)送數(shù)據并等待結果,這樣可不占用COM主程序的時間,使客戶調用接口函數(shù)后能立即返回,執(zhí)行其它操作。FinishQuery查詢數(shù)據發(fā)送是否結束。ReceiveResult彈出一個非模式對話框,顯示哪些模塊接收到數(shù)據,哪些沒有。
3.5讀適配器數(shù)據函數(shù)
除了向適配器發(fā)送數(shù)據,還可以從適配器上讀取模塊傳上來的數(shù)據。讀取數(shù)據的命令字是0xA5。實現(xiàn)該任務的函數(shù)是GetPV([in]BYTEbDesNode,[out]floatvalue[8]),個參數(shù)是模塊節(jié)點號,第二個參數(shù)是返回的測量值數(shù)組。
這里,COM是用ATL編寫的本地服務器,COM對象的線程是套間線程。接口定義了6個函數(shù),COM程序流程圖如圖2所示。
COM對象接口的函數(shù)聲明以及適配器初始化的程序如下:
COM接口定義:
interfaceINCardWork:IDispatch{[id(1),helpstring("適配器初始化函數(shù),返回值為是否成功")]HRESULTNCardInit([in]BYTEbSrcNode,[in]BYTEbIntrAdd,[in]BYTEbRate,[in]longbSegmentAdd,[out]BOOL*flag);[id(2),helpstring("將客戶端傳送的數(shù)組賦值給Room[][]")]HRESULTSendData([in]BYTESendBuf[256];[id(3),helpstring("啟動多線程")HRESULTSendFinish([in]BOOLbFinish);[id(4),helpstring("此函數(shù)返回值表示數(shù)據是否已向下位機發(fā)送完畢,同時可顯示哪些模塊未被配置,通常在此函數(shù)前先用FinishQuery([out]BOOL*bFinish)查詢發(fā)送是否完畢")]HRESULTReceiveResult([out]BOOL*bSendFinish);[id(5),helpstring("此函數(shù)返回值表示數(shù)據是否已向下位機發(fā)送完畢,"真"表示發(fā)送完畢")]HRESULTFinishQuery([out]BOOL*bFinish);[id(6),helpstring("網絡檢查,用來在發(fā)送數(shù)據前檢測是否有該節(jié)點存在")]HRESULTNetCheck([in]BYTEsour,[in]BYTEdes,[in]BYTEtype,[out]BOOL*flag);[id(7),helpstring("讀取模塊的測量值")]HRESULTGetPV([in]BYTEbDesNode,[out]floatvalue[256]);}
適配器初始化函數(shù):#include<conio.h>#include″winioctl.h″//包含其它頭文件.........STDMETHODIMPCNCardWork::NCardInit(BYTEbSrcNode,BYTEbIntrAdd,BYTEbRate,longbSegmentAdd,BOOL*flag){NCardCtrlcardctrl;//NcardCtrl類的函數(shù)調用VxD函數(shù)exbSrcNode=bSrcNode;//給上位機節(jié)點賦值exbRate=bRate;//下位機與適配器間的通信波特率BOOLtransfersign;//初始化是否成功標志DWORDdwSegmentaddress=bSegmentAdd;//適配器段地址HANDLEhDevice=NULL;//指向線性指針對句柄lpBaseAddress=(PBYTE)cardctrl.MapLinearAddress(dwSegmentaddress,0x400,hDevice);//調用VxD函數(shù),獲得指向ISA總線物理地址的線性地址指針cardctrl.UnMapLinearAddress(lpBaseAddress,hDevice);//關閉VxD//調用適配器初始化函數(shù)_outp(0x310,0x01);//打開郵箱鎖lpBaseAddress[0x3F0]=bSrcNodeNumber;//上位機節(jié)點號lpBaseAddress[0x3F1]=bRate;//波特率lpBaseAddress[0x3F8]=0xC6;//適配器初始化命令字DrvDelay(20,false);//延時20ms............//初始化后其它操作_outp(0x310,00);//關閉郵箱鎖returnS_OK;4虛擬設備驅動程序VxD是虛擬設備驅動程序(VirtualDeviceDriver)的縮寫,中間的x表示某一設備。它能夠無限制地訪問所有硬件設備、自由地檢測操作系統(tǒng)的數(shù)據結構(如描述符和頁表)以及訪問任何內存位置。
本文中,VxD將ISA總線對應的物理地址轉換成一段線性地址,供應用程序使用。VxD的開發(fā)工具是VtoolsD,轉換時用的函數(shù)為MapPhysToLinear。以下是部分程序代碼:
//定義結構體typedefstruct_MapDevRequest{PVOIDmdr_PhysicalAddress;DWORDmdr_SizeInBytes;PVOIDmdr_LinearAddress;WORDmdr_Status;}MAPDEVREQUEST,*PMAPDEVREQUEST;
#include<vtoolscp.h>//包含其它頭文件......................DWORDLadrvDevice::OnW32DeviceIoContro(PIOCTLPARAMSpDIOCParams){PMAPDEVREQUESTpRea;//自己定義的結構體switch(pDIOCParams->dioc_IOCtlCode){caseDIOC_OPEN:caseDIOC_CLOSEHANDLEL:break:caseMDR_SERVICE_MAP:pReq=*(PMAPDEVREQUEST*)pDIOCParams->dioc_InBuf;pReq->mdr_LinearAddress=MapPhysToLinear(pReq->mdr_PhysicalAddress,pReq->mdr_SizeInBytes,0);if(pReq->mdr_LinearAddress==NULL)pReq->mdr_Status=MDR_STATUS_ERROR;elsepReq->mdr_Status=MDR_STATUS_SUCCESS;breakcaseMDR_SERVICE_UNMAP:break;defaultreturnERROR_INVALID_FUNCTION;}returnDEVIOCTL_N
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學生學習態(tài)度與習慣養(yǎng)成的互動關系
- 2024小規(guī)模文化遺產保護工程施工協(xié)議書(文化傳承)2篇
- 二零二五年度智能化養(yǎng)豬場承包經營協(xié)議2篇
- 員工改正建議評語
- 應聘塑鋼型材公司簡歷
- 二零二五年度KTV親子娛樂承包經營與管理合同3篇
- 平面設計與科技創(chuàng)新打造未來感設計
- 授權委托書 范文
- 二零二五年度環(huán)保設施建設與運營合同with設施規(guī)模、運營管理及費用承擔2篇
- 清香木種植方法嫁接
- 2025年道路運輸企業(yè)客運駕駛員安全教育培訓計劃
- 2024年市特殊教育學校工作總結范文(2篇)
- LNG采購框架合同范例
- 2024版機床維護保養(yǎng)服務合同3篇
- 課題1 金屬材料 教學設計 九年級化學下冊人教版2024
- 能源崗位招聘筆試題與參考答案(某大型國企)
- 《論拒不執(zhí)行判決、裁定罪“執(zhí)行能力”之認定》
- 工業(yè)設計基礎知識單選題100道及答案解析
- 2024年貴州省公務員錄用考試《行測》真題及答案解析
- 山西省晉中市2023-2024學年高一上學期期末考試 化學 含解析
- 2024國家安全員資格考試題庫加解析答案
評論
0/150
提交評論