您的位置:首页 > 编程语言 > VB

基于VB和研华1710lL采集卡的摩擦温度采集

2015-08-03 09:43 579 查看
近一段时间,应一研究生的要求帮忙做个采集温度和计算摩擦系数的数据采集系统,系统采用研华的PCI采集卡1710lL。在这方面研华的资料比较少,研究了几个晚上终于弄成了一个采集数据的程序。没有使用研华的控件。

首先是初始化通道,设置程序显示界面及曲线图初始化,导入研华驱动公共文件。

GainArray(0) = 0
GainArray(1) = 0
GainArray(2) = 0
GainArray(3) = 0
Call tabinit '初始化表格
For i = 1 To 60
cbotime.AddItem (i)
Next
Picture1.BackColor = QBColor(15)
Picture1.Scale (-5, 2000)-(6000, -2000) '定义坐标系
Picture1.DrawWidth = 2
Picture1.CurrentX = -2
Picture1.CurrentY = -1
Picture1.Print 0
Picture1.Line (0, 2000)-(0, -2000), QBColor(1) '画竖轴
Picture1.Line (-5, 0)-(6000, 0), QBColor(1) '画横轴

drawtype = 1                                 '初始绘制连续的曲线图
Mindata = 0: Maxdata = 3                   '下限、上限温度报警初始值

baohuzhi(0).Text = Mindata '显示下限
baohuzhi(1).Text = Maxdata '上限温度值
'alarm1.FillColor = QBColor(10)               '报警指示灯初始颜色
'alarm2.FillColor = QBColor(10)
num = 1

'----------------多通道设置1-------------------
ErrCde = DRV_DeviceOpen(1, DriverHandle1)      '打开模拟量输入端口 设备号0(为安装在系统中的板卡号000,001) 打开第0个采集卡
If (ErrCde <> 0) Then
DRV_GetErrorMessage ErrCde, szErrMsg
Response = MsgBox("通道1:" + szErrMsg, vbOKOnly, "Error!!")
Exit Sub
End If

ErrCde = DRV_DeviceOpen(1, DriverHandle2)      '打开数字量输出端口
If (ErrCde <> 0) Then
DRV_GetErrorMessage ErrCde, szErrMsg
Response = MsgBox("通道1:" + szErrMsg, vbOKOnly, "Error!!")
Exit Sub
End If
'-------------------
With MAIConfig_T
.NumChan = 4 '4通道
.StartChan = 0 '从0 通道开始
.GainArray = DRV_GetAddress(GainArray(0))  'Array(0, 0, 0,0) '各通道增益值(0为+-5V)
End With
ErrCde = DRV_MAIConfig(DriverHandle1, MAIConfig_T)
If (ErrCde <> 0) Then
DRV_GetErrorMessage ErrCde, szErrMsg
Response = MsgBox("多通道设置错误:" + szErrMsg, vbOKOnly, "Error!!")
Exit Sub
End If

MAIVoltageIn.NumChan = MAIConfig_T.NumChan
MAIVoltageIn.StartChan = MAIConfig_T.StartChan
MAIVoltageIn.GainArray = DRV_GetAddress(GainArray(0))  '得到值0
MAIVoltageIn.TrigMode = 0


使用单通道和多通道的初始化有点不同,本以为初始化多个单通道就能实现多通道的但是不行,获取的数据根本不是实际的数据。所以只能设置多通道的方法来获取数据。
画曲线子程序

'画连续曲线/间断散点图
Sub DrawCurve()
On Error GoTo hh
If num = 0 Or num = 1 Then Exit Sub
'Picture1.Cls
Picture1.DrawWidth = 1

'0黑,1蓝,2绿,3青,4红,5洋红,6黄,7白

gX0 = (num - 1) * 6: gX1 = num * 6   '
wY0 = T_Data(num - 1) * 3: wY1 = T_Data(num) * 3
mY0 = M_Data(num - 1) * 3: mY1 = M_Data(num) * 3
Select Case drawtype
Case 1

Picture1.Line (gX0, wY0)-(gX1, wY1), QBColor(4) '温度值

Picture1.Line (gX0, mY0)-(gX1, mY1), QBColor(1) '摩擦值

Case 2

Picture1.PSet (gX1, wY1), QBColor(4) '温度描点

Picture1.PSet (gX1, mY1), QBColor(1) '温度描点

End Select

hh:  Exit Sub
End Sub


采集数据使用一个定时器定时读取PCI上内存地址的数据。在界面上增加选择采集时间,时间越短,采样数据越准确,可根据采样率要求自行选择采集周期。使用一个Timer定时器。

Private Sub Tim_Reader_Timer()
Dim u As String
If num > 1000 Then

