| 計測用車いすの開発 〜プログラムの詳細とダウンロード〜 Sub Calc2()
'
'******************
' 計算2
'******************
'
' 計算条件
'
Start_pos = Val(Form7.txtStartPosCond) 'sec
End_pos = Val(Form7.txtEndPosCond) 'sec
Tq_Limit = Val(Form7.txtLimitCond) 'Nm
'
' 初期化
'
Flag_c = 0
For i = 1 To 4
OpSample(i) = 0
OpTime(i) = 0
Next i
For i = 1 To 3
Speed_maxc(i) = 0: Speed_avc(i) = 0: Speed_minc(i) = 0: dSpeedc(i) = 0
Tq_maxc(i, 0) = 0: Tq_avc(i, 0) = 0: Tq_minc(i, 0) = 0: dTqc(i, 0) = 0
Tq_maxc(i, 1) = 0: Tq_avc(i, 1) = 0: Tq_minc(i, 1) = 0: dTqc(i, 1) = 0
Power_maxc(i, 0) = 0: Power_avc(i, 0) = 0: Power_minc(i, 0) = 0: dPowerc(i, 0) = 0
Power_maxc(i, 1) = 0: Power_avc(i, 1) = 0: Power_minc(i, 1) = 0: dPowerc(i, 1) = 0
Alpha_deg_maxc(i) = 0: Alpha_deg_minc(i) = 0: dAlpha_degc(i) = 0
Beta_deg_maxc(i) = 0: Beta_deg_minc(i) = 0: dBeta_degc(i) = 0
y_maxc(i) = 0: y_minc(i) = 0: dyc(i) = 0
St_time(i) = 0: St_distance(i) = 0: St_angle(i) = 0
Next i
'
' データ処理区間の設定
'
For i = 2 To DataNum
If Form7.optLimit_ch0.Value = True Then Tqc = Tq(0, i)
If Form7.optLimit_ch1.Value = True Then Tqc = Tq(1, i)
If Form7.optLimit_Auto.Value = True And Tq_max(0) >= Tq_max(1) Then Tqc = Tq(0, i)
If Form7.optLimit_Auto.Value = True And Tq_max(1) > Tq_max(0) Then Tqc = Tq(1, i)
'
If Flag_c = 0 And Start_pos <= SampClk / 1000 * i Then
Sample_start = i
Time_start = SampClk / 1000 * i
Flag_c = 1
ElseIf Flag_c = 1 And Tqc < Tq_Limit Then
Flag_c = 2
ElseIf Flag_c = 2 And Tqc > Tq_Limit Then
OpSample(1) = i
OpTime(1) = SampClk / 1000 * i
Flag_c = 3
ElseIf Flag_c = 3 And Tqc < Tq_Limit Then
Flag_c = 4
ElseIf Flag_c = 4 And Tqc > Tq_Limit Then
OpSample(2) = i
OpTime(2) = SampClk / 1000 * i
Flag_c = 5
ElseIf Flag_c = 5 And Tqc < Tq_Limit Then
Flag_c = 6
ElseIf Flag_c = 6 And Tqc > Tq_Limit Then
OpSample(3) = i
OpTime(3) = SampClk / 1000 * i
Flag_c = 7
ElseIf Flag_c = 7 And Tqc < Tq_Limit Then
Flag_c = 8
ElseIf Flag_c = 8 And Tqc > Tq_Limit Then
OpSample(4) = i
OpTime(4) = SampClk / 1000 * i
Flag_c = 9
ElseIf Flag_c = 9 And End_pos >= SampClk / 1000 * i Then
Sample_end = i
Time_end = SampClk / 1000 * i
Flag_c = 10
End If
Next i
'
' 計算可能なストロークの個数
'
If Flag_c >= 9 Then DataNoc = 3
If Flag_c >= 7 And Flag_c < 9 Then DataNoc = 2
If Flag_c >= 5 And Flag_c < 7 Then DataNoc = 1
If Flag_c < 5 Then DataNoc = 0
'
' 初期値(計算可能範囲)
'
If DataNoc <> 0 Then
For i = 1 To DataNoc
Speed_maxc(i) = Speed(2, OpSample(i)): Speed_minc(i) = Speed(2, OpSample(i))
Tq_maxc(i, 0) = Tq(0, OpSample(i)): Tq_minc(i, 0) = Tq(0, OpSample(i))
Tq_maxc(i, 1) = Tq(1, OpSample(i)): Tq_maxc(i, 1) = Tq(1, OpSample(i))
Tq_avc(i, 0) = 0: Tq_avc(i, 1) = 0
Power_maxc(i, 0) = Power(0, OpSample(i)): Power_minc(i, 0) = Power(0, OpSample(i))
Power_maxc(i, 1) = Power(1, OpSample(i)): Power_minc(i, 1) = Power(1, OpSample(i))
Power_avc(i, 0) = 0: Power_avc(i, 1) = 0
Alpha_deg_maxc(i) = Alpha_deg(OpSample(i)): Alpha_deg_minc(i) = Alpha_deg(OpSample(i))
Beta_deg_maxc(i) = Beta_deg(OpSample(i)): Beta_deg_minc(i) = Beta_deg(OpSample(i))
y_maxc(i) = y(OpSample(i)): y_minc(i) = y(OpSample(i))
Next i
End If
'
' 最大値,最小値,平均値,変動率の計算
'
If DataNoc <> 0 Then
For i = 1 To DataNoc
For ii = OpSample(i) To OpSample(i + 1)
If Speed_maxc(i) < Speed(2, ii) Then Speed_maxc(i) = Speed(2, ii)
If Speed_minc(i) > Speed(2, ii) Then Speed_minc(i) = Speed(2, ii)
If Tq_maxc(i, 0) < Tq(0, ii) Then Tq_maxc(i, 0) = Tq(0, ii)
If Tq_minc(i, 0) > Tq(0, ii) Then Tq_minc(i, 0) = Tq(0, ii)
If Tq_maxc(i, 1) < Tq(1, ii) Then Tq_maxc(i, 1) = Tq(1, ii)
If Tq_minc(i, 1) > Tq(1, ii) Then Tq_minc(i, 1) = Tq(1, ii)
If Power_maxc(i, 0) < Power(0, ii) Then Power_maxc(i, 0) = Power(0, ii)
If Power_minc(i, 0) > Power(0, ii) Then Power_minc(i, 0) = Power(0, ii)
If Power_maxc(i, 1) < Power(1, ii) Then Power_maxc(i, 1) = Power(1, ii)
If Power_minc(i, 1) > Power(1, ii) Then Power_minc(i, 1) = Power(1, ii)
If Alpha_deg_maxc(i) < Alpha_deg(ii) Then Alpha_deg_maxc(i) = Alpha_deg(ii)
If Alpha_deg_minc(i) > Alpha_deg(ii) Then Alpha_deg_minc(i) = Alpha_deg(ii)
If Beta_deg_maxc(i) < Beta_deg(ii) Then Beta_deg_maxc(i) = Beta_deg(ii)
If Beta_deg_minc(i) > Beta_deg(ii) Then Beta_deg_minc(i) = Beta_deg(ii)
If y_maxc(i) < y(ii) Then y_maxc(i) = y(ii)
If y_minc(i) > y(ii) Then y_minc(i) = y(ii)
Speed_avc(i) = Speed_avc(i) + (Speed(2, ii) / (OpSample(i + 1) - OpSample(i))) '平均速度(m/s)
Tq_avc(i, 0) = Tq_avc(i, 0) + (Tq(0, ii) / (OpSample(i + 1) - OpSample(i))) '平均トルク(Nm)
Tq_avc(i, 1) = Tq_avc(i, 1) + (Tq(1, ii) / (OpSample(i + 1) - OpSample(i))) '平均トルク(Nm)
Power_avc(i, 0) = Power_avc(i, 0) + (Power(0, ii) / (OpSample(i + 1) - OpSample(i))) '平均出力(W)
Power_avc(i, 1) = Power_avc(i, 1) + (Power(1, ii) / (OpSample(i + 1) - OpSample(i))) '平均出力(W)
Next ii
If Speed_avc(i) <> 0 Then
dSpeedc(i) = (Speed_maxc(i) - Speed_minc(i)) / Speed_avc(i) '速度変動率
End If
If Tq_avc(i, 0) <> 0 Then
dTqc(i, 0) = (Tq_maxc(i, 0) - Tq_minc(i, 0)) / Tq_avc(i, 0) 'トルク変動率
End If
If Tq_avc(i, 1) <> 0 Then
dTqc(i, 1) = (Tq_maxc(i, 1) - Tq_minc(i, 1)) / Tq_avc(i, 1) 'トルク変動率
End If
If Power_avc(i, 0) <> 0 Then
dPowerc(i, 0) = (Power_maxc(i, 0) - Power_minc(i, 0)) / Power_avc(i, 0) 'エネルギ変動率
End If
If Power_avc(i, 1) <> 0 Then
dPowerc(i, 1) = (Power_maxc(i, 1) - Power_minc(i, 1)) / Power_avc(i, 1) 'エネルギ変動率
End If
'
dAlpha_degc(i) = Abs(Alpha_deg_maxc(i) - Alpha_deg_minc(i))
dBeta_degc(i) = Abs(Beta_deg_maxc(i) - Beta_deg_minc(i))
dyc(i) = Abs(y_maxc(i) - y_minc(i))
St_time(i) = OpTime(i + 1) - OpTime(i) '1ストロークの時間(sec)
St_distance(i) = Distance(2, OpSample(i + 1)) - Distance(2, OpSample(i)) '1ストロークの距離(m)
St_angle(i) = (St_distance(i) / Rw) * 180 / 3.14159 '1ストロークの角度(deg)
Next i
End If
'
End Sub
|
|
[ Wheelchair Home Page ] [ Wheelchair Measuring System ] |
| このページに関するお問い合わせはkhirata@nmri.go.jpまでお願いします |