Script sioc MCP &PMDG

arkos

ELEVE PILOTE
Messages
52
Réactions
12
Hello,

est ce quelqu un aurait conserver le script sioc MCP pour PMDG anciennement disponible sur le site d opencockpit.
En plus c est pour un mcp v1 :)
Pour les curieux j ai resorti un vieux mcp oc v1 que je veux connecter via fsuipc 7 a mon PMDG sous msf2020
C est pour essayer...

merci de ne pas rigoler :p

merci
 
Dernière édition:
lol oui il fonctionne encore ! j ai teste avec sioc monitor pas de souci.
En attendant que je trouve le vieux script mcp pmdg de opencockpit , j ai essaye chatgpt qui m a genere:
--- MCP OpenCockpits <-> PMDG 737 via FSUIPC7
--- Template SIOC ; remplacer les <PLACEHOLDERS> par les offsets/events réels

--- Variables FSUIPC (lecture/écriture)
Var 1000, name AP_HEADING, Link FSUIPC_INOUT, Offset $<OFF_HEADING>, Length 2 // valeur heading AP (0..359)
Var 1001, name AP_ALTITUDE, Link FSUIPC_INOUT, Offset $<OFF_ALTITUDE>, Length 2 // altitude selected (ft)
Var 1002, name AP_SPEED, Link FSUIPC_INOUT, Offset $<OFF_SPEED>, Length 2 // IAS / MACH value
Var 1003, name AP_VS, Link FSUIPC_INOUT, Offset $<OFF_VS>, Length 2 // vertical speed
Var 1004, name AP_MODE_FLAGS, Link FSUIPC_IN, Offset $<OFF_MODEFLAGS>, Length 2 // flags / bits (AP on/off etc) - lecture
Var 1005, name PMDG_STATUS, Link FSUIPC_IN, Offset $<OFF_STATUS>, Length 2 // exemple : ready/bits

--- Encodeur Heading (exemple)
--- suppose : IOCARD encoder gives increments on Var 2000 (rotate +1 / -1)
Var 2000, name ENC_HDG, Link IOCARD_ENC 1 // adapter numéro d'IOCard / type
{
IF &ENC_HDG > 0 { // clockwise
v1 = &AP_HEADING + 1
IF v1 >= 360 { v1 = v1 - 360 }
&AP_HEADING = v1
}
IF &ENC_HDG < 0 { // counterclockwise
v1 = &AP_HEADING - 1
IF v1 < 0 { v1 = v1 + 360 }
&AP_HEADING = v1
}
}

--- Encodeur ALT (exemple, incr par 100 ft)
Var 2001, name ENC_ALT, Link IOCARD_ENC 2
{
IF &ENC_ALT > 0 {
&AP_ALTITUDE = &AP_ALTITUDE + 100
}
IF &ENC_ALT < 0 {
&AP_ALTITUDE = &AP_ALTITUDE - 100
IF &AP_ALTITUDE < 0 { &AP_ALTITUDE = 0 }
}
}

