VERSION 5.00 Begin VB.Form frmAnalysis BorderStyle = 3 '固定ダイアログ Caption = "2質点系振動解析プログラム(加速度法)" ClientHeight = 7230 ClientLeft = 150 ClientTop = 435 ClientWidth = 7455 LinkTopic = "Form1" MaxButton = 0 'False MinButton = 0 'False ScaleHeight = 7230 ScaleWidth = 7455 ShowInTaskbar = 0 'False StartUpPosition = 3 'Windows の既定値 Begin VB.CommandButton cmdCycle Caption = "固有周期の表示" Default = -1 'True Height = 375 Left = 5640 TabIndex = 39 Top = 240 Width = 1695 End Begin VB.CheckBox chkPicture Caption = "動画表示" Height = 255 Left = 5640 TabIndex = 33 Top = 3120 Value = 1 'チェック Width = 1335 End Begin VB.Frame frmForce Caption = "外力選択" Height = 3495 Left = 120 TabIndex = 25 Top = 3600 Width = 5415 Begin VB.TextBox txtDisMax Alignment = 1 '右揃え Height = 270 Left = 3480 TabIndex = 50 Text = "1" Top = 2760 Width = 1695 End Begin VB.TextBox txtOrgCyCleDis Alignment = 1 '右揃え Height = 270 Left = 3480 TabIndex = 48 Text = "1" Top = 2400 Width = 1695 End Begin VB.OptionButton optCycleDis Caption = "定常波(変位)" Height = 255 Left = 120 TabIndex = 46 Top = 2400 Width = 1335 End Begin VB.TextBox txtMax Alignment = 1 '右揃え Height = 270 Left = 3480 TabIndex = 38 Text = "300" Top = 1920 Width = 1695 End Begin VB.TextBox txtOrgCycle Alignment = 1 '右揃え Height = 270 Left = 3480 TabIndex = 36 Text = "2" Top = 1560 Width = 1695 End Begin VB.OptionButton optCycle Caption = "定常波(加速度)" Height = 255 Left = 120 TabIndex = 34 Top = 1560 Value = -1 'True Width = 1575 End Begin VB.OptionButton optSelect Caption = "地震波" Height = 255 Left = 120 TabIndex = 32 Top = 3120 Width = 1335 End Begin VB.TextBox txtVel2 Alignment = 1 '右揃え Height = 270 Left = 3480 TabIndex = 31 Text = "60" Top = 1080 Width = 1695 End Begin VB.TextBox txtVel1 Alignment = 1 '右揃え Height = 270 Left = 1680 TabIndex = 30 Text = "30" Top = 1080 Width = 1695 End Begin VB.OptionButton optVel Caption = "初期速度(cm/s)" Height = 255 Left = 120 TabIndex = 29 Top = 1080 Width = 1575 End Begin VB.TextBox txtLng2 Alignment = 1 '右揃え Height = 270 Left = 3480 TabIndex = 28 Text = "10" Top = 480 Width = 1695 End Begin VB.TextBox txtLng1 Alignment = 1 '右揃え Height = 270 Left = 1680 TabIndex = 27 Text = "5" Top = 480 Width = 1695 End Begin VB.OptionButton optDis Caption = "初期変位(cm)" Height = 255 Left = 120 TabIndex = 26 Top = 480 Width = 1575 End Begin VB.Label lblCycleDisMax Alignment = 1 '右揃え Caption = "定常波最大値(cm):" Height = 255 Left = 1560 TabIndex = 49 Top = 2760 Width = 1815 End Begin VB.Label lblOrgDis Alignment = 1 '右揃え Caption = "定常波周期(s):" Height = 255 Left = 1560 TabIndex = 47 Top = 2400 Width = 1815 End Begin VB.Label lbl2Vel Alignment = 2 '中央揃え Caption = "2層目の初期速度" Height = 255 Left = 3480 TabIndex = 45 Top = 840 Width = 1695 End Begin VB.Label lbl1Vel Alignment = 2 '中央揃え Caption = "1層目の初期速度" Height = 255 Left = 1680 TabIndex = 44 Top = 840 Width = 1695 End Begin VB.Label lbl2Dis Alignment = 2 '中央揃え Caption = "2層目の初期変位" Height = 255 Left = 3480 TabIndex = 43 Top = 240 Width = 1695 End Begin VB.Label lbl1Dis Alignment = 2 '中央揃え Caption = "1層目の初期変位" Height = 255 Left = 1680 TabIndex = 42 Top = 240 Width = 1695 End Begin VB.Label lblCycleMax Alignment = 1 '右揃え Caption = "定常波最大値(cm/s2):" Height = 255 Left = 1440 TabIndex = 37 Top = 1920 Width = 1935 End Begin VB.Label lblOrg Alignment = 1 '右揃え Caption = "定常波周期(s):" Height = 255 Left = 1800 TabIndex = 35 Top = 1560 Width = 1575 End End Begin VB.CommandButton cmdWaveSelect Caption = "地震波選択(&W)" Height = 375 Left = 5640 TabIndex = 24 Top = 720 Width = 1695 End Begin VB.Frame frmValue Caption = "初期設定" Height = 3375 Left = 120 TabIndex = 11 Top = 120 Width = 5415 Begin VB.TextBox txtH2 Alignment = 1 '右揃え Height = 270 Left = 2040 TabIndex = 41 Text = "2" Top = 1800 Width = 1575 End Begin VB.TextBox txtTl Alignment = 1 '右揃え Height = 270 Left = 2040 TabIndex = 6 Text = "10" Top = 2880 Width = 1575 End Begin VB.TextBox txtTs Alignment = 1 '右揃え Height = 270 Left = 2040 TabIndex = 5 Text = "0.01" Top = 2520 Width = 1575 End Begin VB.TextBox txtH1 Alignment = 1 '右揃え Height = 270 Left = 2040 TabIndex = 4 Text = "2" Top = 1440 Width = 1575 End Begin VB.TextBox txtM2 Alignment = 1 '右揃え Height = 270 Left = 3720 TabIndex = 3 Text = "100000" Top = 960 Width = 1575 End Begin VB.TextBox txtK1 Alignment = 1 '右揃え Height = 270 Left = 2040 TabIndex = 0 Text = "300" Top = 600 Width = 1575 End Begin VB.TextBox txtM1 Alignment = 1 '右揃え Height = 270 Left = 2040 TabIndex = 2 Text = "100000" Top = 960 Width = 1575 End Begin VB.TextBox txtK2 Alignment = 1 '右揃え Height = 270 Left = 3720 TabIndex = 1 Text = "200" Top = 600 Width = 1575 End Begin VB.Label lblH2 Alignment = 1 '右揃え Caption = "2次モード減衰定数(%):" Height = 255 Left = 120 TabIndex = 40 Top = 1800 Width = 1815 End Begin VB.Label lblTime Alignment = 2 '中央揃え BorderStyle = 1 '実線 Caption = "時間設定" Height = 255 Left = 120 TabIndex = 19 Top = 2160 Width = 5175 End Begin VB.Label lblTl Alignment = 1 '右揃え Caption = "解析時間(s):" Height = 255 Left = 600 TabIndex = 18 Top = 2880 Width = 1335 End Begin VB.Label lblTs Alignment = 1 '右揃え Caption = "分割時間(s):" Height = 255 Left = 600 TabIndex = 17 Top = 2520 Width = 1335 End Begin VB.Label lblH1 Alignment = 1 '右揃え Caption = "1次モード減衰定数(%):" Height = 255 Left = 120 TabIndex = 16 Top = 1440 Width = 1815 End Begin VB.Label lblM Alignment = 1 '右揃え Caption = "質量(kg):" Height = 255 Left = 600 TabIndex = 15 Top = 960 Width = 1335 End Begin VB.Label lblK Alignment = 1 '右揃え Caption = "剛性K(kN/cm):" Height = 255 Left = 600 TabIndex = 14 Top = 600 Width = 1335 End Begin VB.Label lbl2 Alignment = 2 '中央揃え BorderStyle = 1 '実線 Caption = "二層目" Height = 255 Left = 3720 TabIndex = 13 Top = 240 Width = 1575 End Begin VB.Label lbl1 Alignment = 2 '中央揃え BorderStyle = 1 '実線 Caption = "一層目" Height = 255 Left = 2040 TabIndex = 12 Top = 240 Width = 1575 End End Begin VB.Timer Timer1 Enabled = 0 'False Interval = 50 Left = 5640 Top = 3480 End Begin VB.CommandButton cmdExit Caption = "終了(&X)" Height = 375 Left = 5640 TabIndex = 10 Top = 2640 Width = 1695 End Begin VB.CommandButton cmdSave Caption = "保存(&S)" Height = 375 Left = 5640 TabIndex = 9 Top = 2160 Width = 1695 End Begin VB.CommandButton cmdSaveSelect Caption = "保存先選択(&C)" Height = 375 Left = 5640 TabIndex = 8 Top = 1680 Width = 1695 End Begin VB.CommandButton cmdStart Caption = "解析開始(&A)" Height = 375 Left = 5640 TabIndex = 7 Top = 1200 Width = 1695 End Begin VB.Label lblOrgCycle2 Alignment = 1 '右揃え BorderStyle = 1 '実線 Caption = "0" Height = 255 Left = 5640 TabIndex = 23 Top = 4800 Width = 1695 End Begin VB.Label lblSecondOrgCycle Alignment = 2 '中央揃え Caption = "二次固有周期(s):" Height = 255 Left = 5640 TabIndex = 22 Top = 4560 Width = 1695 End Begin VB.Label lblOrgCycle1 Alignment = 1 '右揃え BorderStyle = 1 '実線 Caption = "0" Height = 255 Left = 5640 TabIndex = 21 Top = 4200 Width = 1695 End Begin VB.Label lblFirstOrgCycle Alignment = 2 '中央揃え Caption = "一次固有周期(s):" Height = 255 Left = 5640 TabIndex = 20 Top = 3960 Width = 1695 End End Attribute VB_Name = "frmAnalysis" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Option Explicit '変数の宣言 Dim OpenFile As String '開くファイル名 Dim SaveFile As String '保存ファイル名 Dim FileNum As Integer 'ファイルナンバー Dim Tim(50000) As Double '時刻データ群(s) Dim Cac(50000) As Double '入力加速度データ群(cm/s^2) Dim Acc1(50000) As Double '一層目応答加速度データ群(cm/s^2) Dim Acc2(50000) As Double '二層目応答加速度データ群(cm/s^2) Dim Vel1(50000) As Double '一層目応答速度データ群(cm/s) Dim Vel2(50000) As Double '二層目応答速度データ群(cm/s) Dim Dis1(50000) As Double '一層目応答変位データ群(cm) Dim Dis2(50000) As Double '二層目応答変位データ群(cm) Dim xLng(50000) As Double Dim yCac(50000) As Double Dim yAcc1(50000) As Double Dim yAcc2(50000) As Double Dim yVel1(50000) As Double Dim yVel2(50000) As Double Dim yDis1(50000) As Double Dim yDis2(50000) As Double Dim xDis1(50000) As Double Dim xDis2(50000) As Double Dim K1 As Double, K2 As Double '各層の剛性(kg/cm) Dim M1 As Double, M2 As Double '各層の質量(kg) Dim H1 As Double '1次減衰定数(%) Dim H2 As Double '2次減衰定数(%) Dim Ts As Double '間隔時間(s) Dim Tl As Double '解析時間(s) Dim MaxRec As Integer 'データの個数(個) Dim SinMax As Double '定常波の最大値(cm/s^2) Dim Torg As Double '定常波の固有周期(s) Dim Omega As Double '定常波の固有円振動数 Dim CacMax As Double '入力波の最大値(cm/s^2) Dim AccMax As Double '応答加速度の最大値(cm/s^2) Dim VelMax As Double '応答速度の最大値(cm/s) Dim DisMax As Double '応答変位の最大値(cm) Dim Acc1Max As Double, Acc2Max As Double Dim Vel1Max As Double, Vel2Max As Double Dim Dis1Max As Double, Dis2Max As Double Dim F1 As Double, F2 As Double Dim Mber11 As Double, Mber12 As Double, Mber21 As Double, Mber22 As Double Dim Mbunbo As Double Dim K11 As Double, K12 As Double, K21 As Double, K22 As Double '剛性マトリックス Dim M11 As Double, M12 As Double, M21 As Double, M22 As Double '質量マトリックス Dim C11 As Double, C12 As Double, C21 As Double, C22 As Double '減衰マトリックス Dim Omega1 As Double '1次モード建物振動数(1/s) Dim Omega2 As Double '2次モード建物振動数(1/s) Dim Torg1 As Double '1次モード建物固有周期(s) Dim Torg2 As Double '2次モード建物固有周期(s) Dim Arufa0 As Double '減衰マトリックス用係数@ Dim Arufa1 As Double '減衰マトリックス用係数A Dim Qa As Double '二次方程式用係数@ Dim Qb As Double '二次方程式用係数A Dim Qc As Double '二次方程式用係数B Dim I As Double 'データナンバー用変数 Dim ans As String 'メッセージ表示用変数 '定数の宣言 Const Pai As Double = 3.1415926535897 '円周率 Const Beta As String = 1 / 6 'β値 Const Lng As Double = 500 '動画の振幅 Private Sub cmdCycle_Click() '数値の取得 K1 = Val(txtK1.Text) K2 = Val(txtK2.Text) M1 = Val(txtM1.Text) / 100000 M2 = Val(txtM2.Text) / 100000 H1 = Val(txtH1.Text) / 100 H2 = Val(txtH2.Text) / 100 Qa = M1 * M2 Qb = -K2 * M1 - K1 * M2 - K2 * M2 Qc = (K1 + K2) * K2 - K2 * K2 '固有振動数の計算 Omega1 = (1 - H1 ^ 2) ^ 0.5 * ((-Qb - (Qb ^ 2 - 4 * Qa * Qc) ^ 0.5) / (2 * Qa)) ^ 0.5 Omega2 = (1 - H1 ^ 2) ^ 0.5 * ((-Qb + (Qb ^ 2 - 4 * Qa * Qc) ^ 0.5) / (2 * Qa)) ^ 0.5 '固有周期の計算 Torg1 = 2 * Pai / Omega1 Torg2 = 2 * Pai / Omega2 '固有周期の表示 lblOrgCycle1.Caption = 2 * Pai / Omega1 lblOrgCycle2.Caption = 2 * Pai / Omega2 End Sub Private Sub cmdExit_Click() 'プログラムの終了 ans = MsgBox("終了しますか?", vbQuestion + vbYesNo, "プログラムの終了") If ans = vbYes Then End Else Beep End If End Sub Private Sub cmdSave_Click() '保存先が選択されていない場合のメッセージ If frmSaveSelect.txtFileName.Text = "" Then MsgBox "保存先が選択されていません。", vbExclamation, "保存先未選択" Exit Sub End If If optCycleDis.Value = True Then '保存するバス名とファイル名の取得 With frmSaveSelect If Right(.Dir1.Path, 1) = "\" Then SaveFile = .Dir1.Path & .txtFileName.Text & "(建物パラメータ).csv" Else SaveFile = .Dir1.Path & "\" & .txtFileName.Text & "(建物パラメータ).csv" End If End With '配列に格納されているデータの保存 On Error GoTo errhandler FileNum = FreeFile Open SaveFile For Output As #FileNum Write #FileNum, " ", "一層目", "二層目" Write #FileNum, "剛性(kN/cm)", Val(txtK1.Text), Val(txtK2.Text) Write #FileNum, "質量(kg)", Val(txtM1.Text), Val(txtM2.Text) Write #FileNum, "" Write #FileNum, "1次モード減衰定数", Val(txtH1.Text) / 100 Write #FileNum, "2次モード減衰定数", Val(txtH2.Text) / 100 Write #FileNum, "" Write #FileNum, "一次固有周期(s)", Torg1 Write #FileNum, "二次固有周期(s)", Torg2 Close #FileNum errhandler: If Err.Number = 70 Then ans = MsgBox("このファイルは別のソフトで開いています。ファイルを閉じてください。", vbExclamation, "起動状態") Exit Sub End If With frmSaveSelect If Right(.Dir1.Path, 1) = "\" Then SaveFile = .Dir1.Path & .txtFileName.Text & "(時刻暦応答).csv" Else SaveFile = .Dir1.Path & "\" & .txtFileName.Text & "(時刻暦応答).csv" End If End With '配列に格納されているデータの保存 On Error GoTo errhandler FileNum = FreeFile Open SaveFile For Output As #FileNum Write #FileNum, "時刻(s)", "入力変位(cm)", _ "応答加速度(下層)(cm/s2)", "応答速度(下層)(cm/s)", "応答変位(下層)(cm)", _ "応答加速度(上層)(cm/s2)", "応答速度(上層)(cm/s)", "応答変位(上層)(cm)" For I = 0 To MaxRec - 2 Write #FileNum, Tim(I), Cac(I) / (Omega ^ 2), _ Acc1(I), Vel1(I), Dis1(I), _ Acc2(I), Vel2(I), Dis2(I) Next I Close #FileNum If Err.Number = 70 Then ans = MsgBox("このファイルは別のソフトで開いています。ファイルを閉じてください。", vbExclamation, "起動状態") Exit Sub End If '保存ウィンドウの終了 Unload frmSaveSelect 'データのクリア I = 1 Do Until (I) = 50000 CacMax = 0 AccMax = 0 VelMax = 0 DisMax = 0 Acc1Max = 0 Acc2Max = 0 Vel1Max = 0 Vel2Max = 0 Dis1Max = 0 Dis2Max = 0 Cac(I) = 0 Acc1(I) = 0 Acc2(I) = 0 Vel1(I) = 0 Vel2(I) = 0 Dis1(I) = 0 Dis2(I) = 0 I = I + 1 Loop Else '保存するバス名とファイル名の取得 With frmSaveSelect If Right(.Dir1.Path, 1) = "\" Then SaveFile = .Dir1.Path & .txtFileName.Text & "(建物パラメータ).csv" Else SaveFile = .Dir1.Path & "\" & .txtFileName.Text & "(建物パラメータ).csv" End If End With '配列に格納されているデータの保存 On Error GoTo errhandler FileNum = FreeFile Open SaveFile For Output As #FileNum Write #FileNum, " ", "一層目", "二層目" Write #FileNum, "剛性(kN/cm)", Val(txtK1.Text), Val(txtK2.Text) Write #FileNum, "質量(kg)", Val(txtM1.Text), Val(txtM2.Text) Write #FileNum, "" Write #FileNum, "1次モード減衰定数", Val(txtH1.Text) / 100 Write #FileNum, "2次モード減衰定数", Val(txtH2.Text) / 100 Write #FileNum, "" Write #FileNum, "一次固有周期(s)", Torg1 Write #FileNum, "二次固有周期(s)", Torg2 Close #FileNum If Err.Number = 70 Then ans = MsgBox("このファイルは別のソフトで開いています。ファイルを閉じてください。", vbExclamation, "起動状態") Exit Sub End If With frmSaveSelect If Right(.Dir1.Path, 1) = "\" Then SaveFile = .Dir1.Path & .txtFileName.Text & "(時刻暦応答).csv" Else SaveFile = .Dir1.Path & "\" & .txtFileName.Text & "(時刻暦応答).csv" End If End With '配列に格納されているデータの保存 On Error GoTo errhandler FileNum = FreeFile Open SaveFile For Output As #FileNum Write #FileNum, "時刻(s)", "入力加速度(cm/s2)", _ "応答加速度(下層)(cm/s2)", "応答速度(下層)(cm/s)", "応答変位(下層)(cm)", _ "応答加速度(上層)(cm/s2)", "応答速度(上層)(cm/s)", "応答変位(上層)(cm)" For I = 0 To MaxRec - 2 Write #FileNum, Tim(I), Cac(I), _ Acc1(I), Vel1(I), Dis1(I), _ Acc2(I), Vel2(I), Dis2(I) Next I Close #FileNum If Err.Number = 70 Then ans = MsgBox("このファイルは別のソフトで開いています。ファイルを閉じてください。", vbExclamation, "起動状態") Exit Sub End If '保存ウィンドウの終了 Unload frmSaveSelect 'データのクリア I = 1 Do Until (I) = 50000 CacMax = 0 AccMax = 0 VelMax = 0 DisMax = 0 Acc1Max = 0 Acc2Max = 0 Vel1Max = 0 Vel2Max = 0 Dis1Max = 0 Dis2Max = 0 Cac(I) = 0 Acc1(I) = 0 Acc2(I) = 0 Vel1(I) = 0 Vel2(I) = 0 Dis1(I) = 0 Dis2(I) = 0 I = I + 1 Loop End If 'メッセージの表示 MsgBox "保存終了しました。", vbInformation, "データの保存" End Sub Private Sub cmdSaveSelect_Click() '画面表示ウィンドウの切り替え frmAnalysis.Hide frmSaveSelect.Show End Sub Private Sub cmdStart_Click() '数値の取得 K1 = Val(txtK1.Text) K2 = Val(txtK2.Text) M1 = Val(txtM1.Text) / 100000 M2 = Val(txtM2.Text) / 100000 H1 = Val(txtH1.Text) / 100 H2 = Val(txtH2.Text) / 100 Ts = Val(txtTs.Text) Tl = Val(txtTl.Text) '入力定常波の固有周期の取得 If optCycle.Value = True Then Torg = Val(txtOrgCycle.Text) ElseIf optCycleDis.Value = True Then Torg = Val(txtOrgCyCleDis.Text) End If '入力定常波の加速度最大値の取得 If optCycle.Value = True Then SinMax = Val(txtMax.Text) ElseIf optCycleDis.Value = True Then Omega = (2 * Pai) / Torg SinMax = Val(txtDisMax.Text) * Omega * Omega End If MaxRec = Tl / Ts + 2 '最大値のクリア CacMax = 0 Acc1Max = 0 Acc2Max = 0 Vel1Max = 0 Vel2Max = 0 Dis1Max = 0 Dis2Max = 0 'データのクリア I = 1 Do Until (I) = 50000 Cac(I) = 0 Acc1(I) = 0 Acc2(I) = 0 Vel1(I) = 0 Vel2(I) = 0 Dis1(I) = 0 Dis2(I) = 0 I = I + 1 Loop Qa = M1 * M2 Qb = -K2 * M1 - K1 * M2 - K2 * M2 Qc = (K1 + K2) * K2 - K2 * K2 '固有振動数の計算 Omega1 = (1 - H1 ^ 2) ^ 0.5 * ((-Qb - (Qb ^ 2 - 4 * Qa * Qc) ^ 0.5) / (2 * Qa)) ^ 0.5 Omega2 = (1 - H2 ^ 2) ^ 0.5 * ((-Qb + (Qb ^ 2 - 4 * Qa * Qc) ^ 0.5) / (2 * Qa)) ^ 0.5 '固有周期の計算 Torg1 = 2 * Pai / Omega1 Torg2 = 2 * Pai / Omega2 '固有周期の表示 lblOrgCycle1.Caption = 2 * Pai / Omega1 lblOrgCycle2.Caption = 2 * Pai / Omega2 '減衰マトリックスの計算 Arufa0 = 2 * Omega1 * Omega2 * (H1 * Omega2 - H2 * Omega1) / (Omega2 ^ 2 - Omega1 ^ 2) Arufa1 = 2 * (H2 * Omega2 - H1 * Omega1) / (Omega2 ^ 2 - Omega1 ^ 2) '質量マトリックス係数の数値格納 M11 = M1 M12 = 0 M21 = 0 M22 = M2 '剛性マトリックスの数値格納 K11 = K1 + K2 K12 = -K2 K21 = -K2 K22 = K2 '減衰マトリックスの数値格納(レーリー型) C11 = Arufa0 * M11 + Arufa1 * K11 C12 = Arufa0 * M12 + Arufa1 * K12 C21 = Arufa0 * M21 + Arufa1 * K21 C22 = Arufa0 * M22 + Arufa1 * K22 '初期速度がある場合の解析------------------------------------------------------------------------------ If optVel.Value = True Then '初期値の格納 Tim(0) = 0 Cac(0) = 0 Dis1(0) = 0 Dis2(0) = 0 Vel1(0) = Val(txtVel1.Text) Vel2(0) = Val(txtVel2.Text) Acc1(0) = -C11 / M11 * Vel1(0) - C12 / M11 * Vel2(0) _ - K11 / M11 * Dis1(0) - K12 / M11 * Dis2(0) - Cac(0) Acc2(0) = -C21 / M11 * Vel1(0) - C22 / M22 * Vel1(0) _ - K21 / M22 * Dis1(0) - K22 / M22 * Dis2(0) - Cac(0) 'その後の計算 I = 1 Do Until (I) = MaxRec Tim(I) = Ts * I Cac(I) = 0 F1 = -M11 * Cac(I) _ - C11 * (Vel1(I - 1) + Ts / 2 * Acc1(I - 1)) _ - C12 * (Vel2(I - 1) + Ts / 2 * Acc2(I - 1)) _ - K11 * (Dis1(I - 1) + Ts * Vel1(I - 1) + (1 / 2 - Beta) * Ts ^ 2 * Acc1(I - 1)) _ - K12 * (Dis2(I - 1) + Ts * Vel2(I - 1) + (1 / 2 - Beta) * Ts ^ 2 * Acc2(I - 1)) F2 = -M22 * Cac(I) _ - C21 * (Vel1(I - 1) + Ts / 2 * Acc1(I - 1)) _ - C22 * (Vel2(I - 1) + Ts / 2 * Acc2(I - 1)) _ - K21 * (Dis1(I - 1) + Ts * Vel1(I - 1) + (1 / 2 - Beta) * Ts ^ 2 * Acc1(I - 1)) _ - K22 * (Dis2(I - 1) + Ts * Vel2(I - 1) + (1 / 2 - Beta) * Ts ^ 2 * Acc2(I - 1)) Mber11 = M11 + Ts / 2 * C11 + Beta * Ts ^ 2 * K11 Mber12 = M12 + Ts / 2 * C12 + Beta * Ts ^ 2 * K12 Mber21 = M21 + Ts / 2 * C21 + Beta * Ts ^ 2 * K21 Mber22 = M22 + Ts / 2 * C22 + Beta * Ts ^ 2 * K22 Mbunbo = Mber11 * Mber22 - Mber12 * Mber21 Acc1(I) = (Mber22 * F1 - Mber12 * F2) / Mbunbo Acc2(I) = (-Mber21 * F1 + Mber11 * F2) / Mbunbo Vel1(I) = Vel1(I - 1) + 0.5 * (Acc1(I - 1) + Acc1(I)) * Ts Vel2(I) = Vel2(I - 1) + 0.5 * (Acc2(I - 1) + Acc2(I)) * Ts Dis1(I) = Dis1(I - 1) + Vel1(I - 1) * Ts + _ (1 / 2 - Beta) * Ts ^ 2 * Acc1(I - 1) + Beta * Ts ^ 2 * Acc1(I) Dis2(I) = Dis2(I - 1) + Vel2(I - 1) * Ts + _ (1 / 2 - Beta) * Ts ^ 2 * Acc2(I - 1) + Beta * Ts ^ 2 * Acc2(I) If Abs(Cac(I)) > CacMax Then CacMax = Abs(Cac(I)) End If If Abs(Acc1(I)) > Acc1Max Then Acc1Max = Abs(Acc1(I)) End If If Abs(Acc2(I)) > Acc2Max Then Acc2Max = Abs(Acc2(I)) End If If Abs(Vel1(I)) > Vel1Max Then Vel1Max = Abs(Vel1(I)) End If If Abs(Vel2(I)) > Vel2Max Then Vel2Max = Abs(Vel2(I)) End If If Abs(Dis1(I)) > Dis1Max Then Dis1Max = Abs(Dis1(I)) End If If Abs(Dis2(I)) > Dis2Max Then Dis2Max = Abs(Dis2(I)) End If I = I + 1 Loop End If '初期変位がある時の解析-------------------------------------------------------------------------------- If optDis.Value = True Then '初期値の格納 Tim(0) = 0 Cac(0) = 0 Dis1(0) = Val(txtLng1.Text) Dis2(0) = Val(txtLng2.Text) Vel1(0) = 0 Vel2(0) = 0 Acc1(0) = -C11 / M11 * Vel1(0) - C12 / M11 * Vel2(0) _ - K11 / M11 * Dis1(0) - K12 / M11 * Dis2(0) - Cac(0) Acc2(0) = -C21 / M11 * Vel1(0) - C22 / M22 * Vel1(0) _ - K21 / M22 * Dis1(0) - K22 / M22 * Dis2(0) - Cac(0) 'その後の計算 I = 1 Do Until (I) = MaxRec Tim(I) = Ts * I Cac(I) = 0 F1 = -M11 * Cac(I) _ - C11 * (Vel1(I - 1) + Ts / 2 * Acc1(I - 1)) _ - C12 * (Vel2(I - 1) + Ts / 2 * Acc2(I - 1)) _ - K11 * (Dis1(I - 1) + Ts * Vel1(I - 1) + (1 / 2 - Beta) * Ts ^ 2 * Acc1(I - 1)) _ - K12 * (Dis2(I - 1) + Ts * Vel2(I - 1) + (1 / 2 - Beta) * Ts ^ 2 * Acc2(I - 1)) F2 = -M22 * Cac(I) _ - C21 * (Vel1(I - 1) + Ts / 2 * Acc1(I - 1)) _ - C22 * (Vel2(I - 1) + Ts / 2 * Acc2(I - 1)) _ - K21 * (Dis1(I - 1) + Ts * Vel1(I - 1) + (1 / 2 - Beta) * Ts ^ 2 * Acc1(I - 1)) _ - K22 * (Dis2(I - 1) + Ts * Vel2(I - 1) + (1 / 2 - Beta) * Ts ^ 2 * Acc2(I - 1)) Mber11 = M11 + Ts / 2 * C11 + Beta * Ts ^ 2 * K11 Mber12 = M12 + Ts / 2 * C12 + Beta * Ts ^ 2 * K12 Mber21 = M21 + Ts / 2 * C21 + Beta * Ts ^ 2 * K21 Mber22 = M22 + Ts / 2 * C22 + Beta * Ts ^ 2 * K22 Mbunbo = Mber11 * Mber22 - Mber12 * Mber21 Acc1(I) = (Mber22 * F1 - Mber12 * F2) / Mbunbo Acc2(I) = (-Mber21 * F1 + Mber11 * F2) / Mbunbo Vel1(I) = Vel1(I - 1) + 0.5 * (Acc1(I - 1) + Acc1(I)) * Ts Vel2(I) = Vel2(I - 1) + 0.5 * (Acc2(I - 1) + Acc2(I)) * Ts Dis1(I) = Dis1(I - 1) + Vel1(I - 1) * Ts + (1 / 2 - Beta) * Ts ^ 2 * Acc1(I - 1) + Beta * Ts ^ 2 * Acc1(I) Dis2(I) = Dis2(I - 1) + Vel2(I - 1) * Ts + (1 / 2 - Beta) * Ts ^ 2 * Acc2(I - 1) + Beta * Ts ^ 2 * Acc2(I) '絶対値の最大を取得 If Abs(Cac(I)) > CacMax Then CacMax = Abs(Cac(I)) End If If Abs(Acc1(I)) > Acc1Max Then Acc1Max = Abs(Acc1(I)) End If If Abs(Acc2(I)) > Acc2Max Then Acc2Max = Abs(Acc2(I)) End If If Abs(Vel1(I)) > Vel1Max Then Vel1Max = Abs(Vel1(I)) End If If Abs(Vel2(I)) > Vel2Max Then Vel2Max = Abs(Vel2(I)) End If If Abs(Dis1(I)) > Dis1Max Then Dis1Max = Abs(Dis1(I)) End If If Abs(Dis2(I)) > Dis2Max Then Dis2Max = Abs(Dis2(I)) End If I = I + 1 Loop End If '定常波(加速度)の場合の解析-------------------------------------------------------------------------- If optCycle.Value = True Then '初期値の格納 Tim(0) = 0 Cac(0) = 0 Dis1(0) = 0 Dis2(0) = 0 Vel1(0) = 0 Vel2(0) = 0 Acc1(0) = -C11 / M11 * Vel1(0) - C12 / M11 * Vel2(0) _ - K11 / M11 * Dis1(0) - K12 / M11 * Dis2(0) - Cac(0) Acc2(0) = -C21 / M11 * Vel1(0) - C22 / M22 * Vel1(0) _ - K21 / M22 * Dis1(0) - K22 / M22 * Dis2(0) - Cac(0) 'その後の計算 I = 1 Do Until (I) = MaxRec Tim(I) = Ts * I Cac(I) = Sin(Pai * Ts * I / (Torg / 2)) * SinMax F1 = -M11 * Cac(I) _ - C11 * (Vel1(I - 1) + Ts / 2 * Acc1(I - 1)) _ - C12 * (Vel2(I - 1) + Ts / 2 * Acc2(I - 1)) _ - K11 * (Dis1(I - 1) + Ts * Vel1(I - 1) + (1 / 2 - Beta) * Ts ^ 2 * Acc1(I - 1)) _ - K12 * (Dis2(I - 1) + Ts * Vel2(I - 1) + (1 / 2 - Beta) * Ts ^ 2 * Acc2(I - 1)) F2 = -M22 * Cac(I) _ - C21 * (Vel1(I - 1) + Ts / 2 * Acc1(I - 1)) _ - C22 * (Vel2(I - 1) + Ts / 2 * Acc2(I - 1)) _ - K21 * (Dis1(I - 1) + Ts * Vel1(I - 1) + (1 / 2 - Beta) * Ts ^ 2 * Acc1(I - 1)) _ - K22 * (Dis2(I - 1) + Ts * Vel2(I - 1) + (1 / 2 - Beta) * Ts ^ 2 * Acc2(I - 1)) Mber11 = M11 + Ts / 2 * C11 + Beta * Ts ^ 2 * K11 Mber12 = M12 + Ts / 2 * C12 + Beta * Ts ^ 2 * K12 Mber21 = M21 + Ts / 2 * C21 + Beta * Ts ^ 2 * K21 Mber22 = M22 + Ts / 2 * C22 + Beta * Ts ^ 2 * K22 Mbunbo = Mber11 * Mber22 - Mber12 * Mber21 Acc1(I) = (Mber22 * F1 - Mber12 * F2) / Mbunbo Acc2(I) = (-Mber21 * F1 + Mber11 * F2) / Mbunbo Vel1(I) = Vel1(I - 1) + 0.5 * (Acc1(I - 1) + Acc1(I)) * Ts Vel2(I) = Vel2(I - 1) + 0.5 * (Acc2(I - 1) + Acc2(I)) * Ts Dis1(I) = Dis1(I - 1) + Vel1(I - 1) * Ts + _ (1 / 2 - Beta) * Ts ^ 2 * Acc1(I - 1) + Beta * Ts ^ 2 * Acc1(I) Dis2(I) = Dis2(I - 1) + Vel2(I - 1) * Ts + _ (1 / 2 - Beta) * Ts ^ 2 * Acc2(I - 1) + Beta * Ts ^ 2 * Acc2(I) I = I + 1 Loop I = 1 Do Until (I) = MaxRec Acc1(I) = Acc1(I) + Cac(I) Acc2(I) = Acc2(I) + Cac(I) If Abs(Cac(I)) > CacMax Then CacMax = Abs(Cac(I)) End If If Abs(Acc1(I)) > Acc1Max Then Acc1Max = Abs(Acc1(I)) End If If Abs(Acc2(I)) > Acc2Max Then Acc2Max = Abs(Acc2(I)) End If If Abs(Vel1(I)) > Vel1Max Then Vel1Max = Abs(Vel1(I)) End If If Abs(Vel2(I)) > Vel2Max Then Vel2Max = Abs(Vel2(I)) End If If Abs(Dis1(I)) > Dis1Max Then Dis1Max = Abs(Dis1(I)) End If If Abs(Dis2(I)) > Dis2Max Then Dis2Max = Abs(Dis2(I)) End If I = I + 1 Loop End If '定常波(変位)の場合の解析---------------------------------------------------------------------------- If optCycleDis.Value = True Then '初期値の格納 Tim(0) = 0 Cac(0) = 0 Dis1(0) = 0 Dis2(0) = 0 Vel1(0) = 0 Vel2(0) = 0 Acc1(0) = -C11 / M11 * Vel1(0) - C12 / M11 * Vel2(0) _ - K11 / M11 * Dis1(0) - K12 / M11 * Dis2(0) - Cac(0) Acc2(0) = -C21 / M11 * Vel1(0) - C22 / M22 * Vel1(0) _ - K21 / M22 * Dis1(0) - K22 / M22 * Dis2(0) - Cac(0) 'その後の計算 I = 1 Do Until (I) = MaxRec Tim(I) = Ts * I Cac(I) = Sin(Pai * Ts * I / (Torg / 2)) * SinMax F1 = -M11 * Cac(I) _ - C11 * (Vel1(I - 1) + Ts / 2 * Acc1(I - 1)) _ - C12 * (Vel2(I - 1) + Ts / 2 * Acc2(I - 1)) _ - K11 * (Dis1(I - 1) + Ts * Vel1(I - 1) + (1 / 2 - Beta) * Ts ^ 2 * Acc1(I - 1)) _ - K12 * (Dis2(I - 1) + Ts * Vel2(I - 1) + (1 / 2 - Beta) * Ts ^ 2 * Acc2(I - 1)) F2 = -M22 * Cac(I) _ - C21 * (Vel1(I - 1) + Ts / 2 * Acc1(I - 1)) _ - C22 * (Vel2(I - 1) + Ts / 2 * Acc2(I - 1)) _ - K21 * (Dis1(I - 1) + Ts * Vel1(I - 1) + (1 / 2 - Beta) * Ts ^ 2 * Acc1(I - 1)) _ - K22 * (Dis2(I - 1) + Ts * Vel2(I - 1) + (1 / 2 - Beta) * Ts ^ 2 * Acc2(I - 1)) Mber11 = M11 + Ts / 2 * C11 + Beta * Ts ^ 2 * K11 Mber12 = M12 + Ts / 2 * C12 + Beta * Ts ^ 2 * K12 Mber21 = M21 + Ts / 2 * C21 + Beta * Ts ^ 2 * K21 Mber22 = M22 + Ts / 2 * C22 + Beta * Ts ^ 2 * K22 Mbunbo = Mber11 * Mber22 - Mber12 * Mber21 Acc1(I) = (Mber22 * F1 - Mber12 * F2) / Mbunbo Acc2(I) = (-Mber21 * F1 + Mber11 * F2) / Mbunbo Vel1(I) = Vel1(I - 1) + 0.5 * (Acc1(I - 1) + Acc1(I)) * Ts Vel2(I) = Vel2(I - 1) + 0.5 * (Acc2(I - 1) + Acc2(I)) * Ts Dis1(I) = Dis1(I - 1) + Vel1(I - 1) * Ts + _ (1 / 2 - Beta) * Ts ^ 2 * Acc1(I - 1) + Beta * Ts ^ 2 * Acc1(I) Dis2(I) = Dis2(I - 1) + Vel2(I - 1) * Ts + _ (1 / 2 - Beta) * Ts ^ 2 * Acc2(I - 1) + Beta * Ts ^ 2 * Acc2(I) I = I + 1 Loop I = 1 Do Until (I) = MaxRec Acc1(I) = Acc1(I) + Cac(I) Acc2(I) = Acc2(I) + Cac(I) If Abs(Cac(I)) > CacMax Then CacMax = Abs(Cac(I)) End If If Abs(Acc1(I)) > Acc1Max Then Acc1Max = Abs(Acc1(I)) End If If Abs(Acc2(I)) > Acc2Max Then Acc2Max = Abs(Acc2(I)) End If If Abs(Vel1(I)) > Vel1Max Then Vel1Max = Abs(Vel1(I)) End If If Abs(Vel2(I)) > Vel2Max Then Vel2Max = Abs(Vel2(I)) End If If Abs(Dis1(I)) > Dis1Max Then Dis1Max = Abs(Dis1(I)) End If If Abs(Dis2(I)) > Dis2Max Then Dis2Max = Abs(Dis2(I)) End If I = I + 1 Loop End If '地震波ファイル選択時の計算--------------------------------------------------------------------------- If optSelect.Value = True Then '読み込みファイルの取得 If Right(frmWaveSelect.Dir1.Path, 1) = "\" Then OpenFile = frmWaveSelect.Dir1.Path & frmWaveSelect.txtFileName.Text Else OpenFile = frmWaveSelect.Dir1.Path & "\" & frmWaveSelect.txtFileName.Text End If 'ファイル名が指定されていない場合の処理 If frmWaveSelect.txtFileName.Text = "" Then ans = MsgBox("地震波ファイルが選択されていません。", vbInformation, "解析不能") Exit Sub End If 'データの読み取り I = 0 FileNum = FreeFile Open OpenFile For Input As #FileNum Do While Not EOF(FileNum) Input #FileNum, Cac(I) I = I + 1 Loop Close #FileNum '初期値の格納 Tim(0) = 0 Dis1(0) = 0 Dis2(0) = 0 Vel1(0) = 0 Vel2(0) = 0 Acc1(0) = -C11 / M11 * Vel1(0) - C12 / M11 * Vel2(0) _ - K11 / M11 * Dis1(0) - K12 / M11 * Dis2(0) - Cac(0) Acc2(0) = -C21 / M11 * Vel1(0) - C22 / M22 * Vel1(0) _ - K21 / M22 * Dis1(0) - K22 / M22 * Dis2(0) - Cac(0) 'その後の計算 I = 1 Do Until (I) = MaxRec Tim(I) = Ts * I F1 = -M11 * Cac(I) _ - C11 * (Vel1(I - 1) + Ts / 2 * Acc1(I - 1)) _ - C12 * (Vel2(I - 1) + Ts / 2 * Acc2(I - 1)) _ - K11 * (Dis1(I - 1) + Ts * Vel1(I - 1) + (1 / 2 - Beta) * Ts ^ 2 * Acc1(I - 1)) _ - K12 * (Dis2(I - 1) + Ts * Vel2(I - 1) + (1 / 2 - Beta) * Ts ^ 2 * Acc2(I - 1)) F2 = -M22 * Cac(I) _ - C21 * (Vel1(I - 1) + Ts / 2 * Acc1(I - 1)) _ - C22 * (Vel2(I - 1) + Ts / 2 * Acc2(I - 1)) _ - K21 * (Dis1(I - 1) + Ts * Vel1(I - 1) + (1 / 2 - Beta) * Ts ^ 2 * Acc1(I - 1)) _ - K22 * (Dis2(I - 1) + Ts * Vel2(I - 1) + (1 / 2 - Beta) * Ts ^ 2 * Acc2(I - 1)) Mber11 = M11 + Ts / 2 * C11 + Beta * Ts ^ 2 * K11 Mber12 = M12 + Ts / 2 * C12 + Beta * Ts ^ 2 * K12 Mber21 = M21 + Ts / 2 * C21 + Beta * Ts ^ 2 * K21 Mber22 = M22 + Ts / 2 * C22 + Beta * Ts ^ 2 * K22 Mbunbo = Mber11 * Mber22 - Mber12 * Mber21 Acc1(I) = (Mber22 * F1 - Mber12 * F2) / Mbunbo Acc2(I) = (-Mber21 * F1 + Mber11 * F2) / Mbunbo Vel1(I) = Vel1(I - 1) + 0.5 * (Acc1(I - 1) + Acc1(I)) * Ts Vel2(I) = Vel2(I - 1) + 0.5 * (Acc2(I - 1) + Acc2(I)) * Ts Dis1(I) = Dis1(I - 1) + Vel1(I - 1) * Ts + _ (1 / 2 - Beta) * Ts ^ 2 * Acc1(I - 1) + Beta * Ts ^ 2 * Acc1(I) Dis2(I) = Dis2(I - 1) + Vel2(I - 1) * Ts + _ (1 / 2 - Beta) * Ts ^ 2 * Acc2(I - 1) + Beta * Ts ^ 2 * Acc2(I) I = I + 1 Loop I = 1 Do Until (I) = MaxRec Acc1(I) = Acc1(I) + Cac(I) Acc2(I) = Acc2(I) + Cac(I) If Abs(Cac(I)) > CacMax Then CacMax = Abs(Cac(I)) End If If Abs(Acc1(I)) > Acc1Max Then Acc1Max = Abs(Acc1(I)) End If If Abs(Acc2(I)) > Acc2Max Then Acc2Max = Abs(Acc2(I)) End If If Abs(Vel1(I)) > Vel1Max Then Vel1Max = Abs(Vel1(I)) End If If Abs(Vel2(I)) > Vel2Max Then Vel2Max = Abs(Vel2(I)) End If If Abs(Dis1(I)) > Dis1Max Then Dis1Max = Abs(Dis1(I)) End If If Abs(Dis2(I)) > Dis2Max Then Dis2Max = Abs(Dis2(I)) End If I = I + 1 Loop End If '動画表示する時 If chkPicture.Value = 1 Then '全体の最大値の取得 If Acc1Max > Acc2Max Then AccMax = Acc1Max Else AccMax = Acc2Max End If If Vel1Max > Vel2Max Then VelMax = Vel1Max Else VelMax = Vel2Max End If If Dis1Max > Dis2Max Then DisMax = Dis1Max Else DisMax = Dis2Max End If 'タイマーの設定切り替え I = 1 Timer1.Interval = Ts * 2500 Timer1.Enabled = True '表示ウィンドウの切り替え frmPicture.Show frmAnalysis.Hide '最大値表示のクリア With frmPicture .txtCacMax.Text = 0 .txtAccMax1.Text = 0 .txtAccMax2.Text = 0 .txtVelMax1.Text = 0 .txtVelMax2.Text = 0 .txtDisMax1.Text = 0 .txtDisMax2.Text = 0 End With 'グラフのクリア With frmPicture .pctCac.Cls .pctAcc.Cls .pctVel.Cls .pctDis.Cls End With '固有周期の表示 With frmPicture .txtCycle1 = Torg1 .txtCycle2 = Torg2 End With Else 'メッセージの表示 MsgBox "解析終了しました。", vbInformation, "解析終了" End If End Sub Private Sub cmdWaveSelect_Click() '画面表示ウィンドウの切り替え frmAnalysis.Hide frmWaveSelect.Show End Sub Private Sub Timer1_Timer() '動画のクリア frmPicture.pctFig.Cls '強制変位の場合の座標の取得 If optDis.Value = True Then xLng(I) = 500 + 6500 / MaxRec * I yCac(I) = 1027.5 yAcc1(I) = 1027.5 - Acc1(I) / AccMax * 900 yAcc2(I) = 1027.5 - (Acc2(I)) / AccMax * 900 yVel1(I) = 1027.5 - Vel1(I) / VelMax * 900 yVel2(I) = 1027.5 - (Vel2(I)) / VelMax * 900 yDis1(I) = 1027.5 - Dis1(I) / DisMax * 900 yDis2(I) = 1027.5 - (Dis2(I)) / DisMax * 900 xLng(I + 1) = 500 + 6500 / MaxRec * (I + 1) yCac(I + 1) = 1027.5 yAcc1(I + 1) = 1027.5 - Acc1(I + 1) / AccMax * 900 yAcc2(I + 1) = 1027.5 - (Acc2(I + 1)) / AccMax * 900 yVel1(I + 1) = 1027.5 - Vel1(I + 1) / VelMax * 900 yVel2(I + 1) = 1027.5 - (Vel2(I + 1)) / VelMax * 900 yDis1(I + 1) = 1027.5 - Dis1(I + 1) / DisMax * 900 yDis2(I + 1) = 1027.5 - (Dis2(I + 1)) / DisMax * 900 xDis1(I) = Dis1(I) * 150 xDis2(I) = Dis2(I) * 150 End If '強制速度の場合の座標の取得 If optVel.Value = True Then xLng(I) = 500 + 6500 / MaxRec * I yCac(I) = 1027.5 yAcc1(I) = 1027.5 - Acc1(I) / AccMax * 900 yAcc2(I) = 1027.5 - (Acc2(I)) / AccMax * 900 yVel1(I) = 1027.5 - Vel1(I) / VelMax * 900 yVel2(I) = 1027.5 - (Vel2(I)) / VelMax * 900 yDis1(I) = 1027.5 - Dis1(I) / DisMax * 900 yDis2(I) = 1027.5 - (Dis2(I)) / DisMax * 900 xLng(I + 1) = 500 + 6500 / MaxRec * (I + 1) yCac(I + 1) = 1027.5 yAcc1(I + 1) = 1027.5 - Acc1(I + 1) / AccMax * 900 yAcc2(I + 1) = 1027.5 - (Acc2(I + 1)) / AccMax * 900 yVel1(I + 1) = 1027.5 - Vel1(I + 1) / VelMax * 900 yVel2(I + 1) = 1027.5 - (Vel2(I + 1)) / VelMax * 900 yDis1(I + 1) = 1027.5 - Dis1(I + 1) / DisMax * 900 yDis2(I + 1) = 1027.5 - (Dis2(I + 1)) / DisMax * 900 xDis1(I) = Dis1(I) * 150 xDis2(I) = Dis2(I) * 150 End If '定常入力波(加速度)の場合の座標の取得 If optCycle.Value = True Then If CacMax = 0 Then CacMax = 0.01 End If frmPicture.lblCac.Caption = "入力加速度(cm/s2)" xLng(I) = 500 + 6500 / MaxRec * I yCac(I) = 1027.5 - Cac(I) / CacMax * 900 yAcc1(I) = 1027.5 - Acc1(I) / AccMax * 900 yAcc2(I) = 1027.5 - (Acc2(I)) / AccMax * 900 yVel1(I) = 1027.5 - Vel1(I) / VelMax * 900 yVel2(I) = 1027.5 - (Vel2(I)) / VelMax * 900 yDis1(I) = 1027.5 - Dis1(I) / DisMax * 900 yDis2(I) = 1027.5 - (Dis2(I)) / DisMax * 900 xLng(I + 1) = 500 + 6500 / MaxRec * (I + 1) yCac(I + 1) = 1027.5 - Cac(I + 1) / CacMax * 900 yAcc1(I + 1) = 1027.5 - Acc1(I + 1) / AccMax * 900 yAcc2(I + 1) = 1027.5 - (Acc2(I + 1)) / AccMax * 900 yVel1(I + 1) = 1027.5 - Vel1(I + 1) / VelMax * 900 yVel2(I + 1) = 1027.5 - (Vel2(I + 1)) / VelMax * 900 yDis1(I + 1) = 1027.5 - Dis1(I + 1) / DisMax * 900 yDis2(I + 1) = 1027.5 - (Dis2(I + 1)) / DisMax * 900 xDis1(I) = Dis1(I) * 30 xDis2(I) = Dis2(I) * 30 End If '定常入力波(変位)の場合の座標の取得 If optCycleDis.Value = True Then If CacMax = 0 Then CacMax = 0.01 End If frmPicture.lblCac.Caption = "入力変位(cm)" frmPicture.lblCac.Height = 255 frmPicture.lblDisplayCac.Caption = "入力変位" xLng(I) = 500 + 6500 / MaxRec * I yCac(I) = 1027.5 - Cac(I) / CacMax * 900 yAcc1(I) = 1027.5 - Acc1(I) / AccMax * 900 yAcc2(I) = 1027.5 - (Acc2(I)) / AccMax * 900 yVel1(I) = 1027.5 - Vel1(I) / VelMax * 900 yVel2(I) = 1027.5 - (Vel2(I)) / VelMax * 900 yDis1(I) = 1027.5 - Dis1(I) / DisMax * 900 yDis2(I) = 1027.5 - (Dis2(I)) / DisMax * 900 xLng(I + 1) = 500 + 6500 / MaxRec * (I + 1) yCac(I + 1) = 1027.5 - Cac(I + 1) / CacMax * 900 yAcc1(I + 1) = 1027.5 - Acc1(I + 1) / AccMax * 900 yAcc2(I + 1) = 1027.5 - (Acc2(I + 1)) / AccMax * 900 yVel1(I + 1) = 1027.5 - Vel1(I + 1) / VelMax * 900 yVel2(I + 1) = 1027.5 - (Vel2(I + 1)) / VelMax * 900 yDis1(I + 1) = 1027.5 - Dis1(I + 1) / DisMax * 900 yDis2(I + 1) = 1027.5 - (Dis2(I + 1)) / DisMax * 900 xDis1(I) = Dis1(I) * 30 xDis2(I) = Dis2(I) * 30 End If '地震波選択時の場合の座標の取得 If optSelect.Value = True Then xLng(I) = 500 + 6500 / MaxRec * I yCac(I) = 1027.5 - Cac(I) / CacMax * 900 yAcc1(I) = 1027.5 - Acc1(I) / AccMax * 900 yAcc2(I) = 1027.5 - (Acc2(I)) / AccMax * 900 yVel1(I) = 1027.5 - Vel1(I) / VelMax * 900 yVel2(I) = 1027.5 - (Vel2(I)) / VelMax * 900 yDis1(I) = 1027.5 - Dis1(I) / DisMax * 900 yDis2(I) = 1027.5 - (Dis2(I)) / DisMax * 900 xLng(I + 1) = 500 + 6500 / MaxRec * (I + 1) yCac(I + 1) = 1027.5 - Cac(I + 1) / CacMax * 900 yAcc1(I + 1) = 1027.5 - Acc1(I + 1) / AccMax * 900 yAcc2(I + 1) = 1027.5 - (Acc2(I + 1)) / AccMax * 900 yVel1(I + 1) = 1027.5 - Vel1(I + 1) / VelMax * 900 yVel2(I + 1) = 1027.5 - (Vel2(I + 1)) / VelMax * 900 yDis1(I + 1) = 1027.5 - Dis1(I + 1) / DisMax * 900 yDis2(I + 1) = 1027.5 - (Dis2(I + 1)) / DisMax * 900 xDis1(I) = Dis1(I) * 30 xDis2(I) = Dis2(I) * 30 End If '基準線の描画 With frmPicture .pctCac.Line (500, 120)-(500, 1935) .pctAcc.Line (500, 120)-(500, 1935) .pctVel.Line (500, 120)-(500, 1935) .pctDis.Line (500, 120)-(500, 1935) .pctCac.Line (250, 1027.5)-(7100, 1027.5) .pctAcc.Line (250, 1027.5)-(7100, 1027.5) .pctVel.Line (250, 1027.5)-(7100, 1027.5) .pctDis.Line (250, 1027.5)-(7100, 1027.5) End With '座標の表示 With frmPicture .pctCac.Line (450, 127.5)-(550, 127.5) .pctAcc.Line (450, 127.5)-(550, 127.5) .pctVel.Line (450, 127.5)-(550, 127.5) .pctDis.Line (450, 127.5)-(550, 127.5) .pctCac.Line (450, 1927.5)-(550, 1927.5) .pctAcc.Line (450, 1927.5)-(550, 1927.5) .pctVel.Line (450, 1927.5)-(550, 1927.5) .pctDis.Line (450, 1927.5)-(550, 1927.5) .pctCac.Line (2125, 1077.5)-(2125, 977.5) .pctAcc.Line (2125, 1077.5)-(2125, 977.5) .pctVel.Line (2125, 1077.5)-(2125, 977.5) .pctDis.Line (2125, 1077.5)-(2125, 977.5) .pctCac.Line (3750, 1077.5)-(3750, 977.5) .pctAcc.Line (3750, 1077.5)-(3750, 977.5) .pctVel.Line (3750, 1077.5)-(3750, 977.5) .pctDis.Line (3750, 1077.5)-(3750, 977.5) .pctCac.Line (5375, 1077.5)-(5375, 977.5) .pctAcc.Line (5375, 1077.5)-(5375, 977.5) .pctVel.Line (5375, 1077.5)-(5375, 977.5) .pctDis.Line (5375, 1077.5)-(5375, 977.5) .pctCac.Line (7000, 1077.5)-(7000, 977.5) .pctAcc.Line (7000, 1077.5)-(7000, 977.5) .pctVel.Line (7000, 1077.5)-(7000, 977.5) .pctDis.Line (7000, 1077.5)-(7000, 977.5) End With 'グラフの表示 With frmPicture .pctCac.Line (xLng(I), yCac(I))-(xLng(I + 1), yCac(I + 1)), QBColor(9) .pctAcc.Line (xLng(I), yAcc1(I))-(xLng(I + 1), yAcc1(I + 1)), QBColor(9) .pctAcc.Line (xLng(I), yAcc2(I))-(xLng(I + 1), yAcc2(I + 1)), QBColor(12) .pctVel.Line (xLng(I), yVel1(I))-(xLng(I + 1), yVel1(I + 1)), QBColor(9) .pctVel.Line (xLng(I), yVel2(I))-(xLng(I + 1), yVel2(I + 1)), QBColor(12) .pctDis.Line (xLng(I), yDis1(I))-(xLng(I + 1), yDis1(I + 1)), QBColor(9) .pctDis.Line (xLng(I), yDis2(I))-(xLng(I + 1), yDis2(I + 1)), QBColor(12) End With '動画の表示 With frmPicture .pctFig.Line (1747.5, 3240)-(1747.5 + xDis1(I), 2240), QBColor(9) .pctFig.Circle (1747.5 + xDis1(I), 2040), 200, QBColor(9) .pctFig.Line (1747.5 + xDis1(I), 1840)-(1747.5 + xDis2(I), 840), QBColor(12) .pctFig.Circle (1747.5 + xDis2(I), 640), 200, QBColor(12) End With '現在の値の表示 With frmPicture .txtTime.Text = Tim(I) If optCycleDis.Value = True Then .txtCac.Text = Cac(I) / (Omega * Omega) Else .txtCac.Text = Cac(I) End If .txtAcc1.Text = Acc1(I) .txtAcc2.Text = Acc2(I) .txtVel1.Text = Vel1(I) .txtVel2.Text = Vel2(I) .txtDis1.Text = Dis1(I) .txtDis2.Text = Dis2(I) End With '最大値の表示 With frmPicture If optCycleDis.Value = True Then If .txtCacMax.Text < Abs(Cac(I) / (Omega * Omega)) Then .txtCacMax.Text = Abs(Cac(I) / (Omega * Omega)) End If Else If .txtCacMax.Text < Abs(Cac(I)) Then .txtCacMax.Text = Abs(Cac(I)) End If End If If .txtAccMax1.Text < Abs(Acc1(I)) Then .txtAccMax1.Text = Abs(Acc1(I)) End If If .txtAccMax2.Text < Abs(Acc2(I)) Then .txtAccMax2.Text = Abs(Acc2(I)) End If If .txtVelMax1.Text < Abs(Vel1(I)) Then .txtVelMax1.Text = Abs(Vel1(I)) End If If .txtVelMax2.Text < Abs(Vel2(I)) Then .txtVelMax2.Text = Abs(Vel2(I)) End If If .txtDisMax1.Text < Abs(Dis1(I)) Then .txtDisMax1.Text = Abs(Dis1(I)) End If If .txtDisMax2.Text < Abs(Dis2(I)) Then .txtDisMax2.Text = Abs(Dis2(I)) End If End With I = I + 1 'プログラムの終了 If I = MaxRec - 1 Then ans = MsgBox("解析終了しました。", vbInformation, "解析終了") Timer1.Enabled = False Unload frmPicture frmAnalysis.Show End If End Sub