Page 3 sur 11

TUTO SIOC ET XPLANE

MessagePosté: Ven 13 Avr 2018 22:26
de JC67
Bonsoir,
Je me suis inspiré d'un vieux code que j'avais pour FSX et qui est visible dans le post sur: Nouvelle catégorie ouverte pour les débutants Sioc

JC67 a écrit:Bonsoir,
Voici ma modeste contribution:

Commande du train:
Code: Tout sélectionner
Var 0001, name COMMANDE_TRAIN, Link FSUIPC_INOUT, Offset $0BE8, Length 4     // COMMANDE TRAIN

Var 0300, name GEAR_SW, Link IOCARD_SW, Device 11, Input 27     // GEAR_SWITCH
{
  IF &GEAR_SW = 1
  {
    &COMMANDE_TRAIN = 0   
  }
  ELSE
  {
    &COMMANDE_TRAIN = 16383   
  }
}


Couronne du VOR1 (avec un encodeur rotatif CTS288):
Code: Tout sélectionner
Var 1, name APD_COURSE1, Link FSUIPC_INOUT, Offset $0C4E, Length 2 // APD_COURSE1

Var 2, name E_COURSE1, Link IOCARD_ENCODER, DEVICE 11, Input 32, Aceleration 4, Type 2
{
  L0 = &E_COURSE1 * -1
  &APD_COURSE1 = ROTATE 1, 360, L0
}


Couronne du VOR2 (avec un encodeur rotatif CTS288):
Code: Tout sélectionner
Var 1, name APD_COURSE2, Link FSUIPC_INOUT, Offset $0C5E, Length 2 // APD_COURSE2

Var 2, name E_COURSE2, Link IOCARD_ENCODER, DEVICE 11, Input 30, Aceleration 4, Type 2
{
  L0 = &E_COURSE2 * -1
  &APD_COURSE2 = ROTATE 1, 360, L0
}


Couronne du cap/HEADING (avec un encodeur rotatif CTS288):
Code: Tout sélectionner
Var 2000, Value 0  //  Initialization
{
  &D_HDG = 360
}

Var 2005, name APD_HDG, Link FSUIPC_INOUT, Offset $07CC, Length 2 // APD_HDG

Var 2104, name D_HDG, Link IOCARD_DISPLAY, DEVICE 11, Digit 6, Numbers 3
{
  L1 = &D_HDG * 182.04444
  L0 = L1 + 1
  &APD_HDG = L0
}

Var 2306, name E_HDG, Link IOCARD_ENCODER, DEVICE 11, Input 28, Aceleration 4, Type 2
{
  L0 = &E_HDG * -1
  &D_HDG = ROTATE 1, 360, L0
}


Réglage de la pression atmosphérique sur l'altimètre (avec un encodeur rotatif CTS288):
Code: Tout sélectionner
Var 1, name Set_Alti, Link FSUIPC_INOUT, Offset $3110, Length 4     // Set Altimeter(QNH)


Var 2, Link IOCARD_ENCODER, Device 11, Input 23 Aceleration 1 Type 2
{
 L0 = v2 // * -1 turning clockwise should be plus
 IF L0 > 0
 {
 v1 = 65883 // FS Control Kohlsman increment
 v1 = DELAY 0 10
 }
 ELSE
 {
 IF L0 < 0
 {
 v1 = 65884 // FS Control Kohlsman decrement
v1 = DELAY 0 10
 }
 }
}


Calage de l'altitude de décision sur le radio altimètre (avec un encodeur rotatif CTS288):
Code: Tout sélectionner
Var 1, name Set_Alti, Link FSUIPC_INOUT, Offset $3110, Length 4     // SET DECISION HEIGHT


Var 2, Link IOCARD_ENCODER, Device 11, Input 25 Aceleration 1 Type 2
{
 L0 = v2 // * -1 turning clockwise should be plus
 IF L0 > 0
 {
 v1 = 66321 // INCREASE DECISION HEIGHT
 v1 = DELAY 0 10
 }
 ELSE
 {
 IF L0 < 0
 {
 v1 = 66322 // DECREASE DECISION HEIGHT
 v1 = DELAY 0 10
 }
 }
}


Couronne TAS de l'anémomètre (avec un encodeur rotatif CTS288) [C'est une création de Fabien. Encore merci]
Code: Tout sélectionner
Var 0001, name DISQUE_CAL, Link FSUIPC_INOUT, Offset $9000, Length 1 // je declare l'offset $9000 comme offset de commande du disque

