?? classdpaedata.cls
字號:
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END
Attribute VB_Name = "ClassDPAEDATA"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Option Explicit
Private Type T_RunMode
No As Integer
ModeStr As String * 10
ParaStr As String * 1
ModeCode As Byte
End Type
Private Type T_TrigMode
No As Integer
ModeStr As String * 9
ParaStr As String * 4
ModeCode As Byte
End Type
Private Type T_TrigLevel
LevelPercentStr As String * 6 '+xx.x%
ParaStr As String * 8 '8對應-100%, 248對應+1+100%, 128對應0
LevelPercent As Single '觸發(fā)電壓百分數(shù),具體電壓需要參考通道增益
End Type
Private Type T_Gain
No As Integer
GainStr As String * 10
ParaStr As String * 8
MaxInVol As Single '最高輸入電壓 單位:V
End Type
Private Type T_ADFrequency
No As Integer
FreStr As String * 6
Para As Byte '硬件寫入數(shù)據(jù)
Fre As Single '采樣頻率,單位MHz
End Type
Private Type T_DelayAddr
No As Integer
DelayStr As String
Para As Byte '硬件寫入數(shù)據(jù)
Addr As Integer '延遲地址數(shù),單位:字
End Type
Private Type TADBoardParas
DATAFileName As String * 80 '數(shù)據(jù)文件名,保持原名,避免被ReName,以備檢查。它應當與UnitNo有合成關(guān)系。
UnitNo As Integer '數(shù)據(jù)采集單元編號,應當從磁盤名上獲得,表示本數(shù)據(jù)文件來自哪個采樣單元
GroupSwitch(1 To 32) As Boolean '采樣組各個單元的狀態(tài)開關(guān),以便從一個文件查找其它文件
CreateTime As Date
Operator As String * 10
Brief As String * 120
RunMode As T_RunMode
TrigMode As T_TrigMode
Gain As T_Gain
ADFre As T_ADFrequency
TrigLevel As T_TrigLevel
DelayNum As T_DelayAddr
SampleLen As Integer
End Type
Private Type T_DATABlock
EventNo As Long
AbsDate As Date
uSTimer As Currency
nSTimer As Currency
DataBuffer() As Integer
End Type
Private Type MT
T() As Currency
m() As Single
End Type
'硬件固定參數(shù)
Const ADBoardName As String = "DPAE—分布式并行控制聲發(fā)射系統(tǒng),USB接口50兆12位數(shù)據(jù)采集板"
Const DeveloperName As String = "數(shù)據(jù)采集板硬件設計制作:陸志梁;USB接口硬件設計制作及下位上位機通訊驅(qū)動軟件開發(fā):張智河。"
Const BuffSize As Integer = 4096 '采樣長度
Const MaxSignal As Single = 1 '最高輸入電壓
Const MinSignal As Single = -1 '最低輸入電壓
Const SignalChNum As Integer = 1 '采樣通道數(shù) 1, 即僅有第一通道
'硬件可調(diào)參數(shù)表
Dim RunModeTable(0 To 1) As T_RunMode
Dim TrigModeTable(0 To 6) As T_TrigMode
Dim GainTable(0 To 4) As T_Gain
Dim ADFreTable(0 To 7) As T_ADFrequency
Dim DelayTable(0 To 15) As T_DelayAddr
'********* 缺省參數(shù) *************************************
Const DefaultDATAFileName As String = "No File"
Const DefaultParaFile As String = "C:\WINNT\SYSTEM\DPAE1.CNF"
Dim DPAEFileName As String
'********* 當前選定的設備參數(shù)表號 **************************
Dim CurrentRunNo As Integer
Dim CurrentTrigModeNo As Integer
Dim CurrentCh1GainNo As Integer
Dim CurrentCh2GainNo As Integer
Dim CurrentADFreNo As Integer
Dim CurrentTrigLevel As T_TrigLevel
Dim CurrentDelayNo As Integer
Dim CurrentSampleLen As Integer '采樣長度 通常取2的整數(shù)冪,512,1024,2048,4096
'注意,在USB傳送數(shù)據(jù)的情況下,采樣長度與傳輸速度沒有線性增加的關(guān)系,
'一般來說,傳送數(shù)據(jù)越多,平均傳送時間越短。
Dim Paras As TADBoardParas
Dim DATABlock As T_DATABlock
Dim DATAFileNo As Integer
Dim SavedEventNum As Long
Dim EventNum As Long '注意:這里的事件數(shù)是指波形數(shù)據(jù)段或記錄塊數(shù),在有刪節(jié)時并不等于每條記錄的波形號。
Dim RecordBytes As Long
Dim HeadBytes As Long
Dim AEFileHead As New ClassFileHead '文件頭變量
Public Sub SaveDTEventsAsNewFile(DT As Currency, EventNo1 As Long, EventNo2 As Long, OldFileName As String, NewFileName As String)
Dim FileFormatHeadBytes As Long
Dim OldFileNo As Integer
Dim NewFileNo As Integer
Dim LParas As TADBoardParas
Dim LP As Long
Dim LRecordBytes As Long, LHeadBytes As Long
Dim LEventNum As Long
Dim LDATABlock As T_DATABlock
Dim LAEFileHead As New ClassFileHead
Dim i As Long
Dim n1 As Long, n2 As Long
Dim t0 As Currency
n1 = EventNo1
n2 = EventNo2
With LAEFileHead
.ReadFileHead (OldFileName)
FileFormatHeadBytes = .FileHeadByteNum
'.WriteFileHead (NewFileName)
End With
OldFileNo = FreeFile
Open OldFileName For Binary As #OldFileNo
Seek #OldFileNo, FileFormatHeadBytes + 1
Get #OldFileNo, , LParas
LHeadBytes = Seek(OldFileNo) - 1
ReDim LDATABlock.DataBuffer(0 To LParas.SampleLen + 512) As Integer
Seek #OldFileNo, LHeadBytes + 1
Get #OldFileNo, , LDATABlock
LRecordBytes = Seek(OldFileNo) - 1 - LHeadBytes
LEventNum = (LOF(OldFileNo) - LHeadBytes) \ LRecordBytes
If n2 < n1 Then Call Swap(n1, n2)
If n1 < 1 Then n1 = 1
If n2 > LEventNum Then n2 = LEventNum
If n2 = 0 Then GoTo NoEvents
AEFileHead.WriteFileHead (NewFileName)
NewFileNo = FreeFile
Open NewFileName For Binary As #NewFileNo
Seek #NewFileNo, LOF(NewFileNo) + 1
Put #NewFileNo, , LParas
For i = n1 To n2
LP = (i - 1) * LRecordBytes + LHeadBytes + 1
Seek #OldFileNo, LP
Get #OldFileNo, , LDATABlock
Put #NewFileNo, , LDATABlock
Next i
Close #NewFileNo
NoEvents:
Close #OldFileNo
End Sub
Public Sub SaveEventsAsNewFile(EventNo1 As Long, EventNo2 As Long, OldFileName As String, NewFileName As String)
Dim FileFormatHeadBytes As Long
Dim OldFileNo As Integer
Dim NewFileNo As Integer
Dim LParas As TADBoardParas
Dim LP As Long
Dim LRecordBytes As Long, LHeadBytes As Long
Dim LEventNum As Long
Dim LDATABlock As T_DATABlock
Dim LAEFileHead As New ClassFileHead
Dim i As Long
Dim n1 As Long, n2 As Long
n1 = EventNo1
n2 = EventNo2
With LAEFileHead
.ReadFileHead (OldFileName)
FileFormatHeadBytes = .FileHeadByteNum
'.WriteFileHead (NewFileName)
End With
OldFileNo = FreeFile
Open OldFileName For Binary As #OldFileNo
Seek #OldFileNo, FileFormatHeadBytes + 1
Get #OldFileNo, , LParas
LHeadBytes = Seek(OldFileNo) - 1
ReDim LDATABlock.DataBuffer(0 To LParas.SampleLen + 512) As Integer
Seek #OldFileNo, LHeadBytes + 1
Get #OldFileNo, , LDATABlock
LRecordBytes = Seek(OldFileNo) - 1 - LHeadBytes
LEventNum = (LOF(OldFileNo) - LHeadBytes) \ LRecordBytes
If n2 < n1 Then Call Swap(n1, n2)
If n1 < 1 Then n1 = 1
If n2 > LEventNum Then n2 = LEventNum
If n2 = 0 Then GoTo NoEvents
AEFileHead.WriteFileHead (NewFileName)
NewFileNo = FreeFile
Open NewFileName For Binary As #NewFileNo
Seek #NewFileNo, LOF(NewFileNo) + 1
Put #NewFileNo, , LParas
For i = n1 To n2
LP = (i - 1) * LRecordBytes + LHeadBytes + 1
Seek #OldFileNo, LP
Get #OldFileNo, , LDATABlock
Put #NewFileNo, , LDATABlock
Next i
Close #NewFileNo
NoEvents:
Close #OldFileNo
End Sub
Public Sub LoadFileParas(DATAFile As String)
Dim DATABytes As Long
Dim FileFormatHeadBytes As Long
DPAEFileName = DATAFile
With AEFileHead
.ReadFileHead (DATAFileName)
FileFormatHeadBytes = .FileHeadByteNum
End With
DATAFileNo = FreeFile
Open DPAEFileName For Binary As #DATAFileNo
Seek #DATAFileNo, FileFormatHeadBytes + 1
Get #DATAFileNo, , Paras
HeadBytes = Seek(DATAFileNo) - 1
ReDim DATABlock.DataBuffer(0 To Paras.SampleLen + 512) As Integer
Seek #DATAFileNo, HeadBytes + 1
Get #DATAFileNo, , DATABlock
RecordBytes = Seek(DATAFileNo) - 1 - HeadBytes
Close #DATAFileNo
DATABytes = FileLen(DPAEFileName) - HeadBytes
EventNum = DATABytes \ RecordBytes
End Sub
Private Function RecordPointer(RecordNo As Long) As Long
RecordPointer = (RecordNo - 1) * RecordBytes + HeadBytes + 1
End Function
Public Sub GetWaveDATA(BlockNo As Long, Rec_nS As Currency, wavedata() As Single)
Dim i As Integer
Dim temp As Single
Dim temp0 As Single
DATAFileNo = FreeFile
Open DPAEFileName For Binary As #DATAFileNo
Seek DATAFileNo, RecordPointer(BlockNo)
Get #DATAFileNo, , DATABlock
Close #DATAFileNo
For i = 1 To Paras.SampleLen
If DATABlock.DataBuffer(i + 512) >= 0 Then
wavedata(i) = DATABlock.DataBuffer(i + 512) - 32768
Else
wavedata(i) = DATABlock.DataBuffer(i + 512) + 32767
End If
Next i
For i = Paras.SampleLen - 5 To Paras.SampleLen
wavedata(i) = wavedata(i - 5)
Next i
For i = 1 To 16
wavedata(i) = wavedata(i + 16)
Next i
'For i = 16 To 1 Step -1
'WaveDATA(i) = WaveDATA(i + 1)
'Next i
'temp0 = WaveDATA(32)
'temp0 = temp0 - WaveDATA(17)
'For i = 1 To 16
'temp = WaveDATA(i + 16)
'temp = temp - temp0
'If temp > 32767 Then temp = 32767
'If temp < -32768 Then temp = -32768
'WaveDATA(i) = Int(temp)
'Next i
Rec_nS = DATABlock.nSTimer
End Sub
Public Sub GetRecordTime(ByVal BlockNo As Long, ByRef RecNo As Long, ByRef RecDate As Date, ByRef Rec_uS As Currency, ByRef Rec_nS As Currency)
DATAFileNo = FreeFile
Open DPAEFileName For Binary As #DATAFileNo
Seek DATAFileNo, RecordPointer(BlockNo)
Get #DATAFileNo, , DATABlock
Close #DATAFileNo
With DATABlock
RecNo = .EventNo
RecDate = .AbsDate
Rec_uS = .uSTimer
Rec_nS = .nSTimer
End With
End Sub
Public Property Get RecordDate(ByRef RecordNo As Long) As Date
DATAFileNo = FreeFile
Open DPAEFileName For Binary As #DATAFileNo
Seek DATAFileNo, RecordPointer(RecordNo)
Get #DATAFileNo, , DATABlock
Close #DATAFileNo
RecordNo = DATABlock.EventNo
RecordDate = DATABlock.AbsDate
End Property
Public Property Get RecorduS(ByRef RecordNo As Long) As Currency
DATAFileNo = FreeFile
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -