計測用車いすの開発 〜プログラムの詳細とダウンロード〜 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までお願いします |