計測用車いすの開発
〜プログラムの詳細とダウンロード〜

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までお願いします