--- Bouton AP MASTER toggle (exemple via Event ou via offset)
--- Option A: si tu as l'offset bit pour AP master -> écriture directe
Var 3000, name BTN_AP_MASTER, Link IOCARD_SW Input 1 Type P // bouton AP on/off
{
IF &BTN_AP_MASTER == 1 {
--- Ecrire 1 ou toggler bit selon l'offset PMDG
--- Exemple (si l'offset accepte 1/0) :
&AP_MODE_FLAGS = &AP_MODE_FLAGS XOR <MASK_AP_MASTER> // <-- remplacer MASK_AP_MASTER par le masque de bit
}
}

--- Option B: si PMDG attend un EVENT / LVAR -> envoyer l'event via un offset "virtual joystick" (méthode workaround)
--- NOTE : remplacer <EVENT_CONTROL_NUMBER> par la valeur controlID définie dans FSUIPC event file si tu en a créé un.
Var 3001, name BTN_AP_MASTER_EVT, Link IOCARD_SW Input 2 Type P
{
IF &BTN_AP_MASTER_EVT == 1 {
--- écriture d'un bouton virtuel FSUIPC (plage boutons virtuels) :
--- la plage des "virtual joystick buttons" peut être écrasée dans FSUIPC ; ici on utilise un exemple générique
--- écrire 1 dans l'offset bouton virtuel, puis 0 (pulsation)
VarTemp = 1
WriteOffset $<OFF_VJOY_BUTTON>, VarTemp Length 1
Wait 50
VarTemp = 0
WriteOffset $<OFF_VJOY_BUTTON>, VarTemp Length 1
}
}

--- LNAV / VNAV / FD / CWS etc : boutons simples -> map à des offsets ou events
Var 3100, name BTN_LNAV, Link IOCARD_SW Input 3 Type P
{
IF &BTN_LNAV == 1 {
--- soit toggle bit d'offset, soit envoyer event SimConnect/FSUIPC
--- Exemple : toggle bit LNAV
&AP_MODE_FLAGS = &AP_MODE_FLAGS XOR <MASK_LNAV>
}
}

--- Affichage des valeurs sur 7-seg / displays (exemple)
Var 4000, name DISP_HDG, Link DISPLAY_7SEG 1
{
v1 = TRUNC(&AP_HEADING)
&DISP_HDG = v1
}

--- End of script


la je suis en train de regarder les offsets ss fsuipc 7
 
Je ne suis pas certain que ce script soit fonctionnel :unsure:

Si ça c'est du SIOC, alors j'ai loupé un épisode :poop:
 
Dernière édition:
Salut Arkos ,
Si tu dois utiliser chatgpt pour faire fonctionner ton mcp ,tu vas encore être un de ceux qui va se casser la figure.
Essaye plutôt de comprendre comment ca marche !!!
 
Hello

Merci pour vos retours
Alors effectivement chatgpt m a rien donne de complet c etait pour voir ce que ca donné
J ai suivi les conseils de HB-EBC effectivement il y a script mcp pour fsx que j utilise comme base maintenant

Je map actuellement vers les offset pmdg fourni par fsuipc7 ca marche pour quels led que j ai pu tester. j ai pas encore les encodeurs et afficheurs.
Par contre j essaye le switch AT/Arm avec l offset Pmdg mais ca ne fonctionne pas alors que l offset fsx fonctionne pour pmdg ..je revois tout ca ce soir et je fais un resume clair ..
merci a vous
 
hello @fab

tu saurais comment link une variable sur un offset fsuipc qui est un FLT32

j ai mis length 4 pour 32bits mais comment indique que c est du type float
Type 1 c est integer c est quoi les autres type possibles pour FSUIPC_In
merci
 
Hello

Petit update sur l avancement. J ai quasiment termine
- les digits sont mappe avec gestion des digits eteint en cold n dark
- les led aussi
- les switch aussi
- les encodeurs aussi ..mais un petit souci..
il me reste les boutons push et puis ca sera bon

Pour les encodeurs je passe par l offset de control et les parametres du fichier events de fsuipc. quand on tourne les boutons ca incremente ou decremente dans le mcp pmdg .
Le petit hic c est que des qu on tourne un autre encodeur la valeur du precedent est incremente ou decremente
j ai essaye de remettre a zero l offset de control apres son affectation avec un delay 0,10 mais le pb persiste.

D apres ce que j ai lu dans un forum peter dowson dit que ce n est pas nécessaire de remettre a zero mais si on le fait pas il ne se passe rien.
Quelqu un sait comment resoudre ce pb svp ?

merci
francois
 
oui par exemple pour le IAS/Mach et pour l altitude:

Var 300, name E_IAS, Link IOCARD_ENCODER, Input 0, Aceleration 4, Type 2, Device 10
{
// PMDG_B737_MCP_IAS_MACH_DEC#38408 (>K:ROTOR_BRAKE)
// PMDG_B737_MCP_IAS_MACH_INC#38407 (>K:ROTOR_BRAKE)

// Clockwise Rotation
IF &E_IAS < 0
{
&E_IAS = 0 // Reset encoder counter
&FS_Parameter = 38407 // Set the Parameter to INC (38407)

// Send the FSUIPC Control ID for ROTOR_BRAKE (66587)
// This is sent via the FS Control Link which executes the command

&EVENTCONTROLH = 66587


}

// Counter-Clockwise Rotation
IF &E_IAS > 0
{
&E_IAS = 0 // Reset encoder counter
&FS_Parameter = 38408 // Set the Parameter to DEC (38408)

// Send the FSUIPC Control ID for ROTOR_BRAKE (66587)
&EVENTCONTROLH = 66587


}
}

Var 302, name E_ALT, Link IOCARD_ENCODER, Input 2, Aceleration 4, Type 2, Device 10
{

// PMDG_B737_MCP_ALT_DEC#40008 (>K:ROTOR_BRAKE)
// PMDG_B737_MCP_ALT_INC#40007 (>K:ROTOR_BRAKE)

// Clockwise Rotation
IF &E_ALT < 0
{
&E_ALT = 0 // Reset encoder counter
&FS_Parameter = 40007 // Set the Parameter to INC (40007)

// Send the FSUIPC Control ID for ROTOR_BRAKE (66587)
// This is sent via the FS Control Link which executes the command
&EVENTCONTROLH = 66587


}

// Counter-Clockwise Rotation
IF &E_ALT > 0
{
&E_ALT = 0 // Reset encoder counter
&FS_Parameter = 40008 // Set the Parameter to DEC (40008)

// Send the FSUIPC Control ID for ROTOR_BRAKE (66587)
&EVENTCONTROLH = 66587

}

}
 
images.jpg
 
Bizarre ton code pour tes encodeurs
Perso dans la variable encodeur je set une variable qui prend la valeur en fonction de la rotation de l'encodeur sans me soucier du 0.
Var 1191, name ECC_Flt, static, Link IOCARD_ENCODER, Input 191, Aceleration 5, Type 2 // Ecc Altitude Flt
{
L0 = &ECC_Flt * 100
&FlightAlt = LIMIT 10000 ,42000 ,L0
}

Var 1760, name FlightAlt, static // Set Affichage Flt Alt
{
Traitements

}
 
En fait c est parce que j ai utilise une autre approche ;) que les scriptz mcp fourni par opencockpit

