voir les articles ►◄ Rubrique:
.:: MFD de Realsimulator ::.
Thursday 13 November 2003

Société spécialisée dans le matériel de simulation haut de gamme, Realsimulator propose désormais ses MFD (sans écran fonctionnel) et d’ici peu un ICP reproduisant fidèlement ceux qui équipent le F-16.
Pour fonctionner, les MFD doivent êtres connectés au CCD, l’unité centrale programmable du system RS. Le CCD se branche sur un port USB de votre PC ou un hub (nécessitant d’être alimenté). Il n’est pas possible de faire fonctionner un MFD Seul sans la CCD sauf si vous démontez l’ensemble et connectez les switchs à une autre carte programmable… dans ce cas, il est évident que vous perdez la garantie… Point de vue prix, les plus curieux se sont déjà renseigné et savent qu’il y’en a pour plus de 600 €… C’est évidement pas donnée mais pour l’instant il n’existe que 100 exemplaires de ces MFD ce qui rend les coûts de production de tels accessoires prohibitif, d’où un prix élevé. Juger les MFD sur le prix de l’ensemble MFD (x2) + CCD est en fait une erreur. Le CCD est en fait l’équivalent d’une super carte d’entrée et sortie, comparable à la carte Epic. La CCD permet de piloter les futurs accessoires Realsimulator comme l’ICP mais aussi le DED (fonctionnel !) et différents panneaux du F-16, lisez la suite de cet article et vous comprendrez l’intérêt de la chose.

Naturellement, il est possible d’associer à chaque boutons une ou plusieurs combinaisons de touches (dans ce cas on aura recours à un bouton de « shift »), des délais et tous ce qu’il est possible de faire avec une bonne carte programmable. Mais contrairement à nos Joysticks programmable, le CCD est capable d’extraire des données de Falcon 4 et de les envoyer vers un DED ou des témoins lumineux. Par exemple, sur chaque MFD figure deux témoins lumineux entièrement programmables. Personnellement, voici les fonctions que j’utilise :

MFD gauche témoin gauche :
S’allume si Master Caution est on.
S’allume quand la 2eme couche de fonctions est activé.

MFD gauche témoin droite :
Eteint si l’AOA est pas assez élevé
S’allume si l’AOA est correct
Clignote si L’AOA est trop élevé

MFD droite témoin gauche :
S’allume quand la 2eme couche de fonction est activé

MFD droite témoin droite :
S’allume quand le train est sorti.

Voila, c’est juste un exemple, on peu faire autre chose avec les témoins lumineux, le langage de programmation étant très puissant, les possibilité sont quasi illimités, vous voulez afficher la date système en morse sur l’un des témoins, c’est possible mais assez inutile…
Cette puissance a toutefois un prix : il faudra pratiquer pour être a l’aise. Nous désignons abusivement certain de nos joysticks comme programmable. En fait le mot programmable n’est pas adapté car a part l’utilisation de drapeau logique sur le HOTAS Cougar on se contente a 99% du temps de faire de l’assignation de touche a un bouton avec éventuellement des conditions. Ici nous dialoguons avec le CCD, un engin capable d’afficher des infos sur un DED, de faire de la musique avec le speaker de notre PC, d’envoyer des commandes claver et d’allumer et éteindre des LED bref qui est nettement plus complexe et puissant qu’un joystick. Face à cette diversité d’actions possibles il fallait un langage de programmation souple avec peu d’instructions mais applicable à des classes d’éléments. Pour cela Realsimulator n’a rien inventé, il ont crée leur propre langage qui s’apparente énormément au C voir C++ (j’en vois qui s’enfuient en courant ;) ). Rassurez vous comme nos champs d’application se limite à allumer et éteindre des LED et émuler du clavier ce n’est pas inabordable et les cas sont souvent identiques. Heureusement, pour les plus timide, de nombreux fichiers pour Falcon 4 sont livrés avec les MFD. Reste que pour dominer les bêtes il faut s’y mettre et la lecture du tutorial et du manuel (en anglais pour le moment) est indispensable, surtout quand on n’a pas de notion en programmation… Si vous n’arrivez pas à programmer un Cougar ou un X-45, il faudra faire de gros efforts. Autres difficulté, l’écriture du programme se fait par fichier texte, bref en codant à la main. Il n’existe pas d’interface graphique vous simplifiant la vie, ici, l’éditeur se contente de « coloriser » les différentes syntaxes…A la fin de l’article se trouve un programme complet (sans son fichier macro) cela sera bien plus clair que de long discours.

Physiquement, à la sortie de la boite, on est déçu par la qualité générale des MFD, celle si contraste énormément avec le siège, le palonnier de la marque et le CCD qui sont intégralement en acier ou aluminium. Et oui, les MFD sont en plastic et en plus l’aspect el la rigidité laisse à désirer. Les impressions sur les boutons ne sont pas toutes bien cadrés et un petit jeu latéral de ces derniers ne renforce pas le sentiment d’avoir affaire à un produit haut de gamme. La encore, il faut se rappeler que c’est une toute petite production ce qui explique l’emploi d’un plastique plus simple à mouler. Heureusement une fois monté sur une console toute cette impression de « prototype » disparaît et là ça devient vraiment sympa. Il est également possible de les utiliser tel quel, posés sur le bureau.

A vrai dire profiter de MFD physiques modifie considérablement l’utilisation des sous mode de Falcon, on y a plus facilement recours, bref on va au fond des choses et ça permet de décharger un peut le HOTAS ce qui augmente la vitesse globale de réaction et le confort d’emploi. Les accessoires de simulation c’est un peu « des outils complexes pour simplifier les choses »…

Initialement je n’avais pas prévu de faire l’acquisition de ces MFD, je voulais les faire moi-même, connectés à une Xkey et gardez mon argent pour une nouvelle carte graphique. Mais après avoir télécharger les drivers et le manuel, j’ai été conquis par les possibilités du CCD et surtout la flexibilité d’emploi… J’ai vite compris pourquoi ces MFD soulevaient pas mal d’enthousiasme chez les « simpitters » : les fonctionnalités sont au tops, et la qualité, même si elle reste bien en deçà de ce que fait Realsimulator en général reste correct et la plupart des défauts disparaissent une fois le MFD monté contre une console. J’ai eu quelques soucis à l’installation et l’équipe de Realsimulator m’a offert un support peu commun, en m’appelant, chez moi et mon portable pour savoir si je progressais ou me suggérer des solutions. Finalement le problème venait de mon Windows car après un test sur une version « fraîche » tout marchait parfaitement… D’autres utilisateurs ont obtenus des programmes customisés selon leurs désires, preuve d’une écoute et d’une réactivité importante. En tout cas un bon achat pour qui souhaite reproduire un environnement réaliste, plus viable à long terme qu’une carte graphique haut de gamme 

Vos réaction et question sont les bien venue sur e forum cockpit et mod perso…

Dimebug


le site de Realsimulator : www.realsimulator.com

Voici le contenu d’un programme… accrochez vous


#include "General.inc"
#define MY_SETTINGS "MySettings.ini"

//---------------------------------------------------------------------------------------
// General variables
//---------------------------------------------------------------------------------------

bool bNumlockState;

//---------------------------------------------------------------------------------------
// General Constructor/Destructor
//------------------------------------------------------------

init
{
LoadMacros("F4SP3.mac");

// Change the status of NUMLOCK key

bNumlockState = GetKeyState(NUMLOCK); // save NUMLOCK state for exit
if (bNumlockState == TRUE) KeyHit(NUMLOCK);
}

exit
{
ResetMacros();

// Reset status of NUMLOCK

if (bNumlockState == TRUE) KeyHit(NUMLOCK);
}


timer
{
int iSum;
long lLED1Strobe, lLED2Strobe;

iSum = LeftAuxConsole.Gear.GearLeft + LeftAuxConsole.Gear.GearNose + LeftAuxConsole.Gear.GearRight;
switch(iSum)
{
case 3: CenterConsole.MFDRight.LED2 = ON;
break;

case 0: CenterConsole.MFDRight.LED2 = OFF;
break;

default:if (lLED2Strobe.WakeUp(150)) CenterConsole.MFDRight.LED2 = 1 - CenterConsole.MFDRight.LED2;
}

// Flashing LED2 from left MFD if flash-flag is active

if (CenterConsole.Indexer.AOAHigh == ON)
if (lLED1Strobe.WakeUp(150)) CenterConsole.MFDLeft.LED2 = 1 - CenterConsole.MFDLeft.LED2;
}


//---------------------------------------------------------------------------------------
// Center Console
//---------------------------------------------------------------------------------------

