SIOC COM1-NAV1

Questions de programmation / Offset FSUIPC et IOCP

SIOC COM1-NAV1

Messagede alpan » Lun 19 Mar 2012 16:35

Bonjour à tous,
je vous mets ci-dessous mon script SIOC pour com1 nav1, le souci que j'ai, c'est que lorsque je fais varier les décimales de la fréquence COM1 celles de la NAV1 varient également. Quelqu'un serait-il en mesure de m'aider?

Code: Tout sélectionner
Var 0800, Value 18 // Init entiers COM1 = 118
{
CALL V0814
}

Var 0804, Value 0 // Init décimales COM1
{
CALL V0814
}

Var 0805, name SW_COM_NAV_ENT, Link IOCARD_SW, Input 24 // SWITCH COM1 NAV1

ENTIERS

Var 0806, Link IOCARD_ENCODER, Input 40, Aceleration 2, Type 2 // entiers COM1
{
   IF V0805 = 1
  {
   V0800 = ROTATE 18 ,35 ,V0806
  }
 ELSE
  {
   V0866 = ROTATE 8 ,17 ,V0806
}
}

Var 0808, Link IOCARD_ENCODER, Input 42, Aceleration 2, Type 2 // décimales COM1
{
   IF V0805 = 1
  {
   L0 = V0808 * -25
   V0804 = V0804 - L0
   IF V0804 > 975
  {
   V0804 = 0
  }
   IF V0804 < 0
  {
   V0804 = 975
  }
  ELSE
  {
   L0 = V0808 * -50
   V0868 = V0868 - L0
   IF V0868 > 950
  {
   V0868 = 0
  }
   IF V0868 < 0
  {
   V0868 = 950
  }
}
}
}

Var 0809, name SR_Com1, Link SUBRUTINE // Sous Routine Com1

Var 0810, Link IOCARD_DISPLAY, Digit 5, Numbers 5 // affichage COM1

Var 0812, Link FSUIPC_OUT, Offset $034E, Length 2 // Envoi COM1 à FS

Var 0814, Link SUBRUTINE // MONTAGE FREQ COM_1
{
L0 = V0800 * 1000
L0 = L0 + V0804
V0810 = DIV L0 ,10
V0810 = TRUNC V0810
V0812 = TOBCD V0810 // TRANSFORMATION DE DEC A BIN
}

Var 0866, Value 10 // ENTIERS NAV_1 VALEUR INITIALE 110
{
CALL V0878
}

Var 0868, Value 300 // DECIMALES NAV_1 VALEUR INITIALE 300
{
CALL V0878
}

Var 0874, Link IOCARD_DISPLAY, Digit 0, Numbers 5 // SORTIE DISPLAYS NAV_1

Var 0876, Link FSUIPC_OUT, Offset $0350, Length 2 // ENVOI NAV_1 A FS

Var 0878, Link SUBRUTINE // MONTAGE NUMERO NAV_1
{
L0 = V0866 * 1000
L0 = L0 + V0868
V0874 = DIV L0 ,10
V0874 = TRUNC V0874
V0876 = TOBCD V0874 // TRANSFORMATION DE DEC A BIN
}
alpan
 
Messages: 20
Inscription: 2/12/09

Re: SIOC COM1-NAV1

Messagede tabar57 » Lun 19 Mar 2012 17:03

Salut,

Pour t'aider il faudrait d'abord que l'on sache quel est le type d'inter que tu utilises pour la bascule comm nav, c'est un inter , un poussoir ?
Car le type n'est pas précisé dans la variable, es tu sûr qu'il prend et garde la valeur 0 ou 1 ?

En première approche ...
Je regarde çà un peu plus ce soir.


Si je peux me permettre un petit conseil, tu devrais nommer tes variables, on s'y retrouve bien mieux qu'avec des numéros

Cordialement

Bernard
Mon blog de construction : http://tabar57.blog4ever.com
Hémicockpit de Beechcraft B200 ( de FlightOne ) P3DV4.5 et 2 PC en réseau W7 64 bits et W10, cartes OC et FDbus, vibreur et yoke rdf de BFFsimulation, météo réelle asp4
Avatar de l’utilisateur
tabar57
 
Messages: 3651
Inscription: 29/12/10
Localisation: Dans ma cabine en Lorraine

Re: SIOC COM1-NAV1

Messagede tabar57 » Lun 19 Mar 2012 18:33

Salut Alpan,