Eux mettent toute la logique de fonctionnement du mcp dans le script et leur script impose au simu comment il doit se comporter et ce qu il doit afficher.
Par exemple on tourne le bouton Altitude sur le mcp opencockpit ca incremente a la fois le lcd du mcp oc et ca ecrit dans les offfsets du simu.

Moi j ai choisi une approche plus simple pour PMDG et MFS2020. Je laisse la logique du mcp à PMdg :
-pour les afficheurs et les leds du MCP OC il lit les valeurs du mcp pmdg
- l appuie des boutons et swtichs sur le MCP oc declenche uniquement l activation des bouton et swtich equivalernt dans pmdg

Pour les encodeurs c est pareil je regarde sur le mcp oc si on incremente ou decremente pour tourner les boutons equivalnt dans le mcp de pmdg. C est comme si je tourne avec la souris.


Par exemple;
Tourner le bouton a droite pour l altitude => envoi la commande a FSuIpc => envoie la commander incrementer a PMDG => PMDG met a jour son LCD pour l altitude=> nouvel valeur de ll altitude => declenche evenement sur offset altitude => declenche evenement sur la.variable sioc qui en IN pour l altitudeb=> affichage sur les digits du mcp oc

Je posterai le script complet une fois fini et nettoyé
 
Dernière édition:
Retour
Haut