Décimales COM

Questions de programmation / Offset FSUIPC et IOCP

Décimales COM

Messagede sertor33 » Jeu 24 Nov 2016 19:05

Bonsoir tous les SIOCmen,

Dans le but de me constituer un stock de petits scripts permettant de bien comprendre le langage avant de démarrer la réalisation de mon simu, je sèche sur un point.
Je veux modifier les décimales d'une fréquence radio, ça marche pour les modulos 5, ça marche pas pour le modulos 2.5
Quand j'utilise ce multiplicateur, les fréquence augmentent par pas de 2 ...
Why ?
Voici le script de test :
Var 0010, name Dis_Com1, Link IOCARD_DISPLAY, Digit 0, Numbers 5

Var 0020, name ENT
Var 0021, name DEC

Var 0050, name FS_Com1, Link FSUIPC_INOUT, Offset $311A, Length 2 // Com1 STBY
{
L0 = FROMBCD &FS_Com1
&Dis_Com1 = L0 + 10000

&ENT = L0 / 100
&ENT = TRUNC &ENT

L1 = &ENT * 100
&DEC = L0 - L1
}

Var 0100, name Enc_Com1_DEC, Link IOCARD_ENCODER, Input 0, Aceleration 2, Type 2 // Encoder Com1 decimales
{
L0 = &Enc_Com1_DEC * 5 // 2.5
L2 = L0 + &DEC
L1 = &ENT * 100
L2 = L2 + L1
&FS_Com1 = TOBCD L2
}


Merci pour vos lumières.
Serge
sertor33
 
Messages: 44
Inscription: 24/09/16

Re: Décimales COM

Messagede A320 hérétique » Jeu 24 Nov 2016 20:15

je pense que dans une op modulo, les 2 opérandes doivent être entiers (même si cela aurait du sens avec des nombres fractionnaires) ; donc modulo 2.5 se transforme en modulo 2 : c'est le cas en général avec les langages de prog (i.e C, C++)

Michel
http://www.myA320sim.com
Simu mixte P3D/FS2020, serveur P3Dv4/A320 FMGS (7700k et GTX 1070 sous W10 64), client P3Dv4/FS2020 (i9-12900K et RTX 3080 Ti sous W10 64), 3 vdp Optoma GT1080E, client A320 FMGS (2600k sous W10 64).
Avatar de l’utilisateur
A320 hérétique
 
Messages: 3354
Inscription: 2/09/12
Localisation: Pornic

Re: Décimales COM

Messagede mameloose » Jeu 24 Nov 2016 20:34

A320 hérétique a écrit:je pense que dans une op modulo, les 2 opérandes doivent être entiers (même si cela aurait du sens avec des nombres fractionnaires) ; donc modulo 2.5 se transforme en modulo 2 : c'est le cas en général avec les langages de prog (i.e C, C++)

Michel


exact je cherche une solution simple pour parer a ca
Avatar de l’utilisateur
mameloose
 
Messages: 1271
Inscription: 20/04/09
Localisation: evreux

Re: Décimales COM

Messagede mameloose » Jeu 24 Nov 2016 20:39

bon effectivement FS ne prend pas en compte les centiemes donc ca arrondie en permanence ....
au pire tu multiplie par 1 tout simplement mais tu passeras de 122.10 a 122.11 et 122.12 ect .....
Avatar de l’utilisateur
mameloose
 
Messages: 1271
Inscription: 20/04/09
Localisation: evreux

Re: Décimales COM

Messagede fab » Jeu 24 Nov 2016 21:02

Les radio passent en effet par les valeurs decilales suivantes :
0.00
0.02
0.05
0,07
0.10

J'avais résolu la chose en SIOC avant d'avoir prosim737, je recherche dans mes archives ...
Avatar de l’utilisateur
fab
 
Messages: 4414
Inscription: 26/12/12
Localisation: Roubaix

Re: Décimales COM

Messagede sertor33 » Jeu 24 Nov 2016 21:11

