基于VB和研华1710lL采集卡的摩擦温度采集
2015-08-03 09:43
579 查看
近一段时间,应一研究生的要求帮忙做个采集温度和计算摩擦系数的数据采集系统,系统采用研华的PCI采集卡1710lL。在这方面研华的资料比较少,研究了几个晚上终于弄成了一个采集数据的程序。没有使用研华的控件。
首先是初始化通道,设置程序显示界面及曲线图初始化,导入研华驱动公共文件。
使用单通道和多通道的初始化有点不同,本以为初始化多个单通道就能实现多通道的但是不行,获取的数据根本不是实际的数据。所以只能设置多通道的方法来获取数据。
画曲线子程序
采集数据使用一个定时器定时读取PCI上内存地址的数据。在界面上增加选择采集时间,时间越短,采样数据越准确,可根据采样率要求自行选择采集周期。使用一个Timer定时器。
首先是初始化通道,设置程序显示界面及曲线图初始化,导入研华驱动公共文件。
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
相关文章推荐
- vb.net和c#的区别
- 组合查询 ——vb
- VB.Command()的参数
- VB.Command()的参数
- VB.net工程的引用修改问题
- vbox磁盘空间扩容
- vbox克隆虚拟机,网卡启动报错“Device eth0 does not seem to be present”
- PDM与Excel利用VB脚本进行互导
- VBScript使用CDO.Message发送邮件
- Windows7解决VBoxDD.dll不能加载
- vba excel编程三日谈(3)
- vba excel编程三日谈(2)
- vba excel编程三日谈(1)
- [VBS]关机恶作剧
- [VBS]遍历XML文档
- myFFDrop源代码(VB.NET)
- [VBS]带参数删除扩展名不是*.h、*.c、*.cpp的全部文件
- [VBS]脚本中的字典、动态数组、队列和堆栈
- 调用windows的sapi制作单词朗读应用
- VBA 里如何正确显示日语