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

📄 module1.bas

📁 多功能数据采集卡上位机完整代码
💻 BAS
字号:
Attribute VB_Name = "Module1"
Public m_cardNO As Long 'pci卡的板卡索引号
Public m_DARange As Long 'DA输出范围
Public m_initData(819200) As Integer '临时缓冲区
Public m_floatData(819200) As Single '申请足够大的缓冲区,应该是4096的整数倍,并且缓冲区大小至少大于4096
Public m_retCount As Long '读到的数据个数
'错误号说明
Public Enum ZTERR '错误号
    ZT_SUCCESS = 0 '无错误
    ERR_PARAMETER1 = 1 '参数1错
    ERR_PARAMETER2 = 2 '参数2错
    ERR_PARAMETER3 = 3 '参数3错
    ERR_PARAMETER4 = 4 '参数4错
    ERR_PARAMETER5 = 5 '参数5错
    ERR_PARAMETER6 = 6 '参数6错
    ERR_PARAMETER7 = 7 '参数7错
    ERR_PARAMETER8 = 8 '参数8错
    ERR_PARAMETER9 = 9 '参数9错
    ERR_PARAMETER10 = 10 '参数10错
    ERR_PARAMETER11 = 11 '参数11错
    ERR_PARAMETER12 = 12 '参数12错
    ERR_PARAMETER13 = 13 '参数13错
    ERR_PARAMETER14 = 14 '参数14错
    ERR_PARAMETER15 = 15 '参数15错
    ERR_PARAMETER16 = 16 '参数16错
    ERR_PARAMETER17 = 17 '参数17错
    ERR_PARAMETER18 = 18 '参数18错
    ERR_PARAMETER19 = 19 '参数19错
    ERR_PARAMETER20 = 20 '参数20错
    ERR_PARAMETER_BASEADDR = 21 '针对ISA卡,板卡基地址超出范围,应该在0x100至0x3F0之间未被系统占用的地址
    ERR_PARAMETER_CARDNO = 22 '针对PCI卡,板卡索引号超出范围,这版驱动中板卡索引号从1开始
    ERR_PARAMETER_CHMODE = 23 '通道方式参数错误,通道方式超出范围,一般只有0--3共4种方式
    ERR_PARAMETER_CH = 24 '通道号参数错误,通道号超出范围
    ERR_PARAMETER_CHIP = 25 '芯片号参数错误,芯片号超出范围
    ERR_PARAMETER_PORT = 26 '口号参数错误,口号超出范围
    ERR_PARAMETER_AI_RANGE = 27 'AD量程参数错,此卡不支持这种AD输入量程
    ERR_PARAMETER_AI_AMP = 28 'AD增益参数错
    ERR_PARAMETER_AI_STARTMODE = 29 'AD启动方式参数错
    ERR_PARAMETER_AO_RANGE = 30 'DA量程参数错,此卡不支持这种DA输出量程
    ERR_PARAMETER_ADFREQ = 31 'AD采集频率(或AD分频系数)参数错
    ERR_PARAMETER_IRQ = 32 '与中断相关参数错,可能是此卡不支持这种中断方式或中断号
    ERR_PARAMETER_NULL_POINTER = 33 '空指针错。原因:缓冲区首地址为空或者用户传入的参数导致引用到空指针
    ERR_AD_OVERTIME = 34 'AD超时。对于ISA卡,出错原因可能是:未插卡或IO地址与板卡上设置不匹配。当用定时启动AD或外触发启动AD时,一般不应检查AD是否超时
    ERR_OPEN_DEVICE = 35 '打开设备失败,对于PCI卡,出错原因可能是:未插卡或未装驱动
    ERR_CLOSE_DEVICE = 36 '关闭设备失败
    ERR_TIMING = 37 '定时未到或外触发脉冲未到
    ERR_IOADDR_DA_OVERTIME = 38 '带光隔DA写过程超时
    ERR_OPEN_IRQ = 39 '打开中断出错
    ERR_FUNC_CANNT_RUN = 40 '此函数不能在这台计算机上运行
    ERR_ASYNC_FUNC_FAILED = 41 '异步函数调用失败
    ERR_FUNC_OPERATE = 42 '在当前的卡的设置状态下,不应该调用此函数
    ERR_EXCHANGE_DATA = 43 '与底层驱动之间交换数据出错
End Enum


'与原驱动不同,通道号,芯片号,口号,默认从1开始
Public Declare Function ZT8361_GetBaseAddr Lib "pci8361.dll" (ByVal cardNO As Long) As Long '得到板卡基地址