Quand on clique sur les radio de FS on passe par exemple de .25 à .27 puis .30
En fait le .27 n'est qu'une partie de l'affichage de .275
Le pas est bien de 2.5 dans les offsets.
Avec mon script, l'encodeur envoie .27 puis .29 puis .31 (et en plus FS l'affiche)
Comment vous faites dans vos programmes ?
sertor33
 
Messages: 44
Inscription: 24/09/16

Re: Décimales COM

Messagede mameloose » Jeu 24 Nov 2016 21:25

effectivement le vrai affichage est de 125.275 par exemple mais flight simulator ne le prend pas en compte .....

il faut s'y prendre differement :

si tu reste avec un avion de base fsx ou p3d alors il faut taper dans ce genre de code :

Code: Tout sélectionner
// *****************************************************************************
// * Config_SIOC ver 1.98   -     By Manolo Vélez    -    www.opencockpits.com
// *****************************************************************************
// * FileName : radio_com.txt
// * Date : 20/5/2005



Var 0000, Value 0     // Inicializacion
{
  V0007 = 1         // Pone el 1 FIJO
  V0002 = 20         // Inicializamos 2 digitos altos STANDBY
  V0003 = 0         // y los 2 digitos bajos para poner 120.00
  V0012 = TOBCD 2000     // Inicializo COM1 activo a 120.00
}

Var 0002     // Frecuencia Standby 2D altos
{
  CALL V1100     // Pasa valor al simulador
}

Var 0003     // Frecuencia Standby 2D bajos
{
  CALL V1100     // Pasa valor al simulador
}

Var 0004, Link IOCARD_DISPLAY, Digit 0, Numbers 5     // Frecuencia Radio

Var 0005, Link IOCARD_DISPLAY, Digit 6, Numbers 2     // Digitos bajos

Var 0006, Link IOCARD_DISPLAY, Digit 8, Numbers 2     // Digitos altos frecuencia standby

Var 0007, Link IOCARD_DISPLAY, Digit 10, Numbers 1     // 1 Fijo de Frecuencia Standby

Var 0008, Value 0

Var 0011, Link FSUIPC_OUT, Offset $311A, Length 2     // Frecuencia Standby COM1
{
  V0006 = V0002         // Pasa digitos altos al display
  V0005 = V0003         // Paso digitos bajos a display
}

Var 0012, Link FSUIPC_OUT, Offset $034E, Length 2     // Frecuencia activa COM1
{
  L0 = FROMBCD V0012     // paso a binario
  V0004 = L0 + 10000     // Y se lo mando al display con el 1 delant
}

Var 0013, Link IOCARD_SW, Input 49, Type P     // Pulsador de SWAP
{
  L0 = V0002 * 100     // Monto los dos digitos altos
  L0 = L0 + V0003     // Y ahora los 2 digitos bajos
  L1 = FROMBCD V0012     // Salvo la frecuencia actual pasando a dec
  V0012 = TOBCD L0     // Y le paso la frecuencia de Standbye
  L0 = L1 / 100     // Saco los 2 digitos altos
  V0002 = TRUNC L0     // Se los paso a la variable
  L2 = V0002 * 100
  V0003 = L1 - L2     // Paso los 2 digitos bajos
}

Var 0014, Link IOCARD_ENCODER, Input 28, Aceleration 1     // Encoder digitos altos
{
  V0002 = ROTATE 18 ,36 ,V0014     // Inc/Decrement considerando limites 18-36
}

Var 0015, Link IOCARD_ENCODER, Input 41, Aceleration 1     // Digitos bajos
{
  IF V0015 > 0     // Si es un incremento de frecuencia
  {
    IF V0003 = 97     // Si es el limite alto
    {
      V0003 = 0         // Paso a 0
    }
    ELSE     // Si no ha llegado al limite
    {
      L0 = V0003 + 3     // Sumo 3 pero ahora reviso...
      L1 = L0 / 10     // Saco unidades
      L1 = TRUNC L1
      L1 = L1 * 10
      L1 = L0 - L1
      IF L1 = 3     // Si las unidades terminan en 3
      {
        L0 = L0 - 1     // Decremento en 1
      }
      IF L1 = 8     // Si las unidades terminan en 8
      {
        L0 = L0 - 1     // Decremento en 1
      }
      V0003 = L0         // Paso el valor final
    }
  }
  ELSE     // Si es un decremento de Frecuencia
  {
    IF V0003 = 0     // Si ha llegado al limite
    {
      V0003 = 97         // Paso al valor alto
    }
    ELSE     // Si no ha llegado al limite
    {
      L0 = V0003 - 3
      IF L0 = -1     // Miro si es -1 que corresponde a 0
      {
        V0003 = 0         // asigno entonces 0
      }
      ELSE     // Prosigo con lextraccion de las unidades
      {
        L1 = L0 / 10     // Saco unidades
        L1 = TRUNC L1
        L1 = L1 * 10
        L1 = L0 - L1
        IF L1 = 4     // Si termina en 4 corresponde con 5
        {
          L0 = L0 + 1
        }
        IF L1 = 9     // Si termina en 9 corresponde con 0
        {
          L0 = L0 + 1
        }
        V0003 = L0         // Paso el valor a la variable
      }
    }
  }
}

Var 1100, Link SUBRUTINE     // Manda valor a frecuencia standby
{
  L0 = V0002 * 100     // Monta el número
  L0 = L0 + V0003
  V0011 = TOBCD L0     // Pasamos a BCD y enviamos al simulador
}


bon javoue super compliqué pour un debutant et les codes dopencockpit sont parfois biscornu ....

autrement si tu utilise un addon comme je sais pas Ifly prosim ect ... alors la prog est completement differente ....

ou alors faire ton code maison et essayer de trouver la parade ! cligneoeil

si tu galere trop jessayerai de te faire un code qui va bien
Avatar de l’utilisateur
mameloose
 
Messages: 1271
Inscription: 20/04/09
Localisation: evreux

Re: Décimales COM

Messagede sertor33 » Jeu 24 Nov 2016 22:20

Je confirme, super compliqué pour un débutant.
Mais au delà de la complexité, est-ce que cela veut dire qu'il y a une solution avec SIOC ?

Mameloose, qu'est-ce que tu entends par 'mais flight simulator ne le prend pas en compte .....' ?
Il me semble qu'en sélectionnant 121.72 sur FS on sélectionne bien 121.725 (Mérignac Sol). D'où le besoin de cette possibilité via l'encodeur.

Question subsidiaire pour ma culture : les addon travaillent bien avec les variables FS ?, donc ils ont bien résolu le problème du stockage de ce millième ?
sertor33
 
Messages: 44
Inscription: 24/09/16

Re: Décimales COM

Messagede mameloose » Jeu 24 Nov 2016 22:24

Oui bien sur la solution existe tout est possible avec sioc et non certain addon ne fonctionne pas avec les variables fs...
En faite fs ne fait pas la différence entre 121.270 et 121.275 par exemple il suffit par exemple de faire ton propre encodage et qui influ également sur fs
Jte ferai un code demain vite fait si tu veux
Avatar de l’utilisateur
mameloose
 
Messages: 1271
Inscription: 20/04/09
Localisation: evreux

Re: Décimales COM

Messagede sertor33 » Jeu 24 Nov 2016 22:46

Avec plaisir, pour le code. Surtout pour comprendre, pas seulement pour que ça marche.

je reviens 2 secondes sur FS qui 'ne fait pas la différence entre 121.270 et 121.275'.
Exemple, l'ATIS Blagnac est 123.125, si FS code 123.120, comment il accroche la fréquence ?

Merci pour ton temps
sertor33
 
Messages: 44
Inscription: 24/09/16

Suivante

Retourner vers Programmation Sioc





Qui est en ligne

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