Var 0002, name TAS_CAL, Link IOCARD_ENCODER, Device 11, Input 34, Aceleration 2, Type 2 // j'utilise la fonction LIMIT pour faire varier la valeur de 0 à 255
{
  &DISQUE_CAL = LIMIT 0 ,90 ,&TAS_CAL
}


Le code SIOC de mon MIP (j'utilise AirManager et les jauges de Fabien):
Code: Tout sélectionner
// *****************************************************************************
// * Config_SIOC ver 4.5   -     By Manuel Velez    -    www.opencockpits.com
// *****************************************************************************
// * FileName : MIP_JC.txt
// * Date : 07/10/2016
// *
// * Encore un grand merci à ceux qui m'ont inspiré et aidé. Vous pouvez les trouver sur les sites suivants:
// * http://www.aircockpit.com/
// * http://fabien.deheegher.free.fr/download/jauges/index.htm
// * http://www.simucockpit.fr/
// * http://www.simubaron.fr/
// * http://p-apou.cockpit.over-blog.com/
// *
// *
// * Ce script n'est pas terminé et évoluera en fonction de l'avancement de mon simulateur.
// * Certaines variables sont présentes mais non actives ou non terminées car je n'ai pas encore fabriqué ou fini les modules.
// *
// *
// * ORGANISATION :
// *
// * Var 0000           : Initialisation
// * Var de 0001 à 0199 : Variables vers FSUIPC ou Internes
// * vAR de 0200 à 0299 : INTERRUPTEURS ET BOUTONS
// * Var de 0300 à 0399 : ROTARY-ENCODERS
// * Var de 0400 à 0499 : Variables Switch
// * Var de 0500 à 0599 : variables non déterminées qui sont gardées en réserve
// * Var de 0600 à 0699 : variables non déterminées qui sont gardées en réserve
// * Var de 0700 à 0799 : Variables OUT (Led, relais...)
// * Var de 1000 à 1499 : Servo-moteur


//********************************
// INITIALISATION
//********************************

Var 0000, Value 0  //  INITIALISATION
{
  &D_HDG = 360
  &DISQUE_CAL = 0
  &APD_COURSE1 = 360
  &APD_COURSE2 = 360
}   


//********************************
// Variables vers FSUIPC ou Internes
//********************************

Var 0001, name COMMANDE_TRAIN, Link FSUIPC_INOUT, Offset $0BE8, Length 4     // COMMANDE TRAIN
Var 0002, name APD_HDG, Link FSUIPC_INOUT, Offset $07CC, Length 2 // APD_HDG
Var 0003, name SET_RALT, Link FSUIPC_INOUT, Offset $3110, Length 4     // SET DECISION HEIGHT
Var 0004, name Set_Alti, Link FSUIPC_INOUT, Offset $3110, Length 4     // Set Altimeter(QNH)
Var 0005, name DISQUE_CAL, Link FSUIPC_INOUT, Offset $9000, Length 1 // DISQUE TAS CALIBRATION je declare l'offset $9000 comme offset de commande du disque
Var 0006, name APD_COURSE1, Link FSUIPC_INOUT, Offset $0C4E, Length 2 // APD_COURSE1
Var 0007, name APD_COURSE2, Link FSUIPC_INOUT, Offset $0C5E, Length 2 // APD_COURSE2



//********************************
// INTERRUPTEURS ET BOUTONS
//********************************

Var 0200, name GEAR_SW, Link IOCARD_SW, Device 11, Input 27     // GEAR_SWITCH
{
  IF &GEAR_SW = 1
  {
    &COMMANDE_TRAIN = 0   
  }
  ELSE
  {
    &COMMANDE_TRAIN = 16383   
  }
}


//********************************
// ROTARY-ENCODERS
//********************************

Var 0300, name E_HDG, Link IOCARD_ENCODER, DEVICE 11, Input 28, Aceleration 4, Type 2 // APD_HDG
{
  L0 = &E_HDG * -1
  &D_HDG = ROTATE 1, 360, L0
}

Var 0301, Link IOCARD_ENCODER, Device 11, Input 25 Aceleration 1 Type 2     // SET DECISION HEIGHT
{
 L0 = v0301 // * -1 turning clockwise should be plus
 IF L0 > 0
 {
 v0003 = 66321 // INCREASE DECISION HEIGHT
 v0003 = DELAY 0 10
 }
 ELSE
 {
 IF L0 < 0
 {
 v0003 = 66322 // DECREASE DECISION HEIGHT
 v0003 = DELAY 0 10
 }
 }
}

Var 0302, Link IOCARD_ENCODER, Device 11, Input 23 Aceleration 1 Type 2 // SET FS Control Kohlsman
{
 L0 = v0302 // * -1 turning clockwise should be plus
 IF L0 > 0
 {
 v0004 = 65883 // FS Control Kohlsman increment
 v0004 = DELAY 0 10
 }
 ELSE
 {
 IF L0 < 0
 {
 v0004 = 65884 // FS Control Kohlsman decrement
 v0004 = DELAY 0 10
 }
 }
}

Var 0303, name TAS_CAL, Link IOCARD_ENCODER, Device 11, Input 34, Aceleration 2, Type 2 // SET TAS CALIBRATION j'utilise la fonction LIMIT pour faire varier la valeur de 0 à 255
{
  &DISQUE_CAL = LIMIT 0 ,255 ,&TAS_CAL
}

Var 0304, name E_COURSE1, Link IOCARD_ENCODER, DEVICE 11, Input 32, Aceleration 4, Type 2 // APD_COURSE1
{
  L0 = &E_COURSE1 * -1
  &APD_COURSE1 = ROTATE 1, 360, L0
}

Var 0305, name E_COURSE2, Link IOCARD_ENCODER, DEVICE 11, Input 30, Aceleration 4, Type 2 // APD_COURSE2
{
  L0 = &E_COURSE2 * -1
  &APD_COURSE2 = ROTATE 1, 360, L0
}


//********************************
// Variables Switch
//********************************


//********************************
// variables non déterminées qui sont gardées en réserve
//********************************



//********************************
// variables non déterminées qui sont gardées en réserve
//********************************



//********************************
// Variables OUT (Led, relais...)
//********************************

Var 0700, name D_HDG, Link IOCARD_DISPLAY, DEVICE 11, Digit 6, Numbers 3
{
  L1 = &D_HDG * 182.04444
  L0 = L1 + 1
  &APD_HDG = L0
}


//********************************
// Servo-moteur
//********************************


Tous ces scripts fonctionnent très bien avec FSX sur mon ordi.
Je suis preneur des conseils des anciens car je débute dans ce domaine.

Cordialement.
JC.


J'ai essayé une accélération à 2 mais ça ne change rien.
Je ne me souviens plus comment j'avais décidé du coefficient multiplicateur.

Il faut que je continue mes recherches (archéologiques...).
Bonne soirée.

Jean-Christophe.

TUTO SIOC ET XPLANE

MessagePosté: Sam 14 Avr 2018 06:57
de JC67
mameloose a écrit:Il a repris mon exemple ici viewtopic.php?f=184&t=4834&p=55462#p55462
Tu peux contrôler la variable avec des display mais sur xplane c'est peut-être différent


En effet, je m'étais sûrement inspiré de ton post à l'époque pour FSX.
Ça fonctionnait très bien mais sur XP11 c'est différent.
Je continue mes recherches.
Bonne journée.
JC

TUTO SIOC ET XPLANE

MessagePosté: Sam 14 Avr 2018 07:41
de JC67
Bonjour,
Voici mon dernier script inspiré de ce site: http://www.lekseecon.nl/downloads/How%20to%20SIOC.pdf
Voir : Rotary Encoder
Il ne fonctionne pas.
Je pense que c'est parce qu’il n'y a pas de lien entre la ligne de l'encodeur et la dataref.
Les experts de SIOC peuvent-ils confirmer mes soupçons?

voici mon script:
Code: Tout sélectionner
// *****************************************************************************
// * Config_SIOC ver 5.1   -     By Manuel Velez    -    www.opencockpits.com
// *****************************************************************************
// * FileName : ROT_HDG.txt
// * Date : 14/04/2018


Var 1, name AP_HDG, Link IOCP, Offset 17 // Auto pilot heading

Var 2, name ROT_HDG, Link IOCARD_ENCODER Input 23 Aceleration 2 Type 2 // Encodeur rotatif cap
{
 L0 = v2 // * -1 turning clockwise should be plus
 v3 = ROTATE 0 359 L0
}
Var 3 // heading (0 .. 359)


Cordialement,
JC

Re: TUTO SIOC ET XPLANE

MessagePosté: Sam 14 Avr 2018 08:22
de mameloose
arrete de copier des codes JC ! declare ca dans ton fichier texte :17 sim/cockpit/autopilot/heading

ensuite sans faire de code tu lance sioc puis iocp console et tu regarde dans iocpconsole comment ca reagit quand tu bouge a la souris ton heading ....

releve les valeurs ca permettera de faire un code avec le bon coefficient pour controler le hdg

TUTO SIOC ET XPLANE

MessagePosté: Sam 14 Avr 2018 08:53
de JC67
OK,
J'ai déjà déclaré dans uipcxdatos la ligne suivante: 17 sim/cockpit/autopilot/heading

Dans IOCP console j'ai trois lignes
0AP_HDG qui ne bouge pas (DEC VALUE = 182)
0ROT_HD qui ne bouge pas (DEC VALUE = 0)
HEADING 0 .. 359 qui bouge dans le même sens que l'encodeur (DEC VALUE = varie de 0 à 360 dans les deux sens (horaire et antihoraire))

Désolé pour ma lourdeur, mais je débute.
Comme dans toute chose, les premiers pas sont toujours les plus difficiles.
Cordialement.
JC

Re: TUTO SIOC ET XPLANE

MessagePosté: Sam 14 Avr 2018 10:34
de mameloose
OK faut que tu bouge à la souris et pas ton encodeur...
Tu bouge dans xplane la molette du hdg et tu regarde en même temps dans iocp console les valeurs du aphdg

Re: TUTO SIOC ET XPLANE

MessagePosté: Sam 14 Avr 2018 13:45
de mameloose
je viens de tester chez moi !

dans iocpconsole je me retrouve avec ca : 2401589 pour 240 degrées ou alors 456987 pour 45 degrées

donc c'est très simple il faut isoler les 4 derniers chiffre et ne garder que le reste puis les valeurs iront de 0 a 359 tu vois ?

jte fais un code pour exemple

Re: TUTO SIOC ET XPLANE

MessagePosté: Sam 14 Avr 2018 13:51
de mameloose
Code: Tout sélectionner
Var 0001, name AP_HDG, Link IOCP, Offset 17     // Auto pilot heading

Var 0002, name ROT_HDG, Link IOCARD_ENCODER, Input 23, Aceleration 2, Type 2     // Encodeur rotatif cap
{
  L0 = ROTATE 0 ,359 ,&ROT_HDG
  V0003 = L0   
}

Var 0003     // heading (0 .. 359)
{
  &AP_HDG = V0003 * 10000
}


voila c'est un exemple jexplique

la variable locale LO est egale au incrementation de ton encodeur et tourne de 0 a 359

ensuite la variable 3 prend cette valeur

et comme dans xplane la valeur des degrés est constituée du chiffre des degrés plus 4 chiffres a la fin il suffit de multiplier par 10000 !

donc la variable 3 va envoyer dans ta var iocp des valeur tel que 2400000 au lieu de 240 vois tu le truc ?

TUTO SIOC ET XPLANE

MessagePosté: Sam 14 Avr 2018 14:49
de JC67
Ça fonctionne!
chouettedoights
Encore un grand merci Greg.

Grace à ton explication, je pense que j'ai enfin compris comment trouver le facteur multiplicateur.
Pour info sur mon simulateur j'obtiens les valeurs suivantes dans iocpconsole:
0° = 1106
045° = 453117
090° = 903117
180° = 1806886
240° = 2406886
359° = 3591106

J'ai essayé ton script sans succès puis j'ai modifié le coefficient multiplicateur sur mon ancien script et ça fonctionne.
Le voici:
Code: Tout sélectionner
// *******************************
// HEADING
// *******************************

Var 2000, Value 0  //  Initialization
{
  &D_HDG = 360
}

Var 2005, name APD_HDG, Link IOCP, Offset 17 // Auto pilot heading

Var 2104, name D_HDG, Link IOCARD_DISPLAY, DEVICE 71, Digit 6, Numbers 3
{
  L1 = &D_HDG * 10000
  L0 = L1 + 1
  &APD_HDG = L0
}

Var 2306, name E_HDG, Link IOCARD_ENCODER, DEVICE 71, Input 23, Aceleration 4, Type 2
{
  L0 = &E_HDG * 1
  &D_HDG = ROTATE 1, 360, L0
}


Il est sûrement perfectible.
Je suis preneur de vos remarques.
Pour info j'ai mis "Device 71" car je suis sur la prise USB 71. Ai-je raison? Est-ce inutile?

Tous mes remerciements.
Cordialement.
Jean-Christophe

Re: TUTO SIOC ET XPLANE

MessagePosté: Sam 14 Avr 2018 15:03
de mameloose
non ne pas confondre idx et device usb !

dans ton code le device est le numero idx !

donc si tu met un device 1 l'idx de la carte doit etre de 1