1 :ATforward{
2 delay(3)
3 IFOUTPOT(8,GT,tempATposition) jump ATforward ;レバーが目的位置に来るまでループ
4 }
5 :ATbackward{
6 delay(3)
7 IFOUTPOT(8,LT,tempATposition) jump ATbackward ;レバーが目的位置に来るまでループ
8 }
9 :AutoThrottle{
10 clearflag(ATNotBusy) ;このルーチンが2重に起動しないように
11 ifvar(ATposition,LT,10){setvar(ATposition,10)};オーバーラン防止(10でフルスロットル)
12 ifvar(ATposition,GT,120){setvar(ATposition,120)};オーバーラン防止(120でアイドル)
13 setvar(tempATposition,ATposition)
14 subvar(tempATposition,10) ;許容範囲設定
15 IFOUTPOT(8,LT,tempATposition){ ;アナログ(8)位置(1番スロットル)と比較
16 setpoint(MThrottleR) ;逆転用リレーON
17 setpoint(MThrottleOn) ;モーター用リレーON
18 call(ATbackward) ;モーターを後退回転
19 clearpoint(MThrottleOn) ;モーター用リレーOFF
20 clearpoint(MThrottleR) ;逆転用リレーOFF
21 }else{
22 addvar(tempATposition,20) ;許容範囲設定
23 IFOUTPOT(8,GT,tempATposition){ ;アナログ(8)位置(1番スロットル)と比較
24 setpoint(MThrottleOn) ;モーター用リレーON
25 call(ATforward) ;モーターを前進回転
26 clearpoint(MThrottleOn) ;モーター用リレーOFF
27 }
28 }
29 setflag(ATNotBusy) ;このルーチン開放
30 }
31 :Update_SPD_Mode{ ;0 =off, 1=ARM, 2=N1 (THR), 3=MCP SPD, 4=RETARD,
5=THR HLD
32 setvar(OldSPD_mode,SPD_mode)
33 #expand getPH8(SPD_Mode,0x0045) ;PH69
34 if(fThrottleMotorize){
35 ifvar(SPD_Mode,EQU,2){ ;TO/GAモード、THRモード
36 setvar(ATposition,10)
37 jump(AutoThrottle)
38 }
39 ifvar(SPD_Mode,EQU,4){ ;RETARDモード
40 setvar(ATposition,120)
41 jump(AutoThrottle)
42 }
43 }
44 }
45 :Update_Engine1_N1{
46 #expand getPH8(vEngine1_N1,0x0064) ;エンジン1のN1値取得
47 if(fThrottleMotorize){
48 ifvar(SPD_Mode,equ,3){
49 if(ATNotBusy){
50 setvar(ATposition,140)
51 subvar(ATposition,vEngine1_N1)
52 jump(AutoThrottle)
53 }
54 }
55 }
56 }
57 DefinePH(69, Update_SPD_mode, 0,0,0,0) ;モードが変わった時Update_SPD_mode実行
58 definePH(100, Update_Engine1_N1, 0,0,0,0) ;エンジン1のN1変わったとき
59 ;Update_Engine1_N1実行