'到显示不下时先保存数据,然后重新画
If ChkSave.value = 1 Then
Tim_Reader.Enabled = False
'-----------------
Randomize
filesName = App.Path + "\DataSaves\" + Format(Now, "YYYYMMDDHHMMSS") & Int(Rnd(100) * 100) & ".txt"
If (fs.FileExists(filesName)) Then
'存在就另外随机创建文件
filesName = App.Path + "\DataSaves\" + Format(Now, "YYYYMMDDHHMMSS") & Int(Rnd(100) * 100) & ".txt"
fs.CreateTextFile (filesName)
Else
fs.CreateTextFile (filesName)
End If
F3 = FreeFile
Open filesName For Output As #F3
Print #F3, "压力值" & "," & "温度值" & "," & "摩擦系数", " & "; 高温度值; " "
For j = 1 To num - 1
Print #F3, F_Data(j) & "," & T_Data(j) & "," & M_Data(j), " & T1_Data(j)"
Next
Close #F3

Tim_Reader.Enabled = True
End If

Call renew

End If
'T_Data(1200) As Single ' 温度收集数据
'M_Data(1200) As Single '摩擦系数数据
'F_Data(1200) As Single '压力数据
'----------------------
MAIVoltageIn.VoltageArray = DRV_GetAddress(volval(0))
ErrCde = DRV_MAIVoltageIn(DriverHandle1, MAIVoltageIn) '获取多通道数据
If (ErrCde <> 0) Then
DRV_GetErrorMessage ErrCde, szErrMsg
Response = MsgBox("1:" + szErrMsg, vbOKOnly, "Error!!")
Exit Sub
End If
T_Data(num) = Val(volval(0)) ' (Val(voltage) - 1) * 50             '标度变换(温度值)
wendu(0).Text = Format$(T_Data(num), "0.0")
'----------------------
MAIVoltageIn.VoltageArray = DRV_GetAddress(volval(0))
ErrCde = DRV_MAIVoltageIn(DriverHandle1, MAIVoltageIn) '获取多通道数据
If (ErrCde <> 0) Then
DRV_GetErrorMessage ErrCde, szErrMsg
Response = MsgBox("2:" + szErrMsg, vbOKOnly, "Error!!")
Exit Sub
End If
M_Data(num) = Val(volval(1)) '  (Val(voltage_m) - 1) * 50             '标度变换(摩擦值)
mochaxishu(0).Text = Format$(M_Data(num), "0.0")
'---------------------------
MAIVoltageIn.VoltageArray = DRV_GetAddress(volval(0))
ErrCde = DRV_MAIVoltageIn(DriverHandle1, MAIVoltageIn) '获取多通道数据
If (ErrCde <> 0) Then
DRV_GetErrorMessage ErrCde, szErrMsg
Response = MsgBox("3:" + szErrMsg, vbOKOnly, "Error!!")
Exit Sub
End If
F_Data(num) = Val(volval(2)) ' (Val(voltage_f) - 1) * 50             '标度变换(压力值)
force.Text = Format$(F_Data(num), "0.0")
'----------------------
MAIVoltageIn.VoltageArray = DRV_GetAddress(volval(0))
ErrCde = DRV_MAIVoltageIn(DriverHandle1, MAIVoltageIn) '获取多通道数据
If (ErrCde <> 0) Then
DRV_GetErrorMessage ErrCde, szErrMsg
Response = MsgBox("3:" + szErrMsg, vbOKOnly, "Error!!")
Exit Sub
End If
T1_Data(num) = Val(volval(3)) ' (Val(voltage_f) - 1) * 50             '标度变换(压力值)
gaowen(4).Text = Format$(F_Data(num), "0.0")
'----------------------

'ErrCde = DRV_AIVoltageIn(DriverHandle5, AIVoltageIn_F)  '获取AI3通道数据(实型电压值)
'If (ErrCde <> 0) Then
'DRV_GetErrorMessage ErrCde, szErrMsg
'Response = MsgBox(szErrMsg, vbOKOnly, "Error!!")
'Exit Sub
'End If
'F_Data(num) = (Val(voltage_f) - 1) * 50             '标度变换(压力值)
'force.Text = Format$(F_Data(num), "0.0")
'----------------------
msgrd_show.Row = num
msgrd_show.Col = 1
msgrd_show.CellAlignment = vbCenter
msgrd_show.Text = Now()
msgrd_show.Col = 2
msgrd_show.CellAlignment = vbCenter
msgrd_show.Text = T_Data(num) 'filedata(num - 2) 温度值
msgrd_show.Col = 3
msgrd_show.CellAlignment = vbCenter
msgrd_show.Text = M_Data(num) 'filedata(num - 1) 摩擦系数值
msgrd_show.Col = 4
msgrd_show.CellAlignment = vbCenter
msgrd_show.Text = T1_Data(num) 'filedata(num - 1) 摩擦系数值

'Call alarm '不做报警提示
Call Calculates                           '调用计算极值、平均值子程序
Call DrawCurve                                 '调用绘图子程序
num = num + 1
End Sub

注,文章属于原创,如转载请联系作者:QQ:416824825
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: