NiDaq 测振动加速度

如果出现这个错误,插拔一下usb口

 1mV=100 mm/s2 ,NiDAQ的震动测试仪有一个毫伏和震动加速度的对应值 约等于10, 但每个仪器都会校准

Public Function GetVibrationData(ByRef Wave, ByRef msg As String, Optional ByVal Slot As Integer = 0) As Integer
'测试振动数据
 On Error GoTo ErrorHandler
            Dim taskHandle As Long
            Dim sampsPerChanRead As Long
            Dim numchannels As Long
            Dim fillMode As DAQmxFillMode
            Dim numSampsPerChannel As Long
            Dim numSampsFreq As Long
            Dim arraySizeInSamps As Long
            Dim StrChance As String
            Dim AdjustValue As Single
            Dim taskIsRunning As Boolean
            
            Dim nGain As Double
            Dim Data() As Double

            'If scanOrderOption.value = True Then
                fillMode = DAQmx_Val_GroupByScanNumber
            'Else
            '   fillMode = DAQmx_Val_GroupByChannel
            'End If
            
             
                    numSampsFreq = 51200
                    numSampsPerChannel = 51200 / 3

            
'            numSampsFreq = 51200 '8192  ' 8192 ' 8000 '8192  '8192  '4096 '50000 '2048 '10240 '4096
'            numSampsPerChannel = 12800 ' 8192 ' 51200  '34200 ' 32768  '16384 ' 32768 ' 8192 ' 8000 ' 20000 ' 8000 ' 2048 '' 10240 '4096 '10240  '8000 'CLng(samplesPerChannelTextBox.Text)
'

            'StrChance = "cDAQ1Mod1/ai0:3"
            StrChance = "cDAQ1Mod1/ai" & CStr(Slot)
            
            taskHandle = OpenMyCard(StrChance)
            taskIsRunning = True
         
            DAQmxErrChk DAQmxCfgSampClkTiming(taskHandle, "OnboardClock", CLng(numSampsFreq), DAQmx_Val_Rising, _
                            DAQmx_Val_AcquisitionType_FiniteSamps, CLng(numSampsPerChannel))
            
            DAQmxErrChk DAQmxGetTaskNumChans(taskHandle, numchannels)
            arraySizeInSamps = numSampsPerChannel * numchannels
            ReDim Data(arraySizeInSamps - 1)

             DoEvents
             Dim nSamptimes As Double
             nSamptimes = timeGetTime
             DAQmxErrChk DAQmxReadAnalogF64(taskHandle, numSampsPerChannel, 10#, _
                            fillMode, Data(0), arraySizeInSamps, sampsPerChanRead, ByVal 0&)
             

             Do While sampsPerChanRead < numSampsPerChannel - 1
                
                DoEvents
                If timeGetTime - nSamptimes > 3000 Then
                    Exit Do
                End If
             
             Loop
            
            Dim fMax, fMin As Variant
            Dim nMaxIndex  As Variant, nMinIndex As Variant
            Dim nMaxValueFre As Single, sngAccelerationValue As Single

            
            DAQmxErrChk DAQmxStopTask(taskHandle)
            DAQmxErrChk DAQmxClearTask(taskHandle)
            taskIsRunning = False
            
            Wave = Data
            Exit Function
ErrorHandler:
            Dim nData(0) As Integer
            Wave = nData
            msg = "Error: " & Err.Number & " " & Err.Description
End Function
Public Sub DAQmxErrChk(errorCode As Long)
'
'   Utility function to handle errors by recording the DAQmx error code
'   and message.
'

    Dim errorString As String
    Dim bufferSize As Long
    Dim Status As Long
    If (errorCode < 0) Then
        ' Find out the error message length.
        bufferSize = DAQmxGetErrorString(errorCode, 0, 0)
        ' Allocate enough space in the string.
        errorString = String$(bufferSize, 0)
        ' Get the actual error message.
        Status = DAQmxGetErrorString(errorCode, errorString, bufferSize)
        ' Trim it to the actual length, and display the message
        errorString = Left(errorString, InStr(errorString, Chr$(0)))
        Err.Raise errorCode, , errorString
    End If

End Sub
原文地址:https://www.cnblogs.com/zitjubiz/p/13031453.html