使用VB与仪器进行串口通信,实现了实时数据采集,由于仪器数据相位角显示的范围是从-180°到180°,超过180°后又到了-180°,小于-180°时又到180°,如此循环。
但是当数据变化超过180°,就很难准确判断相位的变化方向和大小。
比如开始仪器显示相位为150°,过了一段较长时间显示的相位为140°,此时相位的变化有多种可能:1、减小10° 2、增大350°
现在希望能够编写一段程序,实现对前后短时间内(比如0.5秒采集一次,在此时间范围内可以保证数据变化的准确性)采集的两个数据进行比较,比如一旦数值的符号出现变化,程序就自动进行记录,并能够判断相位值变化的方向(从正到负或从负到正)以及变化的次数。本人vb新手,请大老们多多提携,谢谢!
但是当数据变化超过180°,就很难准确判断相位的变化方向和大小。
比如开始仪器显示相位为150°,过了一段较长时间显示的相位为140°,此时相位的变化有多种可能:1、减小10° 2、增大350°
现在希望能够编写一段程序,实现对前后短时间内(比如0.5秒采集一次,在此时间范围内可以保证数据变化的准确性)采集的两个数据进行比较,比如一旦数值的符号出现变化,程序就自动进行记录,并能够判断相位值变化的方向(从正到负或从负到正)以及变化的次数。本人vb新手,请大老们多多提携,谢谢!
'放置一个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
以上只是思路,你自己试试
比如
1*2 判断完后马上进行
2*3……
如此循环
数据采集不知是上位机主动还是下位机主动。若上位机主动则应将发送命令的代码置于一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
Private Sub Text1_Change()
If Val(Text1.Tag) * Val(Text1) < 0 Then '检测符号变化
SaveData Val(Text1)'在此进行数据保存
End If
Text1.Tag = Val(Text1)
End Sub