123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- #### Bendix-King KFC-200 Flight Director ####
- #Buttons
- # HDG ...heading hold
- # FD ..... flightdirector on/off
- # ALT ....altitude arm
- # NAV ...VOR / LOC arm
- # BC ....LOC back course
- # APPR ... LOC / GS arm
- #### lnav ####
- # 0 = wingleveler
- # 1 = heading hold
- # 2 = NAV arm
- # 3 = NAV cap
- # 4 = APPR arm
- # 5 = APPR cap
- #### vnav ####
- # 0 = pitch hold
- # 1 = ALT arm
- # 2 = ALT cap
- # 3 = GS arm
- # 4 = GS cap
- var L_list=["wing-leveler","dg-heading-hold","dg-heading-hold","nav1-hold","dg-heading-hold","nav1-hold","dg-heading-hold","nav1-hold"];
- var V_list=["pitch-hold","pitch-hold","altitude-hold","pitch-hold","gs1-hold"];
- var fdprop = props.globals.getNode("/instrumentation/kfc200",1);
- var lnav = 0;
- var vnav = 0;
- var current_alt=0.0;
- var alt_select = 0.0;
- var DH = 0;
- var HASGS = "/instrumentation/nav/has-gs";
- var NAVLOC = "/instrumentation/nav/nav-loc";
- var NAVDST = "/instrumentation/nav/nav-dist";
- var NAVRNG = "/instrumentation/nav/in-range";
- var HDEFL = "/instrumentation/nav/heading-needle-deflection";
- var GSDEFL = "/instrumentation/nav/gs-needle-deflection-norm";
- var BC = "/instrumentation/nav/back-course-btn";
- var HDG = props.globals.getNode("/autopilot/locks/heading",1);
- var ALT = props.globals.getNode("/autopilot/locks/altitude",1);
- var SPD = props.globals.getNode("/autopilot/locks/speed",1);
- var SRVC = 0;
- setlistener("/sim/signals/fdm-initialized", func {
- fdprop.getNode("serviceable",1).setBoolValue(1);
- fdprop.getNode("armed",1).setBoolValue(0);
- fdprop.getNode("cpld",1).setBoolValue(0);
- fdprop.getNode("pitch-trim",1).setIntValue(0);
- fdprop.getNode("alt-trim",1).setIntValue(0);
- fdprop.getNode("fd-on",1).setBoolValue(0);
- fdprop.getNode("gs-arm",1).setBoolValue(0);
- fdprop.getNode("lnav",1).setValue(0);
- fdprop.getNode("vnav",1).setValue(0);
- fdprop.getNode("alt-preset",1).setDoubleValue(0.0);
- fdprop.getNode("alt-alert",1).setBoolValue(0);
- fdprop.getNode("dh-alert",1).setBoolValue(0);
- DH = getprop("/autopilot/route-manager/min-lock-altitude-agl-ft");
- alt_select = 0;
- ALT.setValue(V_list[vnav]);
- HDG.setValue(L_list[lnav]);
- settimer(update,5);
- print("KFC-200 ... Check");
- });
- setlistener("/instrumentation/kfc200/fd-on", func(fd){
- var fdON = fd.getBoolValue();
- clear_ap();
- },0,0);
- setlistener("/autopilot/locks/passive-mode", func(ap){
- if(!ap.getBoolValue()){
- setprop("autopilot/settings/target-pitch-deg",getprop("/orientation/pitch-deg"));
- }
- },0,0);
- setlistener("/instrumentation/kfc200/serviceable", func(srv){
- if(srv.getBoolValue()){SRVC=1;
- }else{
- SRVC=0;
- }
- },0,0);
- setlistener("/autopilot/settings/target-altitude-ft",func(at){
- alt_select = at.getValue();
- },0,0);
- setlistener("/autopilot/route-manager/min-lock-altitude-agl-ft",func(dh){
- DH = dh.getValue();
- },0,0);
- setlistener("/instrumentation/kfc200/lnav",func(ln){
- if(SRVC == 0)return;
- lnav = ln.getValue();
- if(lnav == 4){
- if(!getprop(NAVLOC)){
- lnav=2;
- setprop("/instrumentation/kfc200/lnav",lnav);
- }else{
- if(getprop(HASGS)){
- if(!getprop(BC)){
- setprop("/instrumentation/kfc200/gs-arm",1);
- }
- }
- }
- }
- HDG.setValue(L_list[lnav]);
- },0,0);
- setlistener("/instrumentation/kfc200/vnav", func(vn){
- if(SRVC == 0)return;
- vnav = vn.getValue();
- ALT.setValue(V_list[vnav]);
- },0,0);
- var clear_ap = func {
- setprop("/autopilot/settings/target-pitch-deg",getprop("/orientation/pitch-deg"));
- vnav = 0;
- lnav=0;
- setprop("/instrumentation/kfc200/lnav",lnav);
- setprop("/instrumentation/kfc200/vnav",vnav);
- HDG.setValue(L_list[lnav]);
- ALT.setValue(V_list[vnav]);
- }
- #### PITCH TRIM = 1 degree per second ####
- var pitch_trim = func {
- var temp_pitch = getprop("autopilot/settings/target-pitch-deg");
- var FR =getprop("sim/frame-rate");
- if(FR > 0){
- var trim = (1/FR) * arg[0];
- setprop("autopilot/settings/target-pitch-deg",temp_pitch + trim);
- }
- }
- #### ALTITUDE TRIM = 600 fpm ####
- var alt_trim = func {
- var temp_alt = getprop("autopilot/settings/target-altitude-ft");
- var FR =getprop("sim/frame-rate");
- if(FR > 0){
- var trim = (10/FR) * arg[0];
- setprop("autopilot/settings/target-altitude-ft",temp_alt + trim);
- }
- }
- var update_nav = func {
- if(SRVC == 1){
- var inrange= getprop(NAVRNG);
- if(inrange){
- if(lnav == 2 or lnav == 4){
- setprop("instrumentation/kfc200/armed",1);
- setprop("instrumentation/kfc200/cpld",0);
- var DF = getprop(HDEFL);
- if(DF > -9 and DF < 9){
- setprop("/instrumentation/kfc200/lnav",lnav + 1);
- setprop("instrumentation/kfc200/armed",0);
- setprop("instrumentation/kfc200/cpld",1);
- }
- }
- if(lnav ==5){
- if(getprop("instrumentation/kfc200/gs-arm")){
- if(getprop("instrumentation/nav/gs-distance") < 25000){
- var GS1 = getprop(GSDEFL);
- if( GS1< 0.5 and GS1 > -0.5){vnav = 4;
- setprop("/instrumentation/kfc200/vnav",vnav);
- }
- }
- }
- }
- }
- if(vnav == 1){
- var offset = get_altoffset();
- if(offset > -990 and offset < 990){
- setprop("/instrumentation/kfc200/vnav",vnav + 1);
- }
- }
- }
- }
- var get_altoffset = func(){
- current_alt = getprop("/instrumentation/altimeter/pressure-alt-ft");
- var offset = (current_alt - alt_select);
- var alert =0;
- if(offset > -1000 and offset < -1000){
- if(offset < -300 and offset > 300)alert = 1;
- }
- fdprop.getNode("alt-alert").setBoolValue(alert);
- return(offset);
- }
- var update = func {
- var PT = getprop("instrumentation/kfc200/pitch-trim");
- var AT = getprop("instrumentation/kfc200/alt-trim");
- if(PT !=0)pitch_trim(PT);
- if(AT!=0)alt_trim(AT);
- if(getprop("/position/altitude-agl-ft") < DH){
- props.globals.getNode("/autopilot/locks/passive-mode").setBoolValue(1);
- setprop("instrumentation/kfc200/dh-alert",1);
- }else{
- setprop("instrumentation/kfc200/dh-alert",0);
- }
- update_nav();
- settimer(update, 0);
- }
|