⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 module2.bas

📁 多功能数据采集卡上位机完整代码
💻 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 '定点小数
    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 '文件长度,所有数据的大小
    crc32 As Long    'CRC32校验,对以下数据进行校验,用于检查文件完整性
    bCompress As Byte    '是否压缩
    fileDate As Double   '修改时间,相当于DATE类型,直接赋给 COleDateTime ,然后用COleDateTime的Format("%Y %m %d %H %M %S")得到时间串
    recCnt As Long      '记录个数,必须小于文件长度
    nextRecAddr As Integer   '下一条记录的地址,必须小于文件长度,为0表无下一条记录
End Type

'对于1.0版,每条记录有5字节固定信息
Public Type ROM_REC_HEADER_1d0
    recLen As Integer     '2字节 -- 当前记录长度,必须小于文件长度
    nextRecAddr As Integer '2字节 -- 下一条记录起始地址,必须小于文件长度,为0表无下一条记录
    unitType As Byte      '1字节 -- 硬件单元类型,0 = 板卡描述;1 = AD
End Type

'对于1.0版,板卡描述记录的固定信息
Public Type ROM_REC_CARDDESC_HEADER_1d0
    cardDescPreLen As Byte '1字节 -- 板卡描述前缀 PCI, 0无效
    cardCode As Long    '4字节 -- 板卡代码 8348
    cardDescSufLen As Byte '1字节 -- 板卡描述后缀 BJ
    unitDesc As Long    '4字节 -- 功能类型 1=AD, 2=DA, 4=SW
    remarkLen As Long '备注内容长度,用于对板卡各种情况的说明
    allRecAddrCnt As Long '4字节 -- 快速索引个数,为0表示未建立快速索引
End Type

'对于1.0版,AD记录的3字节固定信息
Public Type ROM_REC_AD_HEADER_1d0
    unitCnt As Byte '1字节 -- AD芯片数=8
    bCanCombineAD As Byte  '1字节 -- 是否能合并通道采集
    rangeTotal As Byte '1字节 -- 有效量程总数
    rangeDescAddr As Integer '2字节 --档位地址,0表无地址,每描述1字节
    gearTotal As Byte '1字节 -- 速度档数,根据速度分档,对于8348默认分为400K,500K,1M,2M,4M,共5档
    gearDescAddr As Integer '2字节 --档位地址,0表无地址,每描述2字节
    ampTotal As Byte '1字节 -- 程控增益总数
    ampDescAddr As Integer '2字节 --档位地址,0表无地址,每描述1字节
    bDescSame As Byte  '1字节 -- 所有芯片描述是否相同
    ADunitDescAddrOrCnt As Integer '2字节 -- bDescSame = 0代表地址个数,接下来若干字节是地址,0表无AD芯片描述
                                   '         bDescSame = 1代表描述地址
End Type

Public Type ROM_REC_AD_UNIT_DESC_1d0
    precision As Byte '1字节 -- 每芯片精度,12或16
    chCntPerUnit As Byte '1字节 -- 每芯片通道数
    maxSpeed As Long     '4字节 -- 每芯片最大速度(单位Hz)
    ADclock As Long      '4字节 -- 每芯片AD时钟(单位Hz)
    combineDivisor As Long '4字节 -- 每芯片合并通道分频系数
    rangeCntPerUnit As Byte  '1字节 -- 每芯片真正用了几个量程
    rangeCodeAddr As Integer '2字节 -- 有效量程代码地址
    gearCntPerUnit As Byte  '1字节 -- 速度档数,0表不
    gearCodeAddr As Integer '2字节 --速度地址,0表无地址
    ampCntPerUnit As Byte  '1字节 -- 程控增益档数,0表不带程控增益
    ampCodeAddr As Integer '2字节 --增益代码地址,0表无地址
End Type

Public Type ROM_REC_AD_RANGE_TABLE_DESC_1d0 '带所有档
    rangeCode As Byte '1字节 -- 量程代码
    voltRangeAddr As Integer '2字节 -- 各量程最大电压范围的首地址,0表与量程代码代表的电压范围一致
    hasDefaultVal As Byte '1字节 -- 是否包含默认值
    tableAddr As Integer '2字节 -- 线性表首地址
    tableItemCnt As Integer '2字节 -- 线性表项数,默认为2
    tableItemLen As Integer '2字节 -- 线性表每项长度,默认为3*9 = 27字节
    tableItemFieldLen As Byte '1字节 -- 线性表每项中每个数据的长度,默认为3字节,有符号定点小数()
End Type

Public Type ROM_REC_AD_LINEAR_TABLEITEM '每个量程线性表,不包含出厂默认值
    inputVolt As FixFloat '输入电压
    initCode(8 - 1) As FixFloat  '每芯片每档位对应同一个输入电压的原码值
End Type

Public Function FixFloatToSingle(aFixFloat As FixFloat) As Single
'把转化为一个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
'把转化为一个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
    



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -