探討研華32位DLL驅(qū)動(dòng)程序
4.4RawData(原始數(shù)據(jù))和voltage(電壓值)
以PCL1800為例,它的轉(zhuǎn)換芯片是12位的,所以它可以把采集的電壓量程分為4096段,這種方式稱為量化,而RawData就是將被采集量量化后的整數(shù)值。驅(qū)動(dòng)程序將量化值用3位十六進(jìn)制數(shù)表示,所以RawData的示數(shù)范圍就是000-fff,在內(nèi)部緩沖區(qū)中的數(shù)值就是這種量化的原始數(shù)據(jù)。用戶緩沖區(qū)中存放Voltage(電壓值),將RawData轉(zhuǎn)化為電壓值由CRVFAITransfer函數(shù)完成,當(dāng)PTFAITransfer的DataType=0時(shí),不進(jìn)行RawData到電壓值的轉(zhuǎn)化,這時(shí)候在用戶緩沖區(qū)中得到的就是量化的3位十六進(jìn)制整數(shù)值。
5動(dòng)態(tài)采集程序涉及到驅(qū)動(dòng)程序中一些參數(shù)的分析
5.1PTFAICheck結(jié)構(gòu)的HalfReady域
該域說明哪半個(gè)緩沖區(qū)已滿。在使用FIFO緩沖區(qū)的情況下,F(xiàn)IFO緩沖區(qū)和內(nèi)部數(shù)據(jù)緩沖區(qū)都有半滿(halffull)的情況。容易混淆此處的HalfReady是指FIFO緩沖區(qū)中的半?yún)^(qū)還是內(nèi)部數(shù)據(jù)緩沖區(qū)的半?yún)^(qū)。事實(shí)上,DRVFAICheck都是返回的內(nèi)部緩沖區(qū)的狀態(tài),不反映FIFO緩沖區(qū)狀態(tài);所以此處是指的內(nèi)部數(shù)據(jù)緩沖區(qū)的半?yún)^(qū)。
5.2ADSEVTBUFCHANGE事件的觸發(fā)時(shí)機(jī)
第一:雙緩沖區(qū)方式下,在A、B兩個(gè)內(nèi)部緩沖區(qū)之間切換時(shí)。
第二:單緩沖區(qū)方式下,在內(nèi)部數(shù)據(jù)緩沖區(qū)的兩個(gè)半緩沖區(qū)間切換時(shí)。
5.3增益列表起始地址
在編寫數(shù)據(jù)采集程序時(shí),都要考慮多通道同時(shí)采集,而且都要考慮開始通道的任意性,所以通常的做法是為增益列表開辟一塊增益列表存儲(chǔ)區(qū),從0開始每個(gè)存儲(chǔ)單元對應(yīng)一個(gè)通道的增益值,但是要注意,在起始通道不為零時(shí)不能將這個(gè)存儲(chǔ)區(qū)的起始地址直接賦給驅(qū)動(dòng)函數(shù)的“增益列表起始地址”參數(shù),如PTFAIIntScanStart結(jié)構(gòu)的GainList域;因?yàn)?a class="contentlabel" href="http://2s4d.com/news/listbylabel/label/驅(qū)動(dòng)程序">驅(qū)動(dòng)程序是直接從“增益列表起始地址”參數(shù)表示的起始地址去提取起始通道的增益值,而不會(huì)根據(jù)“起始通道”參數(shù)在增益列表中選取對應(yīng)的增益值。
5.4CheckEvent的檢查周期
CheckEvent函數(shù)是在一個(gè)周期中檢查是否事件發(fā)生,如果有就立即返回事件的類型,如果沒有就返回一個(gè)“checkeventerror!”錯(cuò)誤。CheckEvent函數(shù)與DRV_FAICheck函數(shù)不同,程序需要不的調(diào)用DRV_FAICheck函數(shù)來檢查硬件工作的最新情況。程序調(diào)用DRV_FAICheck函數(shù)要占用計(jì)算機(jī)CPU時(shí)間,但是使用CheckEvent,只需要占用CPU調(diào)用一次CheckEvent函數(shù)的時(shí)間,就可以監(jiān)視一個(gè)監(jiān)視周期內(nèi)的事件發(fā)生情況。在這個(gè)周期內(nèi)沒有事件發(fā)生就不占用CPU時(shí)間,CheckEvent函數(shù)采用同步方式檢查事件的發(fā)生。PTCheckEvent結(jié)構(gòu)的Milliseconds域說明了CheckEvent函數(shù)的檢查周期。
6結(jié)束語
本文著重分析了在使用研華32位dll驅(qū)動(dòng)程序編寫動(dòng)態(tài)數(shù)據(jù)采集程序時(shí)所碰到的概念及參數(shù)。通過本文讀者可能加深對32位dll驅(qū)動(dòng)程序的認(rèn)識(shí),從而達(dá)到更加自由,靈活使用32位dll驅(qū)動(dòng)程序的目的。
c++相關(guān)文章:c++教程
評論