WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Simulationen (http://www.wcm.at/forum/forumdisplay.php?f=27)
-   -   gauge designer (http://www.wcm.at/forum/showthread.php?t=148677)

PFlight2000 27.10.2004 23:00

Mir persönlich würde es schon reichen, einen 'Gauge-Platzierer' zu haben, damit vorhandene Gauges in eigenen Cockpit platziert werden können ohne dass man die Werte mühsam von Hand in der Panel.cfg eingeben muss. Gibt's sowas?

Gruss und in grosser Erwartung...

Pascal

HansHartmann 27.10.2004 23:04

Biddesehr: www.cfgedit.com

PFlight2000 27.10.2004 23:21

Hey, merci vielmal!!! :)

Grüässli us de Schwiiz

Pascal

schwudde 28.10.2004 01:19

Re: Hmmmmmm.
 
Zitat:

Original geschrieben von Kamikazeflieger
Ist das sehr aufwändig Mit C Zu programmieren???
Wie Hans schon sagt, wenn es gut werden soll geht einige Zeit ins Land. Dazu kommt noch das es nicht nur mit dem programmieren getan ist. Auch mit Bildbearbeitung sollte man sich etwas auskennen (oder jemanden kennen der sich damit auskennt). Je nach Flieger kann das schon ein "Mammutprojekt" sein. Wenn man ein Team bildet kann man die Aufgaben einteilen.

Hier mal ein Beispiel. Erst der Code, danach das Ergebnis. Es ist ein relativ einfaches Gauge für die Kontrolle der Ruderfunktionen an einer 707. Man kann wohl nur erahnen welch ein Aufwand hinter solchen Projekten wie PMDG, PT TU154 oder Flight1 ATR steckt:

Code:

// Project Boeing B707 Control Surfaces Source Code
// Copyright 2004 Sven Goericke/Project Boeing.  All rights reserved.
char surfaces_gauge_name[]                = GAUGE_NAME;
extern PELEMENT_HEADER                        surfaces_list;
extern MOUSERECT                        surfaces_mouse_rect[];

GAUGE_HEADER_FS700( GAUGE_W, surfaces_gauge_name, &surfaces_list, surfaces_mouse_rect, 0, 0, 0, 0 );


FLOAT64 FSAPI rudder_slider_cb( PELEMENT_SLIDER pelement )
{
        FLOAT64        val = pelement-> source_var_x.var_value.n;

        if (val > 0 && (MainBusNo1Volts < 22 || MainBusNo2Volts < 22))
                val = 0;
        else if (val < 0 && (MainBusNo1Volts < 22 || MainBusNo2Volts < 22))
                val = 0;

        return val;
}
MAKE_SLIDER(    rudder,
                SURF_RUDDER_BMP,
                NULL,
                0,
                IMAGE_USE_TRANSPARENCY | IMAGE_USE_ERASE | IMAGE_USE_LUMINOUS,
                0,
                { 98, 27 },
                OBSOLETE_RUDDER_POS, rudder_slider_cb, 0.001,
                MODULE_VAR_NONE, NULL, 0);

PELEMENT_HEADER                surfaces_list1[]=
{
        &rudder.header,
        NULL
};


FLOAT64 FSAPI elevator_slider_cb( PELEMENT_SLIDER pelement )
{
        FLOAT64        val = pelement->source_var_y.var_value.n;

        if (val > 0 && (MainBusNo1Volts < 22 || MainBusNo2Volts < 22))
                val = 0;
        else if (val < 0 && (MainBusNo1Volts < 22 || MainBusNo2Volts < 22))
                val = 0;

        return val;
}
MAKE_SLIDER(    elevator,
                SURF_ELEVATOR_BMP,
                &surfaces_list1,
                NULL,
                IMAGE_USE_TRANSPARENCY | IMAGE_USE_ERASE | IMAGE_USE_LUMINOUS,
                0,
                { 81, 146 },
                MODULE_VAR_NONE, NULL, 0,
                OBSOLETE_ELEVATOR_POS, elevator_slider_cb, -0.001 );

PELEMENT_HEADER                surfaces_list2[]=
{
        &elevator.header,
        NULL
};

NONLINEARITY  aileron_nonlinearity[] =
{
        {{0,        132},        -16200, 0},
        {{0,        54},        16200, 0}
};
#define        aileron_MIN_pos                -16200
#define        aileron_MAX_pos                16200
FLOAT64 FSAPI aileron_needle_cb( PELEMENT_NEEDLE pelement )
{
        FLOAT64        val = pelement->source_var.var_value.n;

        if (val > aileron_MAX_pos)
                val = aileron_MAX_pos;
        else if (val < aileron_MIN_pos)
                val = aileron_MIN_pos;
        else if (val > 0 && (MainBusNo1Volts < 22 || MainBusNo2Volts < 22))
                val = 0;
        else if (val < 0 && (MainBusNo1Volts < 22 || MainBusNo2Volts < 22))
                val = 0;

        return val;
}

MAKE_NEEDLE(        aileron,
                                SURF_AILERON_BMP,
                                &surfaces_list2,
                                NULL,
                                IMAGE_USE_TRANSPARENCY | IMAGE_USE_ERASE | IMAGE_USE_LUMINOUS,
                                0,
                                {99, 94},
                                {52, 2},
                                OBSOLETE_AILERON_POS,
                                aileron_needle_cb,
                                aileron_nonlinearity,
                                6 )

PELEMENT_HEADER                surfaces_list3[]=
{
        &aileron.header,
        NULL
};


MAKE_STATIC(        surf_background,
                                SURF_BG_BMP,
                                &surfaces_list3,
                                NULL,
                                IMAGE_USE_TRANSPARENCY | IMAGE_USE_LUMINOUS,
                                0,
                                {0, 0} )

PELEMENT_HEADER                surfaces_list        =        &surf_background.header;

MOUSE_BEGIN( surfaces_mouse_rect, HELP_NONE, 0, 0 )
    MOUSE_PARENT( 73,21,54,44, HELPID_GAUGE_YAW_TRIM)
    MOUSE_PARENT( 46,65,107,54, HELPID_GAUGE_ROLL_TRIM)
    MOUSE_PARENT( 76,119,47,58, HELPID_GAUGE_PITCH_TRIM)
MOUSE_END
/////////////////////////////////////////////////////////////////////////////
#undef GAUGE_NAME
#undef GAUGEHDR_VAR_NAME
#undef GAUGE_W

So sieht das dann im FS aus (ich bin nicht der Bildbearbeitungsprofi, das macht jemand anders:) ):
http://www.schwudde.de/707surf.jpg

