关于使用vb进行数据采集后进行数值判断的问题
使用VB与仪器进行串口通信,实现了实时数据采集,由于仪器数据相位角显示的范围是从-180°到180°,超过180°后又到了-180°,小于-180°时又到180°,如此循环。
但是当数据变化超过180°,就很难准确判断相位的变化方向和大小。
比如开始仪器显示相位为150°,过了一段较长时间显示的相位为140°,此时相位的变化有多种可能:1、减小10° 2、增大350°
现在希望能够编写一段程序,实现对前后短时间内(比如0.5秒采集一次,在此时间范围内可以保证数据变化的准确性)采集的两个数据进行比较,比如一旦数值的符号出现变化,程序就自动进行记录,并能够判断相位值变化的方向(从正到负或从负到正)以及变化的次数。
本人vb新手,请大老们多多提携,谢谢!
[解决办法]
Dim OldValue As Single '全局变量保存旧值
'放置一个Timer控件,并必须确保timer的周期要小于相位的最小变化周期
Private Sub Timer1_Timer()
Dim NewValue As Single
NewValue = GetNewData() '读取新的数据
If OldValue * NewValue < 0 Then '检测符号变化
SaveData NewValue '在此进行数据保存
End If
OldValue = NewValue
End Sub
以上只是思路,你自己试试
[解决办法]
数据保存可使用Timer控件,调整Timer控件属性Interval来控制数据比较的周期。代码中的变量大部分应定义为全局变量,以便数据传递。
数据采集不知是上位机主动还是下位机主动。若上位机主动则应将发送命令的代码置于一Timer控件,Timer控件属性Interval来控制数据采集的周期。整个接收代码可写在MSCOMM控件的ONCOMM事件中。
保存数据和采集数据宜做在不同窗体。Timer控件属性Interval设置在100-200间,因为Timer控件时间精度不太准。
如下位机主动,应调整下位机的数据发送周期来满足要求。
下列代码应在与数据库及数据表连接好情况下使用。
Private Sub Timer1_Timer()
If ztG_dm1 <> ztG_Dm1Old Then '判断数据是否变化
'写处理数据语句
Adodc1.Recordset.AddNew '记录一组数据
Adodc1.Recordset(0) = Mid(Text2, 3, 2) & Mid(Text2, 6, 2) & _
Mid(Text2, 9, 2) & Mid(Text1, 1, 2) & Mid(Text1, 4, 2) '记录时间
Adodc1.Recordset(1) = gongyi_sj(0) & "- " & record_rq '记录日期
Adodc1.Recordset(2) = record_jm(0) '记录数据
Adodc1.Recordset(3) = record_jm(1) '记录数据
Adodc1.Recordset(4) = record_jm(2) '记录数据
Adodc1.Recordset(5) = record_jm(3) '记录数据
Adodc1.Recordset(6) = record_jm(4) '记录数据
Adodc1.Recordset(7) = record_jm(5) '记录数据
Adodc1.Recordset(8) = record_jm(6) '记录数据
End If
ztG_Dm1Old = ztG_dm1
End Sub