📄 ad_module.bas
字号:
Attribute VB_Name = "AD_Module"
Option Explicit
Public bDeviceRun As Boolean
Public hDevice As Long
Public hFileObject As Long
Public hDeviceFile As Long
Public hEvent As Long
Public Const MAX_SEGMENT = 128
Public pADBuffer(65536, MAX_SEGMENT) As Integer '建立二维数组(即缓冲级链),用于循环交替接受AD
'数据,以避免内存的重叠和重复拷贝,从而提高数据
'采集和处理效率
Public ReadIndex As Integer ' 级链缓冲区的索引号
Public Pointlxy(16384) As POINTAPI
Public hCollectDataThread As Long
Public Status As Boolean
Public DeviceID As Long
Public bCreateDevice As Boolean
Public ADPara As USB2013_PARA_AD
Public ProcessMode As Long '数据采集方式 1:数字方式 2:图形方式
Public Const DigitMode = 1
Public Const WaveMode = 2
Public Const SaveMode = 3
Public flag(16) As Boolean '置16通道标志,用此标志确定该通道是否被刷新
Public SegmentCounts As Integer '用于统计当前段总数
Public CurrentIndex As Integer '数据处理时使用的当前缓冲索引
Public Const PCI_BUS = 1
Public Const USB_BUS = 2
Public Const ISA_BUS = 3
Public Const AD_FILE_TYPE = &H0
Public Const DA_FILE_TYPE = &H1
Public Const DIO_FILE_TYPE = &H2
Public Const DEFAULT_BUS_TYPE = USB_BUS
Public Const DEFAULT_DEVICE_NUM = 8211
Public Const VOLT_BOTTOM_RANGE = -5000
Public Const VOLT_TOP_RANGE = 5000
Public Const FILE_END_FLAG = &HAA55AA55
Type File_Header
HeaderSizeBytes As Long '文件头信息长度
FileType As Long '指文件用处和类型
BusType As Long '设备总线类型(DEFAULT_BUS_TYPE)
DeviceNum As Long '该设备的ID编号(DEFAULT_DEVICE_ID)
ADPara As USB2013_PARA_AD '保存硬件参数
VoltBottomRange As Long '量程下限(mV)
VoltTopRange As Long '量程上限(mV)
FileEndFlag As Long '文件结束位(等于FILE_END_FLAG)
End Type
Public m_Wrote8KWCounter As Integer
Public m_WroteMB As Integer
Public m_WroteKB As Integer
Public m_WroteKWCounter As Integer
Public ChannelCount As Integer
Public nRemainningWords As Integer
Public ReadSizeWords As Integer
'
Public Hist_Header As File_Header
'文件的重载
Public Declare Function ReadFileHeader Lib "USB2013" Alias "USB2013_ReadFile" (ByVal hFileObject As Long, _
header As File_Header, ByVal OffsetBytes As Long, _
ByVal ReadSizeBytes As Long) As Boolean '读数据
Public Declare Function WriteFileHeader Lib "USB2013" Alias "USB2013_WriteFile" (ByVal hFileObject As Long, _
header As File_Header, ByVal nWriteSizeBytes As Long) As Boolean '保存用户空间中数据
Public Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
Function CollectDataFunction() As Long '数据采集
Dim i As Long
Dim bStatus As Boolean
ChannelCount = ADPara.LastChannel - ADPara.FirstChannel + 1 '采集通道总数
nRemainningWords = 8192 Mod (ChannelCount * 32) '取余数
ReadSizeWords = 8192 - nRemainningWords '使取余数以后的点,正好是通道的整数倍
' I = MessageBox(AD_Form.hwnd, "star thread", "Error", 0)
'初始化设备对象
If USB2013_InitDeviceAD(hDevice, ADPara) = False Then
i = MessageBox(AD_Form.hwnd, "不明确的初始化错误...", "Error", 0)
Exit Function
End If
ReadIndex = 0 '使级链缓冲的指针指向第一个缓冲区(即0缓冲区)
SegmentCounts = 0
Do While (bDeviceRun) '循环采集AD数据
If USB2013_ReadDeviceAD(hDevice, pADBuffer(0, ReadIndex), ReadSizeWords) = 0 Then
i = MessageBox(AD_Form.hwnd, "读数据出错...", "Error", 0)
Exit Function
End If
SetEvent (hEvent)
ReadIndex = (ReadIndex + 1) Mod MAX_SEGMENT ' 当采集完一段指定长度的数据后,将缓冲区索引号下移一个位置
Loop
End Function
Function ProcessDataFunction() As Long '数据处理
Dim Status As Boolean
Dim i As Long
CurrentIndex = 0 '置当前索引号为0
Do While (bDeviceRun)
Status = WaitForSingleObject(hEvent, INFINITE)
Select Case ProcessMode
Case DigitMode
Call AD_Form.ShowDigitProc '=1:数字显示
Case WaveMode
Call AD_Form.DrawWaveProc '=2:图形显示
Case SaveMode
Call AD_Form.SaveProc
End Select
CurrentIndex = (CurrentIndex + 1) Mod MAX_SEGMENT '当该缓冲区的数据被处理完后,将索引指针下一个位置
Loop
End Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -