code sioc du bloc com1
Voici le code complet pour l'affichage de com1, il reproduit de la façon la plus réaliste possible le fonctionnement de ce bloc de communication
Un encodeur simple avec poussoir permet de passer de la sélection des entiers à la sélection des décimales car je n'ai pas la place pour un encodeur double.
En l'absence sur Sioc de la possibilité de mémoriser des fréquences dans un tableau de variables, j'ai imaginé une façon de faire qui consiste à les créer en dur dans le code dans la varible 405, on les fait défiler sur l'afficheur Standbye par appui vers le bas sur l'interrupteur momentané situé à droite des afficheurs, comme sur le vrai ( en utilisant la fonction rotate).
L'appui vers le haut de cet interrupteur fait basculer la fréquence Stanbye sur l'afficheur du haut (fréquence en cours)
Var 0088, name COM1, Link FSUIPC_OUT, Offset $034E, Length 2 // OUT COM1
Var 0322, name COM1_DIS_CALC, Link SUBRUTINE // Calcul de l'affichage de COM1
{
L0 = &COM1_CENT_INI * 1000
L0 = L0 + &COM1_DEC_INI
&COM1_DIS = DIV L0 ,10
&COM1_DIS = TRUNC &COM1_DIS
&COM1_DIS = &COM1_DIS + 10000
}
Var 0405, name sw_com1_mem, Link IOCARD_SW, Input 5, Type P // Inter de défilement des fréquences mémorisée pour comm1
{
IF &BATTERY = 1 // Si général on
{
IF &AVNCS = 1 // Si avionics on
{
&cpteur_com1 = rotate 1, 5 , 1
if &cpteur_com1 = 1
{
&com1_dis = 13127 // frescaty
}
if &cpteur_com1 = 2
{
&com1_dis = 12210 // ground frescaty
}
if &cpteur_com1 = 3
{
&com1_dis = 11830 // mulhouse
}
if &cpteur_com1 = 4
{
&com1_dis = 11935 // bale approche
}
if &cpteur_com1 = 5
{
&com1_dis = 12160 // bale tower
}
}
}
}
Var 0427, name comm1_mode_P, Link IOCARD_SW Input 27 Type P // bouton poussoir de l'encodeur comm1
{
&comm1Mode = CHANGEBITN 0 &comm1Mode
}
Var 0428, name comm1_act_sw, Link IOCARD_SW, Input 28, Type P // Inter de bascule comm 1 active standbye
{
IF &BATTERY = 1 // Si général on
{
IF &AVNCS = 1 // Si avionics on
{
L0 = frombcd &com1
&COM1 = TOBCD &COM1_DIS
&com1_active = &com1_dis
&com1_dis = L0
}
}
}
Var 0503, name COM1_CENT_ROT, Link IOCARD_ENCODER, Input 31, Aceleration 2, Type 2 // Encodeur COM1
{
IF &BATTERY = 1 // Si général on
{
IF &AVNCS = 1 // Si avionics on
{
C0 = TESTBIT &comm1Mode 0
if C0
{
&COM1_CENT_INI = ROTATE 18 ,35 ,&COM1_CENT_ROT
}
else
{
l0 = &com1_cent_rot * 10
&com1_dec_ini = rotate 0, 900, l0
}
}
}
}
Var 0603, name COM1_DIS, Link IOCARD_DISPLAY, Digit 16, Numbers 5 // affichage COM1 STANDBYE
Var 0604, name COM1_ACTIVE, Link IOCARD_DISPLAY, Digit 21, Numbers 5 // affichage COM1 ACTIVE
Var 0915, name COM1_CENT_INI, Value 27 // Init entiers COM1
{
CALL &COM1_DIS_CALC
}
Var 0916, name COM1_DEC_INI, Value 50 // Init décimales COM1
{
CALL &COM1_DIS_CALC
}
var 0917, name cpteur_com1 // compteur pour incrémentation défilement fréquences com1
Var 0934, name comm1Mode // 0 = Low, 1 = High pour bascule entier/decimal comm1
Bonne lecture et bonne adaptation pour les autres blocs
Un encodeur simple avec poussoir permet de passer de la sélection des entiers à la sélection des décimales car je n'ai pas la place pour un encodeur double.
En l'absence sur Sioc de la possibilité de mémoriser des fréquences dans un tableau de variables, j'ai imaginé une façon de faire qui consiste à les créer en dur dans le code dans la varible 405, on les fait défiler sur l'afficheur Standbye par appui vers le bas sur l'interrupteur momentané situé à droite des afficheurs, comme sur le vrai ( en utilisant la fonction rotate).
L'appui vers le haut de cet interrupteur fait basculer la fréquence Stanbye sur l'afficheur du haut (fréquence en cours)
Var 0088, name COM1, Link FSUIPC_OUT, Offset $034E, Length 2 // OUT COM1
Var 0322, name COM1_DIS_CALC, Link SUBRUTINE // Calcul de l'affichage de COM1
{
L0 = &COM1_CENT_INI * 1000
L0 = L0 + &COM1_DEC_INI
&COM1_DIS = DIV L0 ,10
&COM1_DIS = TRUNC &COM1_DIS
&COM1_DIS = &COM1_DIS + 10000
}
Var 0405, name sw_com1_mem, Link IOCARD_SW, Input 5, Type P // Inter de défilement des fréquences mémorisée pour comm1
{
IF &BATTERY = 1 // Si général on
{
IF &AVNCS = 1 // Si avionics on
{
&cpteur_com1 = rotate 1, 5 , 1
if &cpteur_com1 = 1
{
&com1_dis = 13127 // frescaty
}
if &cpteur_com1 = 2
{
&com1_dis = 12210 // ground frescaty
}
if &cpteur_com1 = 3
{
&com1_dis = 11830 // mulhouse
}
if &cpteur_com1 = 4
{
&com1_dis = 11935 // bale approche
}
if &cpteur_com1 = 5
{
&com1_dis = 12160 // bale tower
}
}
}
}
Var 0427, name comm1_mode_P, Link IOCARD_SW Input 27 Type P // bouton poussoir de l'encodeur comm1
{
&comm1Mode = CHANGEBITN 0 &comm1Mode
}
Var 0428, name comm1_act_sw, Link IOCARD_SW, Input 28, Type P // Inter de bascule comm 1 active standbye
{
IF &BATTERY = 1 // Si général on
{
IF &AVNCS = 1 // Si avionics on
{
L0 = frombcd &com1
&COM1 = TOBCD &COM1_DIS
&com1_active = &com1_dis
&com1_dis = L0
}
}
}
Var 0503, name COM1_CENT_ROT, Link IOCARD_ENCODER, Input 31, Aceleration 2, Type 2 // Encodeur COM1
{
IF &BATTERY = 1 // Si général on
{
IF &AVNCS = 1 // Si avionics on
{
C0 = TESTBIT &comm1Mode 0
if C0
{
&COM1_CENT_INI = ROTATE 18 ,35 ,&COM1_CENT_ROT
}
else
{
l0 = &com1_cent_rot * 10
&com1_dec_ini = rotate 0, 900, l0
}
}
}
}
Var 0603, name COM1_DIS, Link IOCARD_DISPLAY, Digit 16, Numbers 5 // affichage COM1 STANDBYE
Var 0604, name COM1_ACTIVE, Link IOCARD_DISPLAY, Digit 21, Numbers 5 // affichage COM1 ACTIVE
Var 0915, name COM1_CENT_INI, Value 27 // Init entiers COM1
{
CALL &COM1_DIS_CALC
}
Var 0916, name COM1_DEC_INI, Value 50 // Init décimales COM1
{
CALL &COM1_DIS_CALC
}
var 0917, name cpteur_com1 // compteur pour incrémentation défilement fréquences com1
Var 0934, name comm1Mode // 0 = Low, 1 = High pour bascule entier/decimal comm1
Bonne lecture et bonne adaptation pour les autres blocs
A découvrir aussi
Retour aux articles de la catégorie Le code SIOC et LUA -
⨯
Inscrivez-vous au blog
Soyez prévenu par email des prochaines mises à jour
Rejoignez les 122 autres membres