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実行