国产强伦姧在线观看无码,中文字幕99久久亚洲精品,国产精品乱码在线观看,色桃花亚洲天堂视频久久,日韩精品无码观看视频免费

      您現(xiàn)在的位置:智能制造網(wǎng)>技術(shù)中心>力控組態(tài)軟件下的設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)

      直播推薦

      更多>

      企業(yè)動(dòng)態(tài)

      更多>

      推薦展會(huì)

      更多>

      力控組態(tài)軟件下的設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)

      2009年05月15日 20:33:09人氣:2375來(lái)源:煙臺(tái)勾股通信技術(shù)有限公司

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

        圖1 標(biāo)準(zhǔn)設(shè)備組態(tài)界面

        
        
        圖1 標(biāo)準(zhǔn)設(shè)備組態(tài)界面
        
        

        圖2 串口設(shè)置界面
        
        
        圖2 串口設(shè)置界面
        
          4.2 數(shù)據(jù)連接組態(tài)接口(Ioitemui)開(kāi)發(fā)
          在用力控進(jìn)行組態(tài)時(shí),把實(shí)時(shí)數(shù)據(jù)庫(kù)DB中的點(diǎn)參數(shù)與某種設(shè)備的具體信道建立連接的過(guò)程被為數(shù)據(jù)連接過(guò)程。Ioitemui要以DLL形式提供,該DLL必須是MFC擴(kuò)展DLL,其缺省文件名稱(chēng)為Ioitemui.dll。
          數(shù)據(jù)連接過(guò)程對(duì)于不同的I/O設(shè)備,其形式和內(nèi)容可能*不同。因此,必須針對(duì)不同的I/O設(shè)備設(shè)計(jì)相應(yīng)的數(shù)據(jù)連接形式以保存各種參數(shù)信息。
          開(kāi)發(fā)人員在編寫(xiě)Ioitemui接口程序時(shí)也是主要完成兩部分功能,一是為用戶進(jìn)行數(shù)據(jù)連接組態(tài)時(shí)提供一個(gè)界面;二是將用戶組態(tài)的設(shè)備參數(shù)信息保存在數(shù)據(jù)連接項(xiàng)結(jié)構(gòu)(以下簡(jiǎn)稱(chēng)連接項(xiàng)結(jié)構(gòu))IOITEMDEF中,以便在開(kāi)發(fā)I/O監(jiān)控接口Ioapi時(shí)使用。這個(gè)連接項(xiàng)結(jié)構(gòu)是一個(gè)通用結(jié)構(gòu),由開(kāi)發(fā)人員自己賦值,自己解釋。界面如圖3所示:
          
        

        圖3 數(shù)據(jù)連接組態(tài)界面

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

        附表 設(shè)備驅(qū)動(dòng)程序調(diào)試過(guò)程信息

          
        
        附表 設(shè)備驅(qū)動(dòng)程序調(diào)試過(guò)程信息
        
          調(diào)試結(jié)果表明該驅(qū)動(dòng)程序可以實(shí)現(xiàn)與C8051單片機(jī)的異步通信,完成數(shù)據(jù)的采集,進(jìn)而實(shí)現(xiàn)對(duì)助航燈光的控制。
          
          5 結(jié)束語(yǔ)
          組態(tài)軟件作為現(xiàn)場(chǎng)生產(chǎn)數(shù)據(jù)采集和過(guò)程控制的軟件,在許多行業(yè)領(lǐng)域都有應(yīng)用。但任何組態(tài)軟件的驅(qū)動(dòng)程序不可能囊括所有設(shè)備的驅(qū)動(dòng)程序,特別是對(duì)通信協(xié)議有特定要求的設(shè)備,因此,就需要開(kāi)發(fā)人員根據(jù)自己的通信協(xié)議編寫(xiě)相應(yīng)的驅(qū)動(dòng)程序代碼,并結(jié)合實(shí)際的設(shè)備進(jìn)行調(diào)試。一個(gè)好的驅(qū)動(dòng)程序設(shè)計(jì)應(yīng)該是可配置的、可移植的、可搶占式的、可中斷的和多處理器安全的[4]。若想能夠很好地掌握驅(qū)動(dòng)程序的開(kāi)發(fā),zui根本的是閱讀驅(qū)動(dòng)文檔并自己動(dòng)手編寫(xiě)驅(qū)動(dòng)程序。
      全年征稿/資訊合作 聯(lián)系郵箱:1271141964@qq.com

      免責(zé)聲明

      • 凡本網(wǎng)注明"來(lái)源:智能制造網(wǎng)"的所有作品,版權(quán)均屬于智能制造網(wǎng),轉(zhuǎn)載請(qǐng)必須注明智能制造網(wǎng),http://www.towegas.com。違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
      • 企業(yè)發(fā)布的公司新聞、技術(shù)文章、資料下載等內(nèi)容,如涉及侵權(quán)、違規(guī)遭投訴的,一律由發(fā)布企業(yè)自行承擔(dān)責(zé)任,本網(wǎng)有權(quán)刪除內(nèi)容并追溯責(zé)任。
      • 本網(wǎng)轉(zhuǎn)載并注明自其它來(lái)源的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類(lèi)作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品來(lái)源,并自負(fù)版權(quán)等法律責(zé)任。
      • 如涉及作品內(nèi)容、版權(quán)等問(wèn)題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

      <
      更多 >

      工控網(wǎng)機(jī)器人儀器儀表物聯(lián)網(wǎng)3D打印工業(yè)軟件金屬加工機(jī)械包裝機(jī)械印刷機(jī)械農(nóng)業(yè)機(jī)械食品加工設(shè)備制藥設(shè)備倉(cāng)儲(chǔ)物流環(huán)保設(shè)備造紙機(jī)械工程機(jī)械紡織機(jī)械化工設(shè)備電子加工設(shè)備水泥設(shè)備海洋水利裝備礦冶設(shè)備新能源設(shè)備服裝機(jī)械印染機(jī)械制鞋機(jī)械玻璃機(jī)械陶瓷設(shè)備橡塑設(shè)備船舶設(shè)備電子元器件電氣設(shè)備


      我要投稿
      • 投稿請(qǐng)發(fā)送郵件至:(郵件標(biāo)題請(qǐng)備注“投稿”)1271141964.qq.com
      • 聯(lián)系電話0571-89719789
      工業(yè)4.0時(shí)代智能制造領(lǐng)域“互聯(lián)網(wǎng)+”服務(wù)平臺(tái)
      智能制造網(wǎng)APP

      功能豐富 實(shí)時(shí)交流

      智能制造網(wǎng)小程序

      訂閱獲取更多服務(wù)

      微信公眾號(hào)

      關(guān)注我們

      抖音

      智能制造網(wǎng)

      抖音號(hào):gkzhan

      打開(kāi)抖音 搜索頁(yè)掃一掃

      視頻號(hào)

      智能制造網(wǎng)

      公眾號(hào):智能制造網(wǎng)

      打開(kāi)微信掃碼關(guān)注視頻號(hào)

      快手

      智能制造網(wǎng)

      快手ID:gkzhan2006

      打開(kāi)快手 掃一掃關(guān)注
      意見(jiàn)反饋
      關(guān)閉
      企業(yè)未開(kāi)通此功能
      詳詢(xún)客服 : 0571-87858618