J'ai regardé un peu plus ton code, je crois que tu devrais refermer ton accolade qui suit le IF V0805 = 1 de ta var 0808
avant le ELSE et non pas après comme tu le fais.
En clair tu devrais avoir 2 accolades fermantes avant le ELSE au lieu d'une et en enlever une à la fin du script de la variable 0808

Cordialement

Bernard
Mon blog de construction : http://tabar57.blog4ever.com
Hémicockpit de Beechcraft B200 ( de FlightOne ) P3DV4.5 et 2 PC en réseau W7 64 bits et W10, cartes OC et FDbus, vibreur et yoke rdf de BFFsimulation, météo réelle asp4
Avatar de l’utilisateur
tabar57
 
Messages: 3651
Inscription: 29/12/10
Localisation: Dans ma cabine en Lorraine

Re: SIOC COM1-NAV1

Messagede nuno14 » Lun 19 Mar 2012 23:34

bonsoir alpan,

Essaye ceci ( cela peut être une piste. je n'est pas vérifier ci cela fonctionne ) . Je t'ai rajouter les variables 801 et 802 et modifier les autres. Au cas où je peux te fournir le code complet avec les COM1 et 2, NAV1 et 2 et ADF avec le bouton swap.

Code: Tout sélectionner
Var 0801, name RADIO_COM1

Var 0802, name RADIO_NAV1

Var 0805, name SW_COM_NAV_ENT, Link IOCARD_SW, Input 24, Type I // SWITCH COM1 NAV1
{
  IF &SW_COM_NAV_ENT = 1
  {
    &RADIO_COM1 = 1
    &RADIO_NAV1 = 0
  }
  IF &SW_COM_NAV_ENT = 0
  {
    &RADIO_NAV1 = 1
    &RADIO_COM1 = 0   
  }
}

Var 0806, Link IOCARD_ENCODER, Input 40, Aceleration 2, Type 2 // entiers COM1
{
   IF &RADIO_COM1 = 1
  {
   V0800 = ROTATE 18 ,35 ,V0806
  }
  IF &RADIO_NAV1 = 1
  {
   V0866 = ROTATE 8 ,17 ,V0806
}
}

Var 0808, Link IOCARD_ENCODER, Input 42, Aceleration 2, Type 2 // décimales COM1
{
   IF &RADIO_COM1 = 1
  {
   L0 = V0808 * -25
   V0804 = V0804 - L0
   IF V0804 > 975
  {
   V0804 = 0
  }
   IF V0804 < 0
  {
   V0804 = 975
  }
  IF &RADIO_NAV1 = 1
  {
   L0 = V0808 * -50
   V0868 = V0868 - L0
   IF V0868 > 950
  {
   V0868 = 0
  }
   IF V0868 < 0
  {
   V0868 = 950
  }
}
}
}



A+

Nuno
Avatar de l’utilisateur
nuno14
 
Messages: 175
Inscription: 14/09/10
Localisation: Près de Lisieux, Normandie

Re: SIOC COM1-NAV1

Messagede alpan » Mar 20 Mar 2012 11:09

Un grand merci à Tabar57, juste un question d'accolade, mon problème est donc résolu. Merci également à toi Nuno14, néanmoins, ayant pris les réponse dans l'ordre, je n'ai pas eu besoin du code que tu m'avais fourni et donc pas testé.
alpan
 
Messages: 20
Inscription: 2/12/09

Re: SIOC COM1-NAV1

Messagede tabar57 » Mar 20 Mar 2012 12:13

Salut Alpan,

Content d'avoir résolu ton problème.
Juste une petite remarque, sauf erreur de ma part je ne t'ai pas vu dans les présentations, ce serait bien que tu prennes quelques minutes pour le faire, c'est la tradition sur ce forum, histoire de mieux se connaitre.

Merci

Bernard
Mon blog de construction : http://tabar57.blog4ever.com
Hémicockpit de Beechcraft B200 ( de FlightOne ) P3DV4.5 et 2 PC en réseau W7 64 bits et W10, cartes OC et FDbus, vibreur et yoke rdf de BFFsimulation, météo réelle asp4
Avatar de l’utilisateur
tabar57
 
Messages: 3651
Inscription: 29/12/10
Localisation: Dans ma cabine en Lorraine

Re: SIOC COM1-NAV1

Messagede Boutondair » Mar 20 Mar 2012 15:13

Voici le code modifié

Code: Tout sélectionner
///// COM1-NAV1 /////


Var 0800, Value 18 // init entiers COM1
{
CALL V0814
}

Var 0804, Value 0 // init decimale COM1
{
CALL V0814
}

Var 0805, name SW_COM_NAV, Link IOCARD_SW, Input 24 // SWITCH COM1 NAV1

Var 0806, name Enc_Com1_EN, Link IOCARD_ENCODER, Input 24, Aceleration 2, Type 2 // Encoder COM1-NAV1 entiers (+ INPUT...)
{
IF V0805 = 1
{
V0800 = ROTATE 18 ,36 ,&Enc_Com1_EN
}
ELSE
{
V0866 = ROTATE 8 ,17 ,&Enc_Com1_EN
}
}

Var 0808, name Enc_Com1_DC, Link IOCARD_ENCODER, Input 22, Aceleration 2, Type 2 // Encoder Com1-NAV1 decimales (+ INPUT...)
{
IF V0805 = 1
{
L0 = &Enc_Com1_DC * -25
V0804 = V0804 - L0
IF V0804 > 975
{
V0804 = 0
}
IF V0804 < 0
{
V0804 = 975
}
}
ELSE
{
L0 = &Enc_Com1_DC * -50
V0868 = V0868 - L0
IF V0868 > 950
{
V0868 = 0
}
IF V0868 < 0
{
V0868 = 950
}
}
}


Var 0809, name SR_Com1, Link SUBRUTINE // Sous Routine Com1

Var 0810, name Dis_Com1, Link IOCARD_DISPLAY, Digit 0, Numbers 5

Var 0812, name FS_Com1, Link FSUIPC_OUT, Offset $034E, Length 2 // Envoi Com1 a FS
{
&Dis_Com1 = FROMBCD &FS_Com1
}

Var 0814, Link SUBRUTINE // Montee Frequence Com1
{
L0 = V0800 * 1000
L0 = L0 + V0804
&Dis_Com1 = DIV L0 ,10
&Dis_Com1 = TRUNC &Dis_Com1
&FS_Com1 = TOBCD &Dis_Com1
}

Var 0866, Value 10 // Valeur INITIALE entiers NAV1 - 110
{
CALL &SR_Freq_Nav1
}

Var 0868, Value 300 // Valeur intiale decimales NAV1 -300
{
CALL &SR_Freq_Nav1
}

Var 0874, name Disp_Nav1, Link IOCARD_DISPLAY, Digit 10, Numbers 5 // Affichage NAV1

Var 0876, name FS_Nav1, Link FSUIPC_OUT, Offset $0350, Length 2 // Envoi Nav1 à FS

Var 0878, name SR_Freq_Nav1, Link SUBRUTINE // SR Montage frequence Nav1
{
L0 = V0866 * 1000
L0 = L0 + V0868
&Disp_Nav1 = DIV L0 ,10
&Disp_Nav1 = TRUNC &Disp_Nav1
&FS_Nav1 = TOBCD &Disp_Nav1
}

///// ADF-XPNDR /////


Var 0919, name SW_ADF_XPNDR, Link IOCARD_SW, Input 24 // SWITCH ADF-XPNDR

Var 0920, name ADF_HIGH_VAR, Link FSUIPC_INOUT, Offset $034C, Length 2 // Variable chiffres supérieurs ADF
{
L0 = FROMBCD &ADF_HIGH_VAR
IF &ADF_HIGH <> L0
{
&ADF_HIGH = L0
}
}

Var 0922, name ADF_LOW_VAR, Link FSUIPC_INOUT, Offset $0356, Length 2 // Variable ADF chiffres inférieurs
{
IF &ADF_LOW_VAR <> &ADF_LOW
{
&ADF_LOW = &ADF_LOW_VAR
}
}

Var 0924, name ADF_CALC, Link SUBRUTINE // Calcul affichage ADF (by Nico)
{
L0 = &ADF_HIGH * 10 // high * 10
L0 = L0 + &ADF_LOW // + dec
&ADF_DIS = L0 // to display
L1 = MOD L0 ,10 // decimal digit
IF L1 <> &ADF_LOW_VAR
{
&ADF_LOW_VAR = L1 // decimal digit to fsuipc
}
L0 = DIV L0 ,10
L1 = TOBCD L0
IF L1 <> &ADF_HIGH_VAR
{
&ADF_HIGH_VAR = L1 // higher 3 digits in bcd to fsuipc
}
&ADF_DP_LED = 1
}

Var 0926, name LOW_ROT, Link IOCARD_ENCODER, Input 14, Aceleration 4, Type 2 // Encodeur ADF-XPNDR chiffres inférieurs (+ INPUT...)
{
IF V0919 = 1
{
L0 = &LOW_ROT * 5 // steps of 5
&ADF_LOW_R = ROTATE 0 ,99 ,L0
}
ELSE
{
L0 = V0926 * -1 // CHANGEMENT DE SENS DE ROTATION
V0950 = V0950 - L0
IF V0950 > 77
{
V0950 = 0
}
IF V0950 < 0
{
V0950 = 77
}
}
}

Var 0928, name HI_ROT, Link IOCARD_ENCODER, Input 37, Aceleration 4, Type 2 // Encodeur ADF-XPNDR chiffres supérieurs (+ INPUT...)
{
IF V0919 = 1
{
L0 = &HI_ROT
&ADF_HIGH_R = ROTATE 20 ,99 ,L0
}
ELSE
{
L0 = V0928 * -1 // CHANGEMENT DE SENS DE ROTATION
V0951 = V0951 - L0
IF V0951 > 77
{
V0951 = 0
}
IF V0951 < 0
{
V0951 = 77
}
}
}

Var 0930, name ADF_DIS, Link IOCARD_DISPLAY, Digit 21, Numbers 5 // Affichage ADF

Var 0932, name ADF_DP_LED, Link IOCARD_OUT, Output 28 // Point décimal ADF

Var 0933, name SW_ADF_SWAP, Link IOCARD_SW, Input 27, Type P // Bouton Swap ADF
{
&JoyStick64 = CHANGEBIT 27 ,&SW_ADF_SWAP
}

Var 0934, name ADF_HIGH
{
L0 = &ADF_HIGH
L1 = DIV L0 ,10
IF &ADF_HIGH_R <> L1
{
&ADF_HIGH_R = L1
CALL &ADF_CALC
}
L1 = MOD L0 ,10
L1 = L1 * 10
L0 = &ADF_LOW
L1 = L1 + L0
IF &ADF_LOW_R <> L1
{
&ADF_LOW_R = L1
CALL &ADF_CALC
}
}

Var 0936, name ADF_LOW
{
L0 = &ADF_HIGH
L0 = MOD L0 ,10
L0 = L0 * 10
L1 = &ADF_LOW
L0 = L0 + L1
IF &ADF_LOW_R <> L0
{
&ADF_LOW_R = L0
CALL &ADF_CALC
}
}

Var 0938, name ADF_HIGH_R
{
L0 = &ADF_LOW_R
L0 = DIV L0 ,10
L1 = &ADF_HIGH_R
L1 = L1 * 10
L1 = L1 + L0
&ADF_HIGH = L1
CALL &ADF_CALC
}

Var 0939, name ADF_LOW_R
{
L0 = &ADF_LOW_R
L1 = MOD L0 ,10
&ADF_LOW = L1
L1 = DIV L0 ,10
L0 = &ADF_HIGH
L0 = DIV L0 ,10
L0 = L0 * 10
L1 = L0 + L1
&ADF_HIGH = L1
CALL &ADF_CALC
}

Var 0950, Value 0 // CHIFFRES INFERIEURS XPNDR
{
CALL V0980
}

Var 0951, Value 12 // CHIFFRES SUPERIEURS XPNDR
{
CALL V0980
}

Var 0970, Link FSUIPC_OUT, Offset $0354, Length 2

Var 0980, Link SUBRUTINE
{
L0 = V0951 * 100
L0 = L0 + V0950
V0970 = TOBCD L0
}


merci affiche Alpan
Image Image
Petit je rêvais que je volerais, maintenant grâce au virtuel je vole !!!!!
Avatar de l’utilisateur
Boutondair
Administrateur du site
 
Messages: 4174
Inscription: 20/04/09
Localisation: Ballans (17) proche de Cognac

Re: SIOC COM1-NAV1

Messagede tabar57 » Mar 20 Mar 2012 16:53

Bonjour à tous,

Pour la petite histoire j'ai mis sur mon blog mon code de bloc com1.
Il reproduit de façon réaliste celui du B200 avec notamment une astuce pour faire défiler des fréquences mémorisées sur l'afficheur standbye par appui sur l'interrupteur comme sur le vrai, si va vous dit il est à dispo.

Cordialement

Bernard
Mon blog de construction : http://tabar57.blog4ever.com
Hémicockpit de Beechcraft B200 ( de FlightOne ) P3DV4.5 et 2 PC en réseau W7 64 bits et W10, cartes OC et FDbus, vibreur et yoke rdf de BFFsimulation, météo réelle asp4
Avatar de l’utilisateur
tabar57
 
Messages: 3651
Inscription: 29/12/10
Localisation: Dans ma cabine en Lorraine


Retourner vers Programmation Sioc





Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 28 invités