色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 物聯(lián)網(wǎng)與傳感器 > 設計應用 > 基于C++ Builder的自動變速器電控單元實車試驗數(shù)據(jù)采集系統(tǒng)

          基于C++ Builder的自動變速器電控單元實車試驗數(shù)據(jù)采集系統(tǒng)

          作者:羅君贇 周凡華 邱緒云 吳小清 時間:2008-08-29 來源:微計算機信息 收藏

            3.2模擬量、數(shù)字量采集子函數(shù)

          本文引用地址:http://cafeforensic.com/article/87550.htm

            在確定了采集程序的程序框圖和界面之后,就要著手編寫采集中最重要的兩個子函數(shù)了,即模擬量和數(shù)字量采集子函數(shù)。廠家提供的動態(tài)連接庫(DLL)中包含了進行操作的C/C++函數(shù),在C++Builder下可對這些函數(shù)進行調用,就可以很方便的對系統(tǒng)進行設置、采樣和數(shù)據(jù)處理。以下通過對模擬量的采集來概要說明。

            使用時先在程序中聲明,即把含有函數(shù)聲明的.h文件包含在程序體中。然后利用項目管理器將包含函數(shù)實體的.lib文件加入到項目中。這樣在程序體中就可以調用其中的函數(shù)了,具體的模擬量子函數(shù)代碼如下:
            float readvoltage(int device,int channel)              //參數(shù)為設備號、通道號
            { ………………                            //變量定義、說明等
            lDevNum=device;
            usChan=channel;
            dwErrCde = DRV_DeviceOpen(lDevNum, &lDriverHandle);  //打開設備
              if (dwErrCde != SUCCESS)
              { ErrorHandler(dwErrCde);}
            ptAIConfig.DasChan = usChan;                         //配置設備
            ptAIConfig.DasGain = 0;
            dwErrCde = DRV_AIConfig(lDriverHandle, &ptAIConfig);
            if (dwErrCde != SUCCESS)
            { ErrorStop(&lDriverHandle, dwErrCde);}
            ptAIVoltageIn.chan = usChan;                         //讀一個數(shù)據(jù)
            ptAIVoltageIn.gain = 0;                  
            ptAIVoltageIn.TrigMode = 0;           
            ptAIVoltageIn.voltage = &fVoltage;      
            dwErrCde = DRV_AIVoltageIn(lDriverHandle, &ptAIVoltageIn);
            if (dwErrCde != SUCCESS)
            { ErrorStop(&lDriverHandle, dwErrCde);}
            dwErrCde = DRV_DeviceClose(&lDriverHandle);         //關閉設備
            if (dwErrCde != SUCCESS)
            { ErrorStop(&lDriverHandle, dwErrCde);}
            return fVoltage;                                     //返回采集數(shù)據(jù)
            }
            
             同理,數(shù)字量采集子函數(shù)也是類似的操作。

            3.3多媒體定時器

            由于多媒體定時器具有很好的實時性和較高的優(yōu)先級,最高定時可達1ms,所以我們這個數(shù)據(jù)采集系統(tǒng)采用多媒體定時器來定時。需要的系統(tǒng)資源為:#include <mmsystem.h>;在borland環(huán)境下首先需要將winmm.lib文件通過implib命令轉化為borland下的格式,然后將相應的lib加到工程里。具體的多媒體定時器代碼如下:
            void start_timer(double m_time_val)        //啟動多媒體定時器,m_time_val的單位是秒
            { TIMECAPS TC;
            UINT TIMERES=0;
              UINT TIMEID;
              m_time_val*=1000;
              int time_interval;
              time_interval=(int)m_time_val;
              if(timeGetDevCaps(&TC,sizeof(TIMECAPS))!=TIMERR_NOERROR)
              { exit(0);}
            timeBeginPeriod(TIMERES);      TIMEID=timeSetEvent(time_interval,TIMERES,&(LPTIMECALLBACK)callbackfunction,0,TIME_PERIODIC);
            g_TIMEID=TIMEID;
            }
            void end_timer()                   //終止定時
            { timeKillEvent(g_TIMEID);
            timeEndPeriod(0);
            }
            void WINAPI callbackfunction(UINT uID,UINT MSG,DWORD DWUSER,DWORD DW1,DWORD DW2)
            {                       //在此函數(shù)中加入定時內自己要做的內容,本系統(tǒng)即要加入
                                  //模擬量、數(shù)字量采集子函數(shù)的調用和存儲數(shù)據(jù)等語句
            }

            首先調用void start_timer(double m_time_val)啟動多媒體定時器,多媒體定時器將每隔一個時間間隔調用void WINAPI callbackfunction(UINT uID,UINT MSG,DWORD DWUSER,DWORD DW1,DWORD DW2)函數(shù),通過改變time_interval的值可以改變時間間隔(time_interval的單位是毫秒),在定時結束時調用void end_timer()來終止定時。

            3.4存儲數(shù)據(jù)

            本數(shù)據(jù)采集系統(tǒng)還將把采集到的數(shù)據(jù)存儲起來,以便將來對這些數(shù)據(jù)進行分析?,F(xiàn)在最常用的數(shù)據(jù)庫就是微軟的Access,而C++Builder對數(shù)據(jù)庫也有較好的操作,所以我們采取將數(shù)據(jù)存入Access的方案來實現(xiàn)數(shù)據(jù)的存儲。基本的操作步驟如下:

            ●使用ADO組件頁中的ADOTable組件來連接存儲數(shù)據(jù)的數(shù)據(jù)庫。

            ●由于ADOTable組件只負責連接數(shù)據(jù)庫,無法取得數(shù)據(jù)庫文件內的字段數(shù)據(jù),所以我們仍得使用Data Access組件頁中的DataSource組件來實現(xiàn),將它的DataSet屬性指定為ADOTable1(即前一步驟加入的ADOTable組件名稱)。

            ●往數(shù)據(jù)庫存數(shù)據(jù)的過程即是新增記錄的過程,所以只需添加幾句簡單的語句:

            ADOTable1->Insert();
            ADOTable1->FieldValues["voltage1"]=voltage1;
            …………
            ADOTable1->Post();

            首先調用Insert方法創(chuàng)建一個緩沖區(qū)(即成為編輯模式),接著進行數(shù)據(jù)字段值的編輯,當我們完成數(shù)據(jù)輸入的操作后,必須調用Post方法,或者將當前的數(shù)據(jù)位置移到另一筆數(shù)據(jù)上,這樣才會將新增的記錄內容寫入到數(shù)據(jù)庫。

            4 結論

            試驗結果表明本文基于Borland 開發(fā)的汽車自動變速器)實車試驗數(shù)據(jù)采集系統(tǒng),能夠滿足車載分析試驗臺的要求,這為的開發(fā)和優(yōu)化控制策略打下基礎。

            參考文獻

            [1]楊宗志. C++Builder數(shù)據(jù)庫程序設計[M]. 北京:清華大學出版社,2001
            [2]潘旭峰,等. 現(xiàn)代汽車電子技術[M]. 北京:北京理工大學出版社,2001
            [3]史惠康. Borland 實用編程技術[M]. 北京:中國水利水電出版社,1999

            第一作者簡介:羅君贇,男,1981年2月22日出生,上海人,車輛工程碩士研究生在讀,研究方向為自動變速箱的研究與開發(fā)。


          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