XP11 ZIBOにRevsim TQを接続する その5 [X-Plane]
OCUSBMapper経由でRevsimを接続する件も、今回が最後。
スピードブレーキです。
日本語でプログラムを書くとこんな流れ。
◆デバイス入出力値
dcmDR_input_analog[4] :revsimスピードブレーキポテンショメーターからの取得値 0-164
dcmDR_input_analog[5]:revsim 左TQポテンショメーター位置 0-242
dcmDR_output_motor[0]:スピードブレーキのDCモーターへの入力値 0:停止、120:展開、220:格納
◆プログラム上の変数
revsim_sb_pos:revsimポテンショメーターからの取得値 0-1
simDR_sb_in:シム上のスピードブレーキ位置(入力先)
sb_arm:スピードブレーキアーム状態 0:disarm、1:arm
simDR_rev_full:リバーサーの状態 0.06:フルリバース
sb_sit:スピードブレーキの状態追跡変数 0:初期状態、1:フル展開中、2:フル展開モーター停止、3:格納中
◆流れ
1.revsim_sb_posが0.303804よりも小さく0.203804よりも大きい場合はスピードブレーキをアーム
2.上記範囲外の場合は、revsimPOTの値をシミュレーターへ入力してアナログ操作を可能に。同時にスピードブレーキをディスアーム
3.スピードブレーキがアームされていて、かつリバーサーがフル状態になったら、スピードブレーキを展開(モーター稼働)
4.スピードブレーキがフル展開されたらモーター稼働停止
5.フル展開状態で左TQが10%程度まで入ったらスピードブレーキ格納(モーター稼働)
7.格納されたらモーター停止。スピードブレーキアーム変数、状態追跡状態変数リセット
本来なら、「接地」でスピードブレーキが展開されるところなんでしょうが、その値がどこで取得できるかわからなかったので、とりあえずリバーサーを操作したら展開するようにしてます。
たたむときはスロットルを入れると自動格納するようにしてみました。
◆動作状況(動画)
◆オイル
ちなみに、しばらくオイルをさしてなかったら動かなくなってしまっていたので、チェーンソー用オイルを購入してスピードブレーキの接点部に塗布してみました。
粘度が適度にあってちょうどいいです。
◆ソースコード(スピードブレーキ該当部のみ)
スピードブレーキです。
日本語でプログラムを書くとこんな流れ。
◆デバイス入出力値
dcmDR_input_analog[4] :revsimスピードブレーキポテンショメーターからの取得値 0-164
dcmDR_input_analog[5]:revsim 左TQポテンショメーター位置 0-242
dcmDR_output_motor[0]:スピードブレーキのDCモーターへの入力値 0:停止、120:展開、220:格納
◆プログラム上の変数
revsim_sb_pos:revsimポテンショメーターからの取得値 0-1
simDR_sb_in:シム上のスピードブレーキ位置(入力先)
sb_arm:スピードブレーキアーム状態 0:disarm、1:arm
simDR_rev_full:リバーサーの状態 0.06:フルリバース
sb_sit:スピードブレーキの状態追跡変数 0:初期状態、1:フル展開中、2:フル展開モーター停止、3:格納中
◆流れ
1.revsim_sb_posが0.303804よりも小さく0.203804よりも大きい場合はスピードブレーキをアーム
2.上記範囲外の場合は、revsimPOTの値をシミュレーターへ入力してアナログ操作を可能に。同時にスピードブレーキをディスアーム
3.スピードブレーキがアームされていて、かつリバーサーがフル状態になったら、スピードブレーキを展開(モーター稼働)
4.スピードブレーキがフル展開されたらモーター稼働停止
5.フル展開状態で左TQが10%程度まで入ったらスピードブレーキ格納(モーター稼働)
7.格納されたらモーター停止。スピードブレーキアーム変数、状態追跡状態変数リセット
本来なら、「接地」でスピードブレーキが展開されるところなんでしょうが、その値がどこで取得できるかわからなかったので、とりあえずリバーサーを操作したら展開するようにしてます。
たたむときはスロットルを入れると自動格納するようにしてみました。
◆動作状況(動画)
◆オイル
ちなみに、しばらくオイルをさしてなかったら動かなくなってしまっていたので、チェーンソー用オイルを購入してスピードブレーキの接点部に塗布してみました。
粘度が適度にあってちょうどいいです。
◆ソースコード(スピードブレーキ該当部のみ)
--*************************************************************************************-- --** CONSTANTS **-- --*************************************************************************************-- DCMOTORS_DEVICE = 0 --*************************************************************************************-- --** FIND X-PLANE DATAREFS **-- --*************************************************************************************-- simDR_sb_pos = find_dataref("sim/cockpit2/controls/speedbrake_ratio") simDR_sb_in = find_dataref("laminar/B738/flt_ctrls/speedbrake_lever") simDR_rev_full = find_dataref("laminar/B738/flt_ctrls/reverse_lever1") --*************************************************************************************-- --** FIND CUSTOM DATAREFS **-- --*************************************************************************************-- dcmDR_input_analog = find_dataref("pikitanga/ocusbmapper/dcm" .. DCMOTORS_DEVICE .. "/input/analog") dcmDR_output_motor = find_dataref("pikitanga/ocusbmapper/dcm" .. DCMOTORS_DEVICE .. "/output/motor") --*************************************************************************************-- --** SYSTEM FUNCTIONS **-- --*************************************************************************************-- function process_speedbrake() -- revsim speedbrake position revsim_sb_pos = dcmDR_input_analog[4] / 160 -- speed brake deproy if (revsim_sb_pos > 0.303804) then simDR_sb_in = revsim_sb_pos sb_arm = 0 end -- speed brake detract if (revsim_sb_pos < 0.203804) then simDR_sb_in = revsim_sb_pos sb_arm = 0 end -- speed brake arm if (sb_arm == 0) then if (revsim_sb_pos > 0.203804) then if (revsim_sb_pos < 0.303804) then simDR_sb_in = 0.0889 sb_arm = 1 end end end -- speed brake deproy in landing if (sb_arm == 1) then if (simDR_rev_full == 0.06) then dcmDR_output_motor[0] = 120 sb_sit = 1 end end -- speed brake motor off if (sb_sit == 1) then if (revsim_sb_pos > 0.9) then dcmDR_output_motor[0] = 0 sb_sit = 2 end end -- speed brake detent after landing if (sb_sit == 2) then if (dcmDR_input_analog[5] > 50) then dcmDR_output_motor[0] = 220 sb_sit = 3 end end -- speed brake motor off if (sb_sit == 3) then if (revsim_sb_pos < 0.1) then dcmDR_output_motor[0] = 0 sb_sit = 0 sb_arm = 0 end end end --*************************************************************************************-- --** XLUA EVENT CALLBACKS **-- --*************************************************************************************-- function before_physics() process_speedbrake() end
2020-02-08 09:01
nice!(0)
コメント(0)
コメント 0