'打开设备,必须在调用其他函数之前调用。放在程序初始化时调用比较恰当,只调用一次
Public Declare Function ZT8361_OpenDevice Lib "pci8361.dll" (ByVal cardNO As Long) As Long '返回 0 表示打开设备成功,非0 表示失败
Public Declare Function ZT8361_CloseDevice Lib "pci8361.dll" (ByVal cardNO As Long) As Long '关闭设备,在用户程序结束时调用一次
Public Declare Function ZT8361_GetLastErr Lib "pci8361.dll" () As Long '得到错误号
Public Declare Sub ZT8361_ClearLastErr Lib "pci8361.dll" () '清除错误号,一旦产生错误,为了使其他函数重新正常运行,必须清除错误号
'函数功能:设置板卡索引号,芯片号,口号和通道号从0开始还是从1开始
Public Declare Sub ZT8361_SetBaseNO Lib "pci8361.dll" (ByVal baseNO As Long) '设置芯片号或通道号从0开始还是从1开始
'函数功能:返回当前板卡索引号,芯片号,口号和通道号从0开始还是从1开始
Public Declare Function ZT8361_GetBaseNO Lib "pci8361.dll" () As Long '返回当前芯片号或通道号从0开始还是从1开始

Public Declare Function ZT8361_ReadW Lib "pci8361.dll" (ByVal cardNO As Long, ByVal nOffset As Long) As Long
Public Declare Function ZT8361_WriteW Lib "pci8361.dll" (ByVal cardNO As Long, ByVal nOffset As Long, ByVal dataWord As Long) As Long


Public Declare Function ZT8361_LoadADZeroFull Lib "pci8361.dll" ( _
ByVal cardNO As Long, _
ByVal AIrange As Long, _
ByVal readFrom As Long, _
ByVal bForceReLoad As Long) As Long
                                                                   
                                                                  
'模入部分
Public Declare Function ZT8361_DisableAD Lib "pci8361.dll" (ByVal cardNO As Long) As Long
Public Declare Function ZT8361_EnableAD Lib "pci8361.dll" (ByVal cardNO As Long) As Long
'设置AD方式控制字,参数说明请看《pci8361.h》
Public Declare Function ZT8361_AIinit Lib "pci8361.dll" (ByVal cardNO As Long, _
                                                         ByVal chMode As Long, _
                                                         ByVal chNO As Long, _
                                                         ByVal AIrange As Long, _
                                                         ByRef AIAmp As Long, _
                                                         ByVal ADstartMode As Long, _
                                                         ByVal ADfreq As Long, _
                                                         ByVal ADctrlWord As Long, _
                                                         ByVal ADoverTime As Long) As Long

Public Declare Function ZT8361_ClearHFifo Lib "pci8361.dll" (ByVal cardNO As Long, ByVal unitType As Long) As Long
Public Declare Function ZT8361_GetHFifoStatus Lib "pci8361.dll" (ByVal cardNO As Long, ByVal unitType As Long) As Long
Public Declare Function ZT8361_ClearSFifo Lib "pci8361.dll" (ByVal cardNO As Long, ByVal unitType As Long) As Long
Public Declare Function ZT8361_SetSFifoSize Lib "pci8361.dll" (ByVal cardNO As Long, ByVal unitType As Long, ByVal SFifoSize As Long) As Long
Public Declare Function ZT8361_GetSFifoSize Lib "pci8361.dll" (ByVal cardNO As Long, ByVal unitType As Long) As Long
Public Declare Function ZT8361_DisableSFifo Lib "pci8361.dll" (ByVal cardNO As Long, ByVal unitType As Long) As Long
Public Declare Function ZT8361_EnableSFifo Lib "pci8361.dll" (ByVal cardNO As Long, ByVal unitType As Long) As Long
Public Declare Function ZT8361_GetSFifoDataCount Lib "pci8361.dll" (ByVal cardNO As Long, ByVal unitType As Long) As Long
Public Declare Function ZT8361_SetSFifoThreshold Lib "pci8361.dll" (ByVal cardNO As Long, ByVal unitType As Long, ByVal SFifoThreshold As Long) As Long
Public Declare Function ZT8361_GetSFifoThreshold Lib "pci8361.dll" (ByVal cardNO As Long, ByVal unitType As Long) As Long
'每次采一批数,参数说明请看《pci8361.h》
Public Declare Function ZT8361_ReadSFifo Lib "pci8361.dll" ( _
ByVal cardNO As Long, _
ByVal unitType As Long, _
ByVal dataType As Long, _
ByRef pResultArr As Any, _
ByVal wantReadCount As Long) As Long
                                                              
Public Declare Function ZT8361_AISFifo Lib "pci8361.dll" ( _
ByVal cardNO As Long, _
ByVal dataType As Long, _
ByRef pFloatResultArr As Single, _
ByVal wantReadCount As Long) As Long

Public Declare Function ZT8361_OpenIRQ Lib "pci8361.dll" (ByVal cardNO As Long, _
                                                            ByVal hEventSFifo As Long, _
                                                            ByVal hEventHFifoFewData As Long, _
                                                            ByVal hEventHFifoHalf As Long, _
                                                            ByVal hEventEI As Long, _
                                                            ByVal hEventADFinish As Long) As Long
Public Declare Function ZT8361_CloseIRQ Lib "pci8361.dll" (ByVal cardNO As Long) As Long
'开关量部分
Public Declare Function ZT8361_DIBit Lib "pci8361.dll" ( _
ByVal cardNO As Long, _
ByVal groupNO As Long, _
ByVal chNO As Long) As Long

Public Declare Function ZT8361_DIAll Lib "pci8361.dll" ( _
ByVal cardNO As Long, _
ByVal groupNO As Long) As Long

Public Declare Function ZT8361_DOBit Lib "pci8361.dll" ( _
ByVal cardNO As Long, _
ByVal groupNO As Long, _
ByVal chNO As Long, _
ByVal nState As Long) As Long

Public Declare Function ZT8361_DOAll Lib "pci8361.dll" ( _
ByVal cardNO As Long, _
ByVal groupNO As Long, _
ByVal nStateAll As Long) As Long



'计数器部分
Public Declare Function ZT8361_CTStart Lib "pci8361.dll" (ByVal cardNO As Long, _
                                                            ByVal chNO As Long, _
                                                            ByVal CTMode As Long, _
                                                            ByVal CTinitVal As Long) As Long
Public Declare Function ZT8361_CTRead Lib "pci8361.dll" (ByVal cardNO As Long, _
                                                           ByVal chNO As Long, _
                                                           ByVal lockBeforeRead As Long) As Long
Public Declare Function ZT8361_CTStop Lib "pci8361.dll" (ByVal cardNO As Long, _
                                                           ByVal chNO As Long, _
                                                           ByVal CTMode As Long) As Long


Public Declare Function ZT8361_InitIRQ Lib "pci8361.dll" (ByVal cardNO As Long, _
                                ByVal irqSource As Long) As Long

Public Declare Function ZT8361_SetAIresultTrans Lib "pci8361.dll" ( _
ByVal cardNO As Long, _
ByRef pNeedTrans As Long, _
ByRef pMeasureDown As Single, _
ByRef pMeasureUp As Single, _
ByRef pEngiDown As Single, _
ByRef pEngiUp As Single, _
ByRef pReviseK As Single, _
ByRef pReviseB As Single) As Long


Public Declare Function ZT8361_GetAIresultTrans Lib "pci8361.dll" ( _
ByVal cardNO As Long, _
ByRef pNeedTrans As Long, _
ByRef pMeasureDown As Single, _
ByRef pMeasureUp As Single, _
ByRef pEngiDown As Single, _
ByRef pEngiUp As Single, _
ByRef pReviseK As Single, _
ByRef pReviseB As Single) As Long


'建议用枚举类型指定AD量程或DA输出范围,可增加程序的可读性
Public Enum AI
    'AI方式
    Range_initCode = 0 '原码方式
    Range_0__5000mV = 1
    Range_0__10000mV = 2
    'Range_1000__5000mV = 3
    'Range_N2500__P2500mV = 4
    Range_N5000__P5000mV = 5
    Range_N10000__P10000mV = 6
    Range_0__4000mV = 7
    Range_N3330__P3330mV = 8
    Range_0__10000uA = 9
    Range_0__20000uA = 10
    Range_4000__20000uA = 11
End Enum

Public Enum AO
    'AO方式
    Range_initCode = 0 '原码方式
    'Range_0__5000mV = 1
    Range_0__10000mV = 2
    'Range_1000__5000mV = 3
    'Range_N2500__P2500mV = 4
    'Range_N5000__P5000mV = 5
    Range_N10000__P10000mV = 6
    'Range_0__2500mV = 7
    'Range_0__10000uA = 8
    'Range_4000__20000uA = 9
End Enum

⌨️ 快捷键说明

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