?? module2.bas
字號:
Attribute VB_Name = "Module2"
Public Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
Destination As Any, Source As Any, ByVal Length As Long)
Public Type FixFloat '定點小數(shù)
byteArr(3 - 1) As Byte
End Type
Public Type ROM_FILE_HEADER_1d0 'EEPROM頭格式1.0
wroteFlag(4 - 1) As Byte 'ZTIC,用來標識是否為寫過的EEPROM
version As Single '版本號
fileSize As Long '文件長度,所有數(shù)據(jù)的大小
crc32 As Long 'CRC32校驗,對以下數(shù)據(jù)進行校驗,用于檢查文件完整性
bCompress As Byte '是否壓縮
fileDate As Double '修改時間,相當(dāng)于DATE類型,直接賦給 COleDateTime ,然后用COleDateTime的Format("%Y %m %d %H %M %S")得到時間串
recCnt As Long '記錄個數(shù),必須小于文件長度
nextRecAddr As Integer '下一條記錄的地址,必須小于文件長度,為0表無下一條記錄
End Type
'對于1.0版,每條記錄有5字節(jié)固定信息
Public Type ROM_REC_HEADER_1d0
recLen As Integer '2字節(jié) -- 當(dāng)前記錄長度,必須小于文件長度
nextRecAddr As Integer '2字節(jié) -- 下一條記錄起始地址,必須小于文件長度,為0表無下一條記錄
unitType As Byte '1字節(jié) -- 硬件單元類型,0 = 板卡描述;1 = AD
End Type
'對于1.0版,板卡描述記錄的固定信息
Public Type ROM_REC_CARDDESC_HEADER_1d0
cardDescPreLen As Byte '1字節(jié) -- 板卡描述前綴 PCI, 0無效
cardCode As Long '4字節(jié) -- 板卡代碼 8348
cardDescSufLen As Byte '1字節(jié) -- 板卡描述后綴 BJ
unitDesc As Long '4字節(jié) -- 功能類型 1=AD, 2=DA, 4=SW
remarkLen As Long '備注內(nèi)容長度,用于對板卡各種情況的說明
allRecAddrCnt As Long '4字節(jié) -- 快速索引個數(shù),為0表示未建立快速索引
End Type
'對于1.0版,AD記錄的3字節(jié)固定信息
Public Type ROM_REC_AD_HEADER_1d0
unitCnt As Byte '1字節(jié) -- AD芯片數(shù)=8
bCanCombineAD As Byte '1字節(jié) -- 是否能合并通道采集
rangeTotal As Byte '1字節(jié) -- 有效量程總數(shù)
rangeDescAddr As Integer '2字節(jié) --檔位地址,0表無地址,每描述1字節(jié)
gearTotal As Byte '1字節(jié) -- 速度檔數(shù),根據(jù)速度分檔,對于8348默認分為400K,500K,1M,2M,4M,共5檔
gearDescAddr As Integer '2字節(jié) --檔位地址,0表無地址,每描述2字節(jié)
ampTotal As Byte '1字節(jié) -- 程控增益總數(shù)
ampDescAddr As Integer '2字節(jié) --檔位地址,0表無地址,每描述1字節(jié)
bDescSame As Byte '1字節(jié) -- 所有芯片描述是否相同
ADunitDescAddrOrCnt As Integer '2字節(jié) -- bDescSame = 0代表地址個數(shù),接下來若干字節(jié)是地址,0表無AD芯片描述
' bDescSame = 1代表描述地址
End Type
Public Type ROM_REC_AD_UNIT_DESC_1d0
precision As Byte '1字節(jié) -- 每芯片精度,12或16
chCntPerUnit As Byte '1字節(jié) -- 每芯片通道數(shù)
maxSpeed As Long '4字節(jié) -- 每芯片最大速度(單位Hz)
ADclock As Long '4字節(jié) -- 每芯片AD時鐘(單位Hz)
combineDivisor As Long '4字節(jié) -- 每芯片合并通道分頻系數(shù)
rangeCntPerUnit As Byte '1字節(jié) -- 每芯片真正用了幾個量程
rangeCodeAddr As Integer '2字節(jié) -- 有效量程代碼地址
gearCntPerUnit As Byte '1字節(jié) -- 速度檔數(shù),0表不
gearCodeAddr As Integer '2字節(jié) --速度地址,0表無地址
ampCntPerUnit As Byte '1字節(jié) -- 程控增益檔數(shù),0表不帶程控增益
ampCodeAddr As Integer '2字節(jié) --增益代碼地址,0表無地址
End Type
Public Type ROM_REC_AD_RANGE_TABLE_DESC_1d0 '帶所有檔
rangeCode As Byte '1字節(jié) -- 量程代碼
voltRangeAddr As Integer '2字節(jié) -- 各量程最大電壓范圍的首地址,0表與量程代碼代表的電壓范圍一致
hasDefaultVal As Byte '1字節(jié) -- 是否包含默認值
tableAddr As Integer '2字節(jié) -- 線性表首地址
tableItemCnt As Integer '2字節(jié) -- 線性表項數(shù),默認為2
tableItemLen As Integer '2字節(jié) -- 線性表每項長度,默認為3*9 = 27字節(jié)
tableItemFieldLen As Byte '1字節(jié) -- 線性表每項中每個數(shù)據(jù)的長度,默認為3字節(jié),有符號定點小數(shù)()
End Type
Public Type ROM_REC_AD_LINEAR_TABLEITEM '每個量程線性表,不包含出廠默認值
inputVolt As FixFloat '輸入電壓
initCode(8 - 1) As FixFloat '每芯片每檔位對應(yīng)同一個輸入電壓的原碼值
End Type
Public Function FixFloatToSingle(aFixFloat As FixFloat) As Single
'把轉(zhuǎn)化為一個single
'-83886.08(&H800000) -- +83886.07(7FFFFF) '-8388605
' Dim aSingle As Single
Dim aLong As Long
CopyMemory aLong, aFixFloat, 3
aLong = IIf(aFixFloat.byteArr(2) >= &H80, aLong Or &HFF000000, aLong And &HFFFFFF)
FixFloatToSingle = Format(aLong / 100#, "0.00")
End Function
Public Function SingleToFixFloat(aSingle As Single) As FixFloat
'把轉(zhuǎn)化為一個single
'-83886.08(&H800000) -- +83886.07(7FFFFF) '-8388605
'Dim aFixFloat As FixFloat
Dim aLong As Long
aLong = CLng(aSingle * 100#) '-8388607 '&H800001
CopyMemory SingleToFixFloat, aLong, 3
End Function
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -