Je met ma programmation fonctionnelle de toutes mes gauges :
- Code: Tout sélectionner
- // =======================
 // ££ Routines servos
 // =======================
 //
 // name : routine_servos_4
 // 10 Décembre 2011
 //
 // Engine left = 1 - Engine right = 2
 //
 // Carte servo n° 0 USB 74 : (quelques Pb avec les n° USB qui changent de temps en temps !!!)
 // Ouput : Engine_left Gauge name Engine_Right n° cables Limites Graduations y = ax + b
 // 4 MAN PRESS 1 4 - 1 180-960 10-40 a=26 b=-80
 // 5 RPM 2 5 - 2 190-940 0-35 a=21.429 b=190
 // 6 Fuel Flow 3 6 - 3 160-840 3-30 a=25.185 b=84.445
 //
 // Carte servo n° 1 USB 76 :
 // Ouput : Engine_left Gauge name Engine_Right n° cables Limites
 // 4 TEMP EGT 1 10 - 7 850-150 0-860 a=-0.814 b=850
 // 5 TEMP CHT 2 11 - 8 180-950 50-250 a=3.85 b=-12.5
 // 6 OIL PRESS 3 12 - 9 900-150 0-100 a=-7.5 b=900
 //
 // Carte servo n° 2 USB 12 :
 // Ouput : Engine_left Gauge name Engine_Right n° cables Limites
 // 2 OIL TEMP 1 14 - 13 140-800 0-120 a=5.5 b=140
 //
 // 3 - Fuel level L (FL) 15 170-850 0-100 a=6.8 b=170
 // 4 - Fuel level R (FR) 16 170-850 0-100 a=6.8 b=170
 // 5 - PROP AMPS (PA) 17 150-840 0-30
 // 6 - Surface Icing Pressure (IP) 18 250-800 0-20
 //
 //
 // ££ Init au lancement SIOC
 // On met les servos en position "arrêt moteur"
 //
 Var 4000, name init_servos, link subrutine // initialisation servos
 {
 &serv_man_pres1 = 650
 &serv_man_pres2 = 650
 &serv_RPM1 = 180
 &serv_RPM2 = 180
 &serv_FF1 = 140
 &serv_FF2 = 140
 &serv_temp_EGT1 = 850
 &serv_temp_EGT2 = 850
 &serv_temp_CHT1 = 180
 &serv_temp_CHT2 = 180
 &serv_oil_pres1 = 900
 &serv_oil_pres2 = 900
 &serv_oil_temp1 = 200
 &serv_oil_temp2 = 200
 &serv_fuel_L = 170
 &serv_fuel_R = 170
 &serv_prop_amp = 150
 &serv_pres_sur = 250
 }
 
 // On désactive les servos (plus de vibrations), en attendant le démarrage.
 Var 4002, name init_servos_0, link subrutine // initialisation servos
 {
 &serv_man_pres1 = 0
 &serv_man_pres2 = 0
 &serv_RPM1 = 0
 &serv_RPM2 = 0
 &serv_FF1 = 0
 &serv_FF2 = 0
 &serv_temp_EGT1 = 0
 &serv_temp_EGT2 = 0
 &serv_temp_CHT1 = 0
 &serv_temp_CHT2 = 0
 &serv_oil_pres1 = 0
 &serv_oil_pres2 = 0
 &serv_oil_temp1 = 0
 &serv_oil_temp2 = 0
 &serv_prop_amp = 0
 &serv_pres_sur = 0
 }
 Var 4011, name serv_man_pres1, link usb_servos, device 0, output 4, posl 1, posc 512, posr 1023
 Var 4012, name serv_man_pres2, link usb_servos, device 0, output 1, posl 1, posc 512, posr 1023
 Var 4013, name serv_RPM1, link usb_servos, device 0, output 5, posl 1, posc 512, posr 1023
 Var 4014, name serv_RPM2, link usb_servos, device 0, output 2, posl 1, posc 512, posr 1023
 Var 4015, name serv_FF1, link usb_servos, device 0, output 6, posl 1, posc 512, posr 1023
 Var 4016, name serv_FF2, link usb_servos, device 0, output 3, posl 1, posc 512, posr 1023
 Var 4017, name serv_temp_EGT1, link usb_servos, device 1, output 4, posl 1, posc 512, posr 1023
 Var 4018, name serv_temp_EGT2, link usb_servos, device 1, output 1, posl 1, posc 512, posr 1023
 Var 4019, name serv_temp_CHT1, link usb_servos, device 1, output 5, posl 1, posc 512, posr 1023
 Var 4020, name serv_temp_CHT2, link usb_servos, device 1, output 2, posl 1, posc 512, posr 1023
 Var 4021, name serv_oil_pres1, link usb_servos, device 1, output 6, posl 1, posc 512, posr 1023
 Var 4022, name serv_oil_pres2, link usb_servos, device 1, output 3, posl 1, posc 512, posr 1023
 Var 4023, name serv_oil_temp1, link usb_servos, device 2, output 2, posl 1, posc 512, posr 1023
 Var 4024, name serv_oil_temp2, link usb_servos, device 2, output 1, posl 1, posc 512, posr 1023
 Var 4025, name serv_fuel_L, link usb_servos, device 2, output 3, posl 1, posc 512, posr 1023
 Var 4026, name serv_fuel_R, link usb_servos, device 2, output 4, posl 1, posc 512, posr 1023
 Var 4027, name serv_prop_amp, link usb_servos, device 2, output 5, posl 1, posc 512, posr 1023
 Var 4028, name serv_pres_sur, link usb_servos, device 2, output 6, posl 1, posc 512, posr 1023
 //
 // ££ Manifold pressure 1 (left) & 2 (right)
 //
 // Offset $37E8 et $3728 Length 8 en lbs/sqft (à diviser par 70,7262 pour convertir en Hg)
 // Cadran : graduations de 10 à 40 mais valeur peut descendre à 5,4 HG
 // servo : de 180 à 960 --> a = 26 b = -80
 //
 Var 4100, name fs_man_pres1, Link FSUIPC_IN, Offset $37E8, Length 8, Numbers 3
 {
 &val_man_pres1 = &fs_man_pres1 / 70.7262 // maniflow pressure en HG
 L0 = &val_man_pres1 / 1000 // Conversion en valeur réelle
 L1 = L0 * 26 // y = ax : pente réponse servo
 L2 = L1 - 80 // y = ax + b : décallage
 L2 = LIMIT 120 1000 0 // Limite amplitude servo de 120 à 1000
 &serv_man_pres1 = L2 // Valeur envoyée au servo
 }
 Var 4102, name val_man_pres1
 //
 // Manifold pressure 2
 //
 Var 4110, name fs_man_pres2, Link FSUIPC_IN, Offset $3728, Length 8, Numbers 3
 // Var 4110, name fs_man_pres2, Link IOCP, Offset 0428
 {
 &val_man_pres2 = &fs_man_pres2 / 70.7262 // maniflow pressure en HG
 L0 = &val_man_pres2 / 1000 // Conversion en valeur réelle : FSUIPC
 L1 = L0 * 26 // y = ax : pente réponse servo
 L2 = L1 - 80 // y = ax + b : décallage
 L2 = LIMIT 120 1000 0 // Limite amplitude servo de 120 à 1000
 &serv_man_pres2 = L2 // Valeur envoyée au servo
 }
 Var 4112, name val_man_pres2
 //
 // ££ RPM 1 & 2
 //
 // Offset $2400 et $2500 length 8 : à diviser par 100 pour avoir la valeur RPM
 // Cadran graduation de 0 à 35 (0 à 3500 tr/mn)
 // Servo de 190 à 940 --> a = 21,429 b = 190
 // RPM_mot_1 et RPM_mot_2 : Var 0030 et 0033 -> Pour calcul courant et affichage led alternateurs
 //
 Var 4120, name fs_rpm1, link FSUIPC_IN, Offset $2400, Length 8, Numbers 3 // RPM 1
 {
 &RPM_mot_1 = &fs_rpm1 / 1000 // Valeur réelle de l'offset (RPM x 100)
 L0 = &RPM_mot_1 / 100 // Valeur RPM 0 à 35 RPM_mot_1 : Var &
 L1 = L0 * 21.429
 L2 = L1 + 190
 L2 = LIMIT 120 1000 0 // Limite amplitude servo de 120 à 1000
 &serv_RPM1 = L2
 }
 //
 // RPM 2
 //
 Var 4125, name fs_rpm2, link FSUIPC_IN, Offset $2500, Length 8, Numbers 3 // RPM 2
 {
 &RPM_mot_2 = &fs_rpm2 / 1000 // Valeur réelle de l'offset (RPM x 100)
 L0 = &RPM_mot_2 / 100 // Valeur RPM 0 à 35
 L1 = L0 * 21.429
 L2 = L1 + 190
 L2 = LIMIT 120 1000 0 // Limite amplitude servo de 120 à 1000
 &serv_RPM2 = L2 // Envoie valeur au servo
 }
 //
 // ££ Fuel flow 1 & 2
 //
 // Offset $0918 et $09B0 donne fuel flow en Pound/Heure (donc un poids/H)
 // 1 pound = 0,454 kg 1 kg = 1,39 litres de 100LL (D=0,72) & 1 gallon = 3,78 litres :
 // Coefficeint de conversion Pounds -> gallond : 0,454 * 1,39 / 3,78 = 0,166947
 // Graduations de 3 à 30 (gallon / H)
 // Servo : de 160 à 840 --> a = 25,185 b = 84,445
 //
 Var 4130, name fs_fuel_flow1, link FSUIPC_IN, Offset $0918, Length 8, Numbers 3
 // Var 4130, name fs_fuel_flow1, link IOCP, Offset 0135 // ne marche pas mieux !
 {
 &val_FF1 = &fs_fuel_flow1 / 1000 // Offset FSUIPC
 // &val_FF1 = &fs_fuel_flow1 / 10 // Offset IOCP
 L0 = &val_FF1 * 0.1669 // Conversion Pound en Gallon / Heure
 L1 = L0 * 25.189 // "a" pente servo (y = ax)
 L2 = L1 + 84.445 // "b" (y = ax + b)
 L2 = LIMIT 150 950 0 // Limite amplitude servo de 150 à 950
 &serv_FF1 = L2 // Envoie valeur au servo
 }
 Var 4131, name val_FF1
 //
 // Fuel flow 2
 //
 Var 4132, name fs_fuel_flow2, link FSUIPC_IN, Offset $09B0, Length 8, Numbers 3
 {
 &val_FF2 = &fs_fuel_flow2 / 1000
 L0 = &val_FF2 * 0.1669
 L1 = L0 * 25.189
 L2 = L1 + 84.445
 L2 = LIMIT 150 950 0 // Limite amplitude servo de 150 à 950
 &serv_FF2 = L2
 }
 Var 4133, name val_FF2
 //
 // ££ EGT 1 & 2
 //
 // Offset 3b70 et 3ab0 Length 8 en ° Rankine
 // Conversion : °C = (°Ra - 459,67 - 32) / 1,8 --> D'ou °C = (°Ra - 491,67) / 1,8
 // 15 Graduations : L'échelle donne 20° (?) par graduation : De 0 à 860°
 // Servo de 850 à 150 --> a = -0,814 b = 850
 //
 Var 4140, name fs_egt1, link FSUIPC_IN, Offset $3b70, Length 8, Numbers 3
 {
 &val_egt1 = &fs_egt1 / 1000 // Valeur réelle
 L0 = &val_egt1 - 491.67 // en °C (avec ligne suivante)
 L1 = L0 / 1.8 // divisé par 1,8
 L0 = L1 * 0.814 // "a" Pente déviation servo
 L2 = 850 - L0 // b=900 et -L1 car pernte négative
 L2 = LIMIT 100 950 0 // Limite amplitude servo de 100 à 950
 &serv_temp_EGT1 = L2 // Envoie valeur au servo
 }
 Var 4141, name val_egt1
 //
 // EGT 2 ===> A voir avec egt1 (autre offset ?)
 //
 Var 4142, name fs_egt2, link FSUIPC_IN, Offset $3ab0, Length 8, Numbers 3
 {
 &val_egt2 = &fs_egt2 / 1000 // Valeur réelle
 L0 = &val_egt2 - 491.67 // en °C (avec ligne suivante)
 L1 = L0 / 1.8 // divisé par 1,8
 L0 = L1 * 0.814 // "a" Pente déviation servo
 L2 = 850 - L0 // b=900 et -L1 car pernte négative
 L2 = LIMIT 100 950 0 // Limite amplitude servo de 100 à 950
 &serv_temp_EGT2 = L2 // Envoie valeur au servo
 }
 Var 4143, name val_egt2
 //
 // ££ CHT 1 & 2
 //
 // Offset $08E8 et $0980 en ° F
 // Conversion : °C = (( °F - 32 ) / 1,8
 // Graduations de 50° à 250°
 // Servo : de 180 à 950 --> a = 3,85 b = -12,5
 //
 Var 4150, name fs_cht1, link FSUIPC_IN, Offset $08E8, Length 8, Numbers 3
 {
 &val_cht1 = &fs_cht1 / 1000 // Valeur réelle
 L0 = &val_cht1 - 32 // Conversion de
 L1 = l0 / 1.8 // °F en °C
 L0 = L1 * 3.85 // "a" Pente déviation servo (y = ax)
 L2 = L0 - 12.5 // "b" ((y = ax + b)
 L2 = LIMIT 180 1000 0 // Limite amplitude servo de 180 à 1000
 &serv_temp_CHT1 = L2 // Envoie valeur au servo
 }
 Var 4151, name val_cht1
 // CHT 2
 Var 4153, name fs_cht2, link FSUIPC_IN, Offset $0980, Length 8, Numbers 3
 {
 &val_cht2 = &fs_cht2 / 1000 // Valeur réelle
 L0 = &val_cht2 - 32 // Conversion de
 L1 = l0 / 1.8 // °F en °C
 L0 = L1 * 3.85 // "a" Pente déviation servo (y = ax)
 L2 = L0 - 12.5 // "b" ((y = ax + b)
 L2 = LIMIT 180 1000 0 // Limite amplitude servo de 180 à 1000
 &serv_temp_CHT2 = L2 // Envoie valeur au servo
 }
 Var 4154, name val_cht2
 //
 // ££ oil pressure 1 & 2
 //
 // Offset $3B60 et $3AA0
 // En lbs/sqft --> Diviser par 144 pour avoir en PSI.
 // Graduations de 0 à 100 PSI
 // Servo : de 900 à 150 --> a = -7,5 b = 900
 //
 Var 4160, name fs_oil_pres1, link FSUIPC_IN, Offset $3B60, Length 8, Numbers 3
 {
 &val_oil_pres1 = &fs_oil_pres1 / 1000 // Valeur réelle en lbs/sqft
 L0 = &val_oil_pres1 / 144 // oil pressure en PSI
 L1 = L0 * 7.5 // "a" (y = ax)
 L2 = 900 - L1 // "b" (y = ax + b)
 L2 = LIMIT 120 950 0 // Limite amplitude servo de 120 à 950
 &serv_oil_pres1 = L2 // envoie valeur au servo
 }
 Var 4162, name val_oil_pres1
 // oil pres 2
 Var 4165, name fs_oil_pres2, link FSUIPC_IN, Offset $3AA0, Length 8, Numbers 3
 {
 &val_oil_pres2 = &fs_oil_pres2 / 1000 // Valeur réelle en lbs/sqft
 L0 = &val_oil_pres2 / 144 // oil pressure en PSI
 L1 = L0 * 7.5 // "a" (y = ax)
 L2 = 900 - L1 // "b" (y = ax + b)
 L2 = LIMIT 120 950 0 // Limite amplitude servo de 120 à 950
 &serv_oil_pres2 = L2 // envoie valeur au servo
 }
 Var 4167, name val_oil_pres2
 //
 // ££ oil temp 1 & 2
 //
 // Offset $3B58 et $3A98 en °Ra
 // Conversion : °C = (°Ra - 459,67 - 32) / 1,8 --> D'ou °C = (°Ra - 491,67) / 1,8
 // Graduations de 0 à 120°C
 // servo : 140 à 800 --> a = 5,5 b = 140
 //
 Var 4170, name fs_oil_temp1, link FSUIPC_IN, Offset $3B58, Length 8, Numbers 3
 {
 &val_oil_tmp1 = &fs_oil_temp1 / 1000 // Valeur réelle oil_temp en °Ra
 L0 = &val_oil_tmp1 - 491.67 // Conversion de °Ra
 L1 = L0 / 1.8 // en °C
 L0 = L1 * 5.5 // "a" (y = ax)
 L2 = L0 + 140 // "b" (y = ax + b)
 L2 = LIMIT 120 900 0 // Limite amplitude servo de 120 à 900
 &serv_oil_temp1 = L2 // Envoie valeur au servo
 }
 Var 4171, name val_oil_tmp1
 // oil temp 2
 Var 4172, name fs_oil_temp2, link FSUIPC_IN, Offset $3A98, Length 8, Numbers 3
 {
 &val_oil_tmp2 = &fs_oil_temp2 / 1000 // Valeur réelle oil_temp en °Ra
 L0 = &val_oil_tmp2 - 491.67 // Conversion de °Ra
 L1 = L0 / 1.8 // en °C
 L0 = L1 * 5.5 // "a" (y = ax)
 L2 = L0 + 140 // "b" (y = ax + b)
 L2 = LIMIT 120 900 0 // Limite amplitude servo de 120 à 900
 &serv_oil_temp2 = L2 // Envoie valeur au servo
 }
 Var 4173, name val_oil_tmp2
 //
 // ££ Fuel gauge left et Right
 //
 // Offset $0B7C et $0B94 Length 4 en % * 128 * 65536
 // Graduation 0 à 100 %
 // servo de 170 à 850 --> a = 6,8 b = 170
 //
 // Fuel gauge left : De base (sans correction bug "stop ou start" sw_bat).
 Var 4180, name fs_fuel_left, link FSUIPC_INOUT, Offset $0b94, Length 4
 // Var 4180, name fs_fuel_left, link IOCP, Offset 0289 // IOCP ???
 {
 CALL &sub_fuel_left
 }
 Var 4181, name sub_fuel_left, link subrutine // Suppresion bug ON OFF sw_bat
 {
 &val_fuel_right = &fs_fuel_left / 83886.08 // de 0 à 100% : 128 * 65536 / 100
 L0 = &val_fuel_right * 6.8 // "a" (y = ax)
 L1 = L0 + 170 // "b" (y = ax + b) -> nouvelle valeur servo
 L1 = LIMIT 150 900 0 // Limite amplitude servo de 150 à 900
 IF &courant = 0 // Si pas de courant
 {
 L1 = 170 // L1 = Valeur mini pour servo
 }
 &tmp_fuel_left = L1 - &old_fuel_left // Différence new - old valeur
 L2 = 4 // Si &tmp_fuel_left >= 0 (évite un "IF")
 // Sens de variation du servo (dans "TIMER")
 IF &tmp_fuel_left < 0 // Si la nouvelle valeur servo < à l'ancienne
 {
 L2 = -4 // L2 négatif
 }
 IF &tmp_fuel_left <> 0 // Si le servo doit changer
 {
 &serv_Fuel_L = TIMER L1 L2 1 // Envoie valeur au servo par pas de 2 avec timer 2/10° de s
 &old_fuel_left = L1 // Stok nouvelle valeur servo pour prochaine modif
 }
 }
 Var 4182, name val_fuel_left // Valeur fuel en %
 Var 4183, name old_fuel_left // mémorise ancienne valeur fuel
 Var 4184, name tmp_fuel_left // Différence entre ancienne et nouvelle valeur du servo
 // Fuel gauge right
 Var 4200, name fs_fuel_right, link FSUIPC_INOUT, Offset $0b94, Length 4
 {
 CALL &sub_fuel_right
 }
 Var 4201, name sub_fuel_right, link subrutine
 {
 &val_fuel_right = &fs_fuel_right / 83886.08 // de 0 à 100% : 128 * 65536 / 100
 L0 = &val_fuel_right * 6.8 // "a" (y = ax)
 L1 = L0 + 170 // "b" (y = ax + b) -> nouvelle valeur servo
 L1 = LIMIT 150 900 0 // Limite amplitude servo de 150 à 900
 IF &courant = 0 // Si pas de courant
 {
 L1 = 170 // L1 = Valeur mini pour servo
 }
 &tmp_fuel_right = L1 - &old_fuel_right // Différence new - old valeur
 L2 = 4 // Si &tmp_fuel_left >= 0 (évite un "IF")
 // Sens de variation du servo (dans "TIMER")
 IF &tmp_fuel_right < 0 // Si la nouvelle valeur servo < à l'ancienne
 {
 L2 = -4 // L2 négatif : Le timer décompte
 }
 IF &tmp_fuel_right <> 0 // Si le servo doit changer
 {
 &serv_Fuel_R = TIMER L1 L2 1 // Envoie valeur au servo par pas de 2 avec timer 2/10° de s
 &old_fuel_right = L1 // Stok nouvelle valeur servo pour prochaine modif
 }
 }
 Var 4202, name val_fuel_right // Valeur fuel en %
 Var 4203, name old_fuel_right // mémorise ancienne valeur fuel
 Var 4204, name tmp_fuel_right // Différence entre ancienne et nouvelle valeur du servo
 //
 // ££ Jauge prop amps : 150 à 840
 //
 Var 4230, name sw_prop, Link IOCARD_SW, Input 192 // inter prop icing
 {
 CALL &sub_prop_amps
 }
 Var 4231, name sub_prop_amps, link subrutine
 {
 IF &main_bus_volt < 2750
 {
 &serv_prop_amp = 180
 }
 ELSE
 {
 IF &sw_prop = 1
 {
 &serv_prop_amp = 480
 }
 ELSE
 {
 &serv_prop_amp = 180
 }
 }
 }
 //
 // ££ Jauge Icing pressure : 250 à 800
 //
 Var 4250, name sw_surface, Link IOCARD_SW, Input 205 // inter surface icing
 {
 CALL &serv_surface
 }
 Var 4252, name serv_surface, Link subrutine
 {
 IF &main_bus_volt < 2750
 {
 &serv_pres_sur = 250
 }
 ELSE
 {
 IF &sw_surface = 1
 {
 &serv_pres_sur = 770
 }
 ELSE
 {
 &serv_pres_sur = 475
 }
 }
 }
 //
 // ****************** Fin routines servos ************************
 // *****************************************************************
Il y a sûrement des améliorations et simplifications à faire !



 
   
  
 
 

 
  
  
 
