TUTO SIOC ET XPLANE

Tous les tutoriels sur la programmation SIOC, le language des cartes Opencockpits

TUTO SIOC ET XPLANE

Messagede JC67 » Ven 13 Avr 2018 22:26

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.
Windows 11 Professionnel
i9-12900KF
Asus ROG STRIX Z690-F GAMING WIFI
KF556C40-32 Bank 0 (32 Go)
NVIDIA RTX 4090
KINGSTON SNVS2000G SCSI (1,82 To)
Avatar de l’utilisateur
JC67
 
Messages: 130
Inscription: 16/03/14
Localisation: AY CHAMPAGNE

TUTO SIOC ET XPLANE

Messagede JC67 » Sam 14 Avr 2018 06:57

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
Windows 11 Professionnel
i9-12900KF
Asus ROG STRIX Z690-F GAMING WIFI
KF556C40-32 Bank 0 (32 Go)
NVIDIA RTX 4090
KINGSTON SNVS2000G SCSI (1,82 To)
Avatar de l’utilisateur
JC67
 
Messages: 130
Inscription: 16/03/14
Localisation: AY CHAMPAGNE

TUTO SIOC ET XPLANE

Messagede JC67 » Sam 14 Avr 2018 07:41

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
Windows 11 Professionnel
i9-12900KF
Asus ROG STRIX Z690-F GAMING WIFI
KF556C40-32 Bank 0 (32 Go)
NVIDIA RTX 4090
KINGSTON SNVS2000G SCSI (1,82 To)
Avatar de l’utilisateur
JC67
 
Messages: 130
Inscription: 16/03/14
Localisation: AY CHAMPAGNE

Re: TUTO SIOC ET XPLANE

Messagede mameloose » Sam 14 Avr 2018 08:22

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
Avatar de l’utilisateur
mameloose
 
Messages: 1271
Inscription: 20/04/09
Localisation: evreux

TUTO SIOC ET XPLANE

Messagede JC67 » Sam 14 Avr 2018 08:53

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
Windows 11 Professionnel
i9-12900KF
Asus ROG STRIX Z690-F GAMING WIFI
KF556C40-32 Bank 0 (32 Go)
NVIDIA RTX 4090
KINGSTON SNVS2000G SCSI (1,82 To)
Avatar de l’utilisateur
JC67
 
Messages: 130
Inscription: 16/03/14
Localisation: AY CHAMPAGNE

Re: TUTO SIOC ET XPLANE

Messagede mameloose » Sam 14 Avr 2018 10:34

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
Avatar de l’utilisateur
mameloose
 
Messages: 1271
Inscription: 20/04/09
Localisation: evreux

Re: TUTO SIOC ET XPLANE

Messagede mameloose » Sam 14 Avr 2018 13:45

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
Avatar de l’utilisateur
mameloose
 
Messages: 1271
Inscription: 20/04/09
Localisation: evreux

Re: TUTO SIOC ET XPLANE

Messagede mameloose » Sam 14 Avr 2018 13:51

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 ?
Avatar de l’utilisateur
mameloose
 
Messages: 1271
Inscription: 20/04/09
Localisation: evreux

TUTO SIOC ET XPLANE

Messagede JC67 » Sam 14 Avr 2018 14:49

Ç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
Windows 11 Professionnel
i9-12900KF
Asus ROG STRIX Z690-F GAMING WIFI
KF556C40-32 Bank 0 (32 Go)
NVIDIA RTX 4090
KINGSTON SNVS2000G SCSI (1,82 To)
Avatar de l’utilisateur
JC67
 
Messages: 130
Inscription: 16/03/14
Localisation: AY CHAMPAGNE

Re: TUTO SIOC ET XPLANE

Messagede mameloose » Sam 14 Avr 2018 15:03

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
Avatar de l’utilisateur
mameloose
 
Messages: 1271
Inscription: 20/04/09
Localisation: evreux

PrécédenteSuivante

Retourner vers Les TUTOS SIOC





Qui est en ligne

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