CenterConsole
{
// Constructor/Destructor

init { }
exit { }
//-----------------------------------------------------------------------------------
// Indexer lights
//-----------------------------------------------------------------------------------

Indexer
{
AOAHigh
{
if (AOAHigh == OFF) MFDLeft.LED2 = AOACorrect;
}

AOACorrect
{
if (AOACorrect == ON) MFDLeft.LED2 = ON; // AOA angle correct, LED 2 is on
}

AOALow
{
if (AOALow == ON) MFDLeft.LED2 = OFF; // AOA angle to low, LED 2 is off
}
}

//-----------------------------------------------------------------------------------
// Left MFD
//-----------------------------------------------------------------------------------

MFDLeft
{
byte Layer;

// Constructor/Destructor

init
{
Layer = 0;
}

exit
{
LED1 = OFF;
}

// Change status of right LED (OFF=Layer 0 active, ON=Layer 1 active)

Layer
{
LED1 = Layer;
}

// Change between Layer 0 and Layer 1

CON
{
if (CON != CENTER) Layer = 1 - Layer;
}





// Other control wippers

GAIN
{
switch (GAIN)
{
case UP: Macro(Layer, "MFDLeftBrtUp", "MFDRightBrtUp");
break;
case DOWN: Macro(Layer, "MFDLeftBrtDown", "MFDRightBrtDown");
break;
}
}

// OSB01 - OSB20 buttons

OSB01 { if (OSB01 == ON) Macro(Layer, "MFDLeftOSB01", "one"); }
OSB02 { if (OSB02 == ON) Macro(Layer, "MFDLeftOSB02", "two"); }
OSB03 { if (OSB03 == ON) Macro(Layer, "MFDLeftOSB03", "three"); }
OSB04 { if (OSB04 == ON) Macro(Layer, "MFDLeftOSB04", "four"); }
OSB05 { if (OSB05 == ON) Macro(Layer, "MFDLeftOSB05", "five"); }
OSB06 { if (OSB06 == ON) Macro(Layer, "MFDLeftOSB06", "six"); }
OSB07 { if (OSB07 == ON) Macro(Layer, "MFDLeftOSB07", "seven"); }
OSB08 { if (OSB08 == ON) Macro(Layer, "MFDLeftOSB08", "eight"); }
OSB09 { if (OSB09 == ON) Macro(Layer, "MFDLeftOSB09", "nine"); }
OSB10 { if (OSB10 == ON) Macro(Layer, "MFDLeftOSB10", "zero"); }
OSB11 { if (OSB11 == ON) Macro(Layer, "MFDLeftOSB11", "MFDLeftOSB11"); }
OSB12 { if (OSB12 == ON) Macro(Layer, "MFDLeftOSB12", "RadioWingCommand"); }
OSB13 { if (OSB13 == ON) Macro(Layer, "MFDLeftOSB13", "RadioTowerCommand"); }
OSB14 { if (OSB14 == ON) Macro(Layer, "MFDLeftOSB14", "RadioFACCheck"); }
OSB15 { if (OSB15 == ON) Macro(Layer, "MFDLeftOSB15", "RadioTankerComamnd"); }
OSB16 { if (OSB16 == ON) Macro(Layer, "MFDLeftOSB16", "RadioTowerCommand"); }
OSB17 { if (OSB17 == ON) Macro(Layer, "MFDLeftOSB17", "RadioWingCommand"); }
OSB18 { if (OSB18 == ON) Macro(Layer, "MFDLeftOSB18", "RadioElementCommand"); }
OSB19 { if (OSB19 == ON) Macro(Layer, "MFDLeftOSB19", "RadioFlightCommand"); }
OSB20 { if (OSB20 == ON) Macro(Layer, "MFDLeftOSB20", "RadioAWACSCommand"); }
}
MFDRight
{
// Constructor/Destructor

init
{
LED1 = OFF;
Light = GetINIEntry(MY_SETTINGS, "Lights", "MFDRight", 8);
}

exit
{
LED1 = OFF;
LED2 = OFF;
SetINIEntry(MY_SETTINGS, "Lights", "MFDRight", Light);
}

// OSB buttons

OSB01 { if (OSB01 == ON) Macro("MFDRightOSB01"); }
OSB02 { if (OSB02 == ON) Macro("MFDRightOSB02"); }
OSB03 { if (OSB03 == ON) Macro("MFDRightOSB03"); }
OSB04 { if (OSB04 == ON) Macro("MFDRightOSB04"); }
OSB05 { if (OSB05 == ON) Macro("MFDRightOSB05"); }
OSB06 { if (OSB06 == ON) Macro("MFDRightOSB06"); }
OSB07 { if (OSB07 == ON) Macro("MFDRightOSB07"); }
OSB08 { if (OSB08 == ON) Macro("MFDRightOSB08"); }
OSB09 { if (OSB09 == ON) Macro("MFDRightOSB09"); }
OSB10 { if (OSB10 == ON) Macro("MFDRightOSB10"); }
OSB11 { if (OSB11 == ON) Macro("MFDRightOSB11"); }
OSB12 { if (OSB12 == ON) Macro("MFDRightOSB12"); }
OSB13 { if (OSB13 == ON) Macro("MFDRightOSB13"); }
OSB14 { if (OSB14 == ON) Macro("MFDRightOSB14"); }
OSB15 { if (OSB15 == ON) Macro("MFDRightOSB15"); }
OSB16 { if (OSB16 == ON) Macro("MFDRightOSB16"); }
OSB17 { if (OSB17 == ON) Macro("MFDRightOSB17"); }
OSB18 { if (OSB18 == ON) Macro("MFDRightOSB18"); }
OSB19 { if (OSB19 == ON) Macro("MFDRightOSB19"); }
OSB20 { if (OSB20 == ON) Macro("MFDRightOSB20"); }

// Control wippers

GAIN
{
switch (GAIN)
{
case UP: Macro("MFDRightBrtUp"); break;
case DOWN: Macro("MFDRightBrtDown"); break;
}
}

SYM { }

BRT
{
switch (BRT)
{
case UP: if (Light < 15) Light++;
else Beep();
break;
case DOWN: if (Light > 0) Light--;
else Beep();
break;
}
}

CON { }
}
}

  Dimebug
   
- Executé en 0.0304158 ms -
- 2 requetes au total -
- ©2003 Bernard Valencelle 'Benhur' -