亚洲视频一区二区三区_国产在线拍偷自揄拍精品_日韩av在线看_日本久久久久久久久久久_精品国产区一区二区三区在线观看_国产日产欧美a一级在线_日韩亚洲在线观看_日韩久久精品电影_久久综合电影一区_2021国产精品视频_国产精品小说在线_欧美—级高清免费播放_一区二区三区高清国产_91av视频在线免费观看_一二美女精品欧洲_成人网在线免费看

  • 力控組態軟件下的設備驅動程序開發
    北京三維力控科技有限公司

    1 引言
      組態軟件設備驅動程序用于提供了連接計算機硬件的軟件接口,在裝入后成為操作系統內核的—部分,也就是說它成為操作系統的信任部分。因此,任何設備驅動程序的細小錯誤都可能引起操作系統的崩潰,要避免這樣的事情發生,只有反復測試所寫的代碼,遵循編寫驅動程序的規則。
      最簡單的方法是購買現成的驅動程序來直接處理我們的設備,但這樣的驅動程序存在連接與嵌入錯誤的風險。另外,可以通過修改各種商業通用驅動程序與許多簡單的設備打交道。如果自己編寫驅動程序的話,盡量使用某個標準的總線驅動程序或者類驅動程序,因為它們通常實現了我們所需要的大量功能。如果設備只有一個專門的用途,則為它編寫一個單一驅動程序來處理所有設備的請求可能是最簡單的解決方案。
      三維力控組態軟件提供了力控I/O驅動程序接口軟件開發工具包FIOS SDK,FIOS SDK提供了標準的開發接口,開發人員僅需要根據I/O設備的具體通信協議或驅動接口說明,填寫幾個掃描函數的實現代碼,進行必要的調試與測試,即可完成一種FIOS的開發。
      
      2 課題背景
      目前筆者接手的項目是X機場助航燈光計算機監控系統。當機場燈光實施II類運行時,其能見度在800m至400m之間,要求燈光設備可靠性高、故障少,但往往燈具在運行過程中產生故障是隨機的,其故障率達到某一個值時,將不能滿足II類運行要求[1][2]。為保證監控系統運行的穩定性和可靠性,采用雙機容錯模式與力控工業控制組態軟件相結合的方法,通過硬件冗余、軟件組態的可靠設計、Visual C++與力控組態軟件的結合,并以RS-485總線作為網絡連接線,實現分布式的數據庫配置,設計了基于力控組態環境的雙機容錯系統。開發此系統的任務之一,就是自主開發驅動程序,將自定義的通信協議寫入驅動程序之中。而三維力控組態軟件提供了I/O驅動程序接口開發工具包(FIOS SDK),因此,開發驅動的主要工作就是利用組態軟件提供的接口函數和輸入輸出類庫編寫Ioapi中的代碼,以達到I/O設備的控制要求[3]。由于此項目的開發在Visual C++ 6.0環境中進行,學習Windows WDM驅動程序設計對于深入理解內核態驅動程序開發、編寫相應的接口程序也很有幫助。
      
      3 開發工具——FIOS SDK簡介[5][6]
      FIOS SDK開發環境完全基于32位Windows平臺。它使用動態鏈接庫(DLL)技術將開發人員開發的代碼整合到力控組態
      軟件系統中。FIOS SDK提供給程序員的開發接口為API函數和C++類庫。
      FIOS SDK主要由4部分組成:設備組態接口(Iodevcfg)、數據連接組態接口(Ioitemui)、I/O監控接口Ioapi和I/O服務器程序Ioserver。其中,Iodevcfg:負責管理設備組態過程;Ioitemui:負責管理數據連接組態過程;Ioapi:負責完成與I/O設備間的數據交換,實現對設備的監控過程,包括:對通信協議的解析、數據格式的轉換等;Ioserver:由FIOS SDK提供,用于完成對Ioapi 的動態裝載,調用并執行Ioapi實現的導出函數。它封裝了大部分開發人員不必關心的技術細節,如完成與I/O設備的底層通信(串口通信、網絡通信等)、設備超時處理、設備故障診斷等。Ioserver還完成與實時數據庫DB之間的通信,它把從I/O設備采集到的數據經Ioapi解析轉換后提交給DB,或者將DB下置給I/O設備的數據經Ioapi解析轉換后寫入I/O設備。
      因此,開發人員僅需要開發Iodevcfg、Ioitemui、Ioapi三部分的代碼。下面就以這三個部分的代碼、界面開發為例,說明在力控組態軟件中進行驅動開發的步驟。
      
      4 開發實例
      以C8051單片機實現數據采集為例,針對下層RS-485總線通信開發驅動程序。
      4.1 設備組態接口(Iodevcfg)開發
      (1) I/O描述文件
      在使用力控進行組態時,一般都要涉及I/O設備的定義過程。I/O描述文件的文件名為Iodesc.txt。文件內容規定的格式如下(其中,表示回車換行):
      類別;廠商或I/O程序描述;IOID
      子類型1;類型號;缺省通信方式;提供設備地址
      子類型2;類型號;缺省通信方式;提供設備地址
      ……
      因此,在本項目中的I/O描述文件定義為:
      “X計算機監控系統;華中科技大學控制系;CCMSController;0;1;0”表示類型號為0,RS-485通信,不設置設備地址。
      (2) 開發Iodevcfg.dll
      開發人員在編寫Iodevcfg接口程序時主要完成兩部分功能,一是為用戶進行設備組態時提供一個界面;另外就是將用戶組態的設備參數信息保存起來,以便在開發編程接口Ioapi時使用。如果力控提供的標準設備組態接口能夠完整地描述設備的有關信息,就不需要再編寫Iodevcfg接口程序。標準界面如圖1所示,并對串口進行相關設置,如圖2所示。
      


    圖1 標準設備組態界面



    圖1 標準設備組態界面


    圖2 串口設置界面
      

    圖2 串口設置界面

      4.2 數據連接組態接口(Ioitemui)開發
      在用力控進行組態時,把實時數據庫DB中的點參數與某種設備的具體信道建立連接的過程被為數據連接過程。Ioitemui要以DLL形式提供,該DLL必須是MFC擴展DLL,其缺省文件名稱為Ioitemui.dll。
      數據連接過程對于不同的I/O設備,其形式和內容可能完全不同。因此,必須針對不同的I/O設備設計相應的數據連接形式以保存各種參數信息。
      開發人員在編寫Ioitemui接口程序時也是主要完成兩部分功能,一是為用戶進行數據連接組態時提供一個界面;二是將用戶組態的設備參數信息保存在數據連接項結構(以下簡稱連接項結構)IOITEMDEF中,以便在開發I/O監控接口Ioapi時使用。這個連接項結構是一個通用結構,由開發人員自己賦值,自己解釋。界面如圖3所示:
      

    圖3 數據連接組態界面


    圖3 數據連接組態界面

      4.3 I/O監控接口Ioapi開發
      Ioapi是FIOS提供的最重要的一個編程接口,開發人員的主要工作就是開發Ioapi部分的程序代碼。Ioapi提供了一組API函數(掃描函數)和一些C++類庫(IOC, Input Output Class)。這些IOC類庫全部以純虛類的形式提供,并且只有成員函數,沒有成員變量,主要包括5個類:CItem(數據項類)、CPacket(數據包類)、CDevice(設備類)、CChannel(信道類)和CManager(管理器類)。以層級的結構來管理點、包、設備、信道,實現對設備組態、數據組態、參數信息的獲取和與實時數據庫DB之間的數據交換。
      Ioapi.dll程序中主要完成如下的導出函數(對于不需要的函數,一定要刪除,這樣可以使程序的運行效率提高):
      OnCreate-載入Ioapi.dll后立即調用,這時信道、設備、包、點都不存在,一般用于設置程序的標題,使用戶比較清楚程序的用途;
      OnSortItem-所有點導入完畢后調用,這時候沒有任何包建立;
      OnItemToPacket-循環多次添加所有的點到各個包中,基本原則是能一次處理的點打成一個包,使打包合理化;
      OnBeforeScan-打包完成,正式調度之前調用一次,遍歷管理器,信道,設備,包,點;
      OnCreateDeviceLink-設備的初始化工作;
      OnCreatePacketLink-包的初始化工作;
      OnReadData-IOSCAN程序循環掃描調度,形成數據采集命令串;
      OnWriteData-發生數據下送時調用,形成數據下置命令串;
      OnIsResponseComplete-異步方式下判斷是否完成數據的接收,是否將數據設置到DB中;
      OnAfterSend-發送數據后調用一次,調試時可以查看發送的命令串是否正確;
      OnTimeout-發生超時的時候調用;
      OnUnloadPacket-包析構時調用;
      OnClose-CManager析構時調用一次。
      開發人員可根據項目中自定義的通信協議,將通信協議寫入函數OnReadData()、OnWriteData()中,實現數據的采集和下置。下面給出OnReadData函數的部分代碼:
      INT OnReadData( CPacket* pPacket, LPTSTR lpszSendString, INT& nSendStringLen )
      {
      pPacket->SetReady(TRUE);
      //生成采集命令字符串
      CDevice* pDevice = pPacket->GetDevice();
      //得到設備指針
      CChannel * pChannel = pDevice->GetChannel();
      //得到通道指針
      pChannel->ClearAcceptBuffer();
      //清空接收緩沖區
      CString csDeviceAddr = pDevice->GetAddr();
      //得到實際設備的地址
      IOITEMDEF * pItemStru = pPacket->GetItem(0)->GetItemStru();
      //得到包的數據
      BYTE ucIoType = pItemStru->n[IO_TYPE];
      //得到發送命令的I/O類型
      BYTE ucDeviceAddr = pItemStru->n[DEVICE_ADDR];//得到用戶輸入的設備地址
      ……
      //需要根據實際的通信協議書寫有關的程序
      CString csCommand = "";
      csCommand = BYTE(FRAME_HEAD);
      //寫入幀信息頭
      ……
      csCommand += BYTE(QUERY);
      //定義幀信息類型
      csCommand += BYTE(0x01);
      //有效信息長度為 1 字節
      csCommand += BYTE(ucDeviceAddr);
      //寫入設備的地址
      csCommand += LRCCheck(temp_que, 2);
      //寫入幀尾LRC校驗碼
      nSendStringLen = csCommand.GetLength();
      CString csPmessage;
      csPmessage.Format("讀取數據:設備地址%X", ucDeviceAddr);
      pDevice->ShowProcessMessage(csPmessage);
      pDevice->ShowEventMessage(csPmessage, FALSE);
      //調試用,用以顯示觸發事件
      for ( int i = 0; i < nSendStri

     
     
    網站首頁  |  關于我們  |  聯系我們  |  廣告服務  |  版權隱私  |  友情鏈接  |  站點導航
     
    亚洲视频一区二区三区_国产在线拍偷自揄拍精品_日韩av在线看_日本久久久久久久久久久_精品国产区一区二区三区在线观看_国产日产欧美a一级在线_日韩亚洲在线观看_日韩久久精品电影_久久综合电影一区_2021国产精品视频_国产精品小说在线_欧美—级高清免费播放_一区二区三区高清国产_91av视频在线免费观看_一二美女精品欧洲_成人网在线免费看
    日韩电影中文字幕在线| 日韩精品免费一线在线观看| 国产色视频一区| 久久6免费高清热精品| 欧洲中文字幕国产精品| 欧美丝袜一区二区| 欧美精品在线观看91| 精品二区三区线观看| 国产精品美女免费视频| 成人观看高清在线观看免费| 久久久综合免费视频| 国产精品成人一区| 国产精品网红福利| 精品调教chinesegay| 91精品久久久久久久久久| 美女视频黄免费的亚洲男人天堂| 欧美在线欧美在线| 欧美美女操人视频| 在线丨暗呦小u女国产精品| 日韩福利伦理影院免费| 国产一区二区三区视频免费| 亚洲成人久久电影| 久久亚洲精品一区二区| 欧美在线视频a| 欧美人与性动交a欧美精品| 日韩中文字幕在线免费观看| 久久免费视频在线观看| 日韩高清电影免费观看完整版| 亚洲国产精品99久久| 精品国产区一区二区三区在线观看| 隔壁老王国产在线精品| 久久久久久国产精品久久| 国产mv免费观看入口亚洲| 日韩av在线网页| 亚洲女在线观看| 亚洲第一男人天堂| 91精品国产色综合久久不卡98口| 中文字幕国产精品久久| 九九综合九九综合| 日韩av网址在线观看| 麻豆乱码国产一区二区三区| 成人精品aaaa网站| 国产97在线视频| 深夜福利亚洲导航| 欧美中文字幕在线播放| 国产美女精品视频免费观看| 亚洲精品国产品国语在线| 亚洲xxx自由成熟| 亚洲精品之草原avav久久| 精品亚洲一区二区三区四区五区| 久久久久久久久久久久久久久久久久av| 久久久久久999| 国产在线观看91精品一区| 国产精品电影网| 色婷婷成人综合| 91国产美女在线观看| 亚洲另类激情图| 91久久国产综合久久91精品网站| 欧美理论电影在线播放| 日韩电影大全免费观看2023年上| 亚洲韩国欧洲国产日产av| 国产精品高潮在线| 欧美日韩美女在线观看| 538国产精品视频一区二区| 成人疯狂猛交xxx| 欧美老女人在线视频| 精品成人69xx.xyz| 亚洲国产天堂久久综合网| 日韩av电影手机在线观看| 亚洲高清一区二| 久久久久久999| 久久久久久国产三级电影| 2025国产精品视频| 欧美xxxx18性欧美| 亚洲精品丝袜日韩| 亚洲另类xxxx| 精品久久久久久中文字幕大豆网| 欧美日韩激情视频8区| 欧美高清第一页| 国产91精品高潮白浆喷水| 国产欧美在线看| 国产精品va在线播放| 欧洲亚洲妇女av| 成人妇女免费播放久久久| 欧美日韩另类字幕中文| 国模吧一区二区三区| 国产精品免费看久久久香蕉| 欧美日本高清一区| 在线视频日韩精品| 亚州av一区二区| 精品magnet| 亚洲无av在线中文字幕| 精品香蕉在线观看视频一| 国产精品中文字幕久久久| 久久91亚洲人成电影网站| 亚洲精品一区久久久久久| 奇米影视亚洲狠狠色| 国产成人久久久| 91精品国产成人www| 久久精品国产综合| 国产一区二区三区三区在线观看| 欧美性猛交xxxx乱大交3| 亚洲视频欧美视频| 亚洲精品国产精品久久清纯直播| 欧美电影免费观看网站| 91精品国产九九九久久久亚洲| 97av在线视频免费播放| 亚洲国内高清视频| 欧美一级成年大片在线观看| 日韩精品视频在线观看免费| 久久综合久久八八| 伊人久久综合97精品| 亚洲第一av在线| 69**夜色精品国产69乱| 久久香蕉国产线看观看av| 久久精品国产亚洲| 亚洲一区亚洲二区亚洲三区| 一本大道香蕉久在线播放29| 日韩美女在线看| 国产精品白丝av嫩草影院| 国产精品99久久久久久久久| 亚洲福利视频二区| 亚洲精品第一页| 伊人激情综合网| 欧美激情第1页| 欧美国产在线电影| 国产精品女视频| 精品久久久在线观看| 中文字幕在线观看亚洲| 亚洲激情久久久| 91国产视频在线播放| 动漫精品一区二区| 亚洲国产一区二区三区在线观看| 欧美最猛性xxxx| 97欧美精品一区二区三区| 亚洲国产成人av在线| 国产精品久久视频| 久久国产精品久久久久| 亚洲成人久久电影| 亚洲国产精品人久久电影| 亚洲精品免费一区二区三区| 欧美成人午夜激情视频| 欧美高跟鞋交xxxxhd| 色青青草原桃花久久综合| 成人伊人精品色xxxx视频| 亚洲第一网站免费视频| 日韩在线高清视频| 亚洲日本欧美日韩高观看| 国外成人在线播放| 久久国产精品影片| 成人免费xxxxx在线观看| 91精品国产免费久久久久久| 456国产精品| 国产亚洲视频中文字幕视频| 日韩国产欧美精品一区二区三区| 久久久欧美精品| 蜜臀久久99精品久久久无需会员| 亚洲激情在线观看视频免费| 91精品视频免费观看| 中文字幕一区二区精品| 欧美中文字幕精品| 狠狠操狠狠色综合网| 亚洲男人天堂久| 57pao成人国产永久免费|