有些VB的代码看不明白
Private lastPV(2 - 1) As Single '最近两次测量值,索引小的时间靠前
是什么意思?是定义一个二元数组吗 ?注释“索引小的时间靠前”我没有看明白什么意思。
还有以下这个类里的“outArr(k) = outArr(k) + inArr(k * inArrSize / outArrSize + i) ”部分, 我没有弄明白:
Public Function Filter(ByRef inArr() As Single, _
ByVal inArrSize As Long, _
ByVal outArrSize As Long) As Double
'温度的数字滤波算法
'采用 "去除最大最小值+加权平均递推 "算法消除毛刺
'每100ms采一个数,每0.7秒输出一个PID值
Filter = -1 '不明白filter=-1表示什么意思
If inArrSize < 20 Then MsgBox "inArrSize必须大于20 ": Exit Function
If outArrSize <= 2 Then MsgBox "outArrSize必须大于2 ": Exit Function
Dim outArr() As Single
ReDim outArr(outArrSize - 1)
'先把输入的值化为7个值
Dim i As Long, k As Long
For k = 0 To outArrSize - 1
outArr(k) = 0
'取前10个数
For i = 0 To 10 - 1
outArr(k) = outArr(k) + inArr(k * inArrSize / outArrSize + i) '这一块没有看明白!!!!!
Next i
'取后10个数
For i = 0 To 10 - 1
outArr(k) = outArr(k) + inArr((k + 1) * inArrSize / outArrSize - 10 + i)
Next i
'求平均
outArr(k) = outArr(k) / 20
Next k
If bFirstEnter = True Then '如果是第1次进入
'g_bFirstEnter = False
m_lastAverVal = outArr(0) '把历史平均值设为室温的第一个值
End If
请高手执教!
[解决办法]
Private lastPV(2 - 1) As Single 一维数组,个数为2,下标分别为0、1,对于下标从 0 开始的数组,有些人喜欢用 n-1 的方式来声明,表示数组个数为 n,纯属个人习惯。
里面 inArr(...) 一样是先将括号内的表达式求出值,该值作为下标取数组元素。具体逻辑自己分析。