Hier mal ein EPR-Gauge Hintergrund-Bitmap was mein "Kumpane" schon nachbearbeitet hat:
http://www.schwudde.de/707eprbg.jpg

Dabei steht noch nicht fest ob der Code so bleibt. Das Gauge funktioniert zwar. Nur steht noch nicht fest ob evtl. noch Abhängigkeiten zu anderen Systemen implementiert werden müssen. Es ist also auch wichtig das man sich gute Informationen über das jeweilige Flugzeug organisiert. Danach noch überlegen was man wie im FS umsetzen kann/möchte. Ich denke aber die meiste Zeit nehmen die Tests in Anspruch wenn es darum geht die Funktionen mit dem realen Vorbild zu vergleichen und Fehler allgemein auszumerzen.

Viele Grüße

schwudde 28.10.2004 17:08

Kleiner Nachtrag:D :

Wie ich heute so mit der Straßenbahn unterwegs bin mache ich mir so meine Gedanken und da fällt mir doch tatsächlich noch etwas zu oberem Gauge ein: zumindest ein Parameter fehlt noch. Die Ruder eines Airliners funktionieren für gewöhnlich hydraulisch. Das Gauge funktioniert im Moment allerdings schon wenn elektrischer Strom fließt da nur eine Abfrage nach der Spannung stattfindet:

Code:


if (val > 0 && (MainBusNo1Volts < 22 || MainBusNo2Volts < 22))
                val = 0;
        else if (val < 0 && (MainBusNo1Volts < 22 || MainBusNo2Volts < 22))
                val = 0;

.

Das ist also nicht ganz korrekt denn nur mit Strom allein bewegen sich die Ruder noch nicht. Ergo muß ich noch eine Abfrage nach dem Hydraulikdruck implementieren, womöglich noch jedes Hydrauliksystem einzeln.

Das nur zur Info für diejenigen die interessiert was "hinter den Gauges" passiert:D

Viele Grüße

Edit: auf diesem Weg ist das auch nicht korrekt. Eine Abfrage des Hydraulikdruckes ist m.E. überflüssig-der FS bewegt die Ruder momentan ja trotzdem. Also muß man dem FS beibringen das er die Ruder nicht zu bewegen hat solange der Hydraulikdruck nicht ausreicht. Demzufolge sollte der bisherige Code stimmen da er ja die Position der Ruder abfragt...

Ich glaub ich kauf mir eine Monatskarte für die Straßenbahn:lol: .

Kamikazeflieger 28.10.2004 20:01

Die sehen Ja Klasse aus.....:eek:


.... Aber ich habe ja schon probleme mie einfachen QBasic programmen......:heul:




MFG,jan

schwudde 28.10.2004 20:29

Zitat:

Original geschrieben von Kamikazeflieger
.... Aber ich habe ja schon probleme mie einfachen QBasic programmen......:heul:

Schau mal hier:
http://www.schellong.de/c.htm

Viele Grüße


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag