WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Simulationen > Designer Forum

Designer Forum Treffpunkt für Gedankenaustausch von Simmern, die selbst

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 17.11.2004, 08:09   #1
schwudde
Veteran
 
Registriert seit: 21.05.2004
Alter: 46
Beiträge: 252


schwudde eine Nachricht über ICQ schicken
Standard Decision Height-kleines Problem

Hallo zusammen,

hab mal eine Frage an die Gauge-Programmier-Profis (neuse Unwort ). Und zwar steht im AOM folgendes (ich übersetz gleich ins deutsche): Wenn der Bug für die Entscheidungshöhe über 400ft steht ertönt der Warnton 150ft vor erreichen der Entscheidungshöhe. Steht der Bug auf einem Wert kleiner 400ft ertönt der Ton 50ft vor erreichen der Entscheidungshöhe. Ist die Höhe gleich der Entscheidungshöhe "verstummt" der Ton und die DH-Lampe leuchtet auf (solange wie man unter der DH ist, also auch am Boden).

Leider funktioniert das im FS nicht so ganz: er quittiert das mit komischen Knacksern wenn der Ton eigentlich bei 150ft zu hören sein sollte, ab 50ft spielt er es klar ab. Wenn ich nur eine Variante nutze klappt alles wunderbar. So sieht der Code-Schnipsel aus:

Code:
////////////////////////// DH Warning Tone
			if(DecisionHeight > 2500)
			{DecisionHeight = 2500;}

                        if(DecisionHeight > 410); // 150ft Warning
			{UINT32 val = (UINT32) (radio_height_var.var_value.n * 3.28084);
				if ((val - DecisionHeight < 150) && (vs_var.var_value.n <0))
				{MFSSoundFilePlay(dhwarn, FALSE);}

				else if (val - DecisionHeight == 0)
				{MFSSoundStop(dhwarn);}

				else
				{MFSSoundStop(dhwarn);}
			}

			if(DecisionHeight < 400); // 50ft Warning
			{UINT32 val = (UINT32) (radio_height_var.var_value.n * 3.28084);
				if ((val - DecisionHeight < 50) && (vs_var.var_value.n <0))
				{MFSSoundFilePlay(dhwarn, FALSE);}

				else if (val - DecisionHeight == 0)
				{MFSSoundStop(dhwarn);}

				else
				{MFSSoundStop(dhwarn);}
			}
Gibt es einen Weg das so zu machen damit der FS das auch kapiert? Ich meine, eine DH über 400ft dürfte eher selten sein sodaß man darüber hinwegsehen könnte und die 50ft-Variante reichen sollte. Aber ihr wißt ja-"as real as it gets". Bin für jeden Hinweis dankbar.

Viele Grüße
____________________________________
Sven
http://online.vatsimindicators.net/871844/3.png
schwudde ist offline   Mit Zitat antworten
Alt 17.11.2004, 09:49   #2
HansHartmann
Inventar
 
Registriert seit: 12.02.2001
Alter: 57
Beiträge: 2.908


Standard

Wenn ich das richtig sehe, startest Du den Sound immer wieder neu. Mach Dir mal ein Flag, mit dem Du abprüfst, ob er schon abgespielt wird.

Code:
if ((val - DecisionHeight < 150) && (vs_var.var_value.n <0) && !dhwarnflag)
{
  MFSSoundFilePlay(dhwarn, FALSE);
  dhwarnflag = true;
}
____________________________________
Bis dann,
Hans
Digital Aviation
HansHartmann ist offline   Mit Zitat antworten
Alt 17.11.2004, 10:03   #3
Matthias Lieberecht
Veteran
 
Registriert seit: 28.03.2000
Beiträge: 236


Standard

Hi Sven,

bin kein C Programmierer und kann daher zu dem Source Code nicht viel sagen, allerdings ist mir in Deinem Code eine kleine Unstimmigkeit aufgefallen, wobei ich nicht unbedingt denke, dass Dein Problem damit zu tun hat.

In Deinem Source Code prüfst Du mit der ersten If Anweisung, ob die Variable "var" - der eingestellten Decision Height kleiner 150 ist. In der folgenden Else If Anweisung prüfst Du, ob die gleiche Bedingung = 0 ist. Nun, wenn "var" - der eingestellten Decision Height = 0 ist ist sie gleichzeitig auch kleiner 150, es treffen also sowohl If wie auch Else If zu. Lösen könntest Du das Problem indem Du in der ersten Anweisung "var" - der eingestellten Decision Height kleiner 150 UND "var" - der eingestellten Decision Height größer 0 einbaust (zusätzlich zur Abfrage ob Vertical Speed negativ ist, was Du ja schon drin hast).

Warum ich nicht glaube, dass es damit zusammenhängt ist, dass es sicherlich sehr selten sein dürfte, dass beide Bedingungen gleichzeitig zutreffen und zum anderen das Problem auch dann auftreten dürfte, wenn nur eine der beiden grundsätzlichen Abfragen vorhanden ist. Aber korrigieren würde ich es dennoch sicherheitshalber.

Gruß
Matthias
____________________________________
The BAe Panel Project
www.baepanelproject.com
Matthias Lieberecht ist offline   Mit Zitat antworten
Alt 17.11.2004, 10:25   #4
Rider99
Veteran
 
Registriert seit: 13.07.2004
Beiträge: 371


Standard

Hi Sven,

lösch einmal die Strichpunkte (Semikolons) nach den if's:

Code:
////////////////////////// DH Warning Tone
			if(DecisionHeight > 2500)
			{DecisionHeight = 2500;}

                        if(DecisionHeight > 410) // 150ft Warning
			{UINT32 val = (UINT32) (radio_height_var.var_value.n * 3.28084);
				if ((val - DecisionHeight < 150) && (vs_var.var_value.n <0))
				{MFSSoundFilePlay(dhwarn, FALSE);}

				else if (val - DecisionHeight == 0)
				{MFSSoundStop(dhwarn);}

				else
				{MFSSoundStop(dhwarn);}
			}

			if(DecisionHeight < 400) // 50ft Warning
			{UINT32 val = (UINT32) (radio_height_var.var_value.n * 3.28084);
				if ((val - DecisionHeight < 50) && (vs_var.var_value.n <0))
				{MFSSoundFilePlay(dhwarn, FALSE);}

				else if (val - DecisionHeight == 0)
				{MFSSoundStop(dhwarn);}

				else
				{MFSSoundStop(dhwarn);}
			}
Und was passiert bei einer DH zwischen 400 und 410 (es wird zuerst >410 und dann <400 überprüft!)

Hoffe geholfen zu haben!
Grüsse, Christoph
____________________________________
Stolzer PPL-Besitzer und IFR-Schüler!
Rider99 ist offline   Mit Zitat antworten
Alt 17.11.2004, 11:52   #5
HansHartmann
Inventar
 
Registriert seit: 12.02.2001
Alter: 57
Beiträge: 2.908


Standard

Zitat:
Original geschrieben von Rider99
lösch einmal die Strichpunkte (Semikolons) nach den if's:
Wo siehst Du die denn???
____________________________________
Bis dann,
Hans
Digital Aviation
HansHartmann ist offline   Mit Zitat antworten
Alt 17.11.2004, 12:07   #6
schwudde
Veteran
 
Registriert seit: 21.05.2004
Alter: 46
Beiträge: 252


schwudde eine Nachricht über ICQ schicken
Standard

Zitat:
Und was passiert bei einer DH zwischen 400 und 410 (es wird zuerst >410 und dann <400 überprüft!)
Das hatte ich als Test gemacht weil ich wissen wollte ob der FS evtl. mit der Abfrage nicht zurecht kommt wenn in beiden Zeilen 400 steht. Dem war aber nicht so.

Werd mal den Tip von Hans umsetzen. Wollte ich eigentlich heute morgen gleich machen aber naja, bei uns Feiertag und die Familie rief zum Frühstück .

Meld ich dann gleich nochmal.

@Matthias
Zitat:
In Deinem Source Code prüfst Du mit der ersten If Anweisung, ob die Variable "var" - der eingestellten Decision Height kleiner 150 ist.
Bei der zweiten Abfrage geht es ja darum den Sound zu stoppen wenn val-dh=0 (steht so im AOM). Das hat ja funktioniert. Mal schauen was sich gleich ergibt.
____________________________________
Sven
http://online.vatsimindicators.net/871844/3.png
schwudde ist offline   Mit Zitat antworten
Alt 17.11.2004, 15:00   #7
schwudde
Veteran
 
Registriert seit: 21.05.2004
Alter: 46
Beiträge: 252


schwudde eine Nachricht über ICQ schicken
Standard

So Jungs, geschafft . Hans, die Sache mit dem Soundflag hat nicht ganz funktioniert, ich hatte zwar keine Knackser mehr aber der Warnton kam "in Stücken" (also fast beeb beeb beeb). Wahrscheinlich war ich nur zu doof das richtig zu machen (bin ja auch noch Newbie).

Die Lösung war ebenso einfach wie genial: man schaue sich die ganzen "Formeln" an, packe alles in eine Zeile (ok, mit Umbruch zwecks Übersichtlichkeit) und schaue nach was passiert. Ein klein wenig "Try and Error" hilft auch manchmal weiter .

So sieht das ganze jetzt aus, tut wie gewünscht:

Code:
////////////////////////// DH Warning Tone
	                if((DecisionHeight > 400) && (DecisionHeight < 2500)
	                && ((UINT32) (radio_height_var.var_value.n * 3.28084 - DecisionHeight < 150))
	                && ((UINT32) (radio_height_var.var_value.n * 3.28084 - DecisionHeight > 0))
                        && (vs_var.var_value.n <0))
				{MFSSoundFilePlay(dhwarn, FALSE);} //150ft Warning

			else if((DecisionHeight < 400) && (DecisionHeight > 0)
	                && ((UINT32) (radio_height_var.var_value.n * 3.28084 - DecisionHeight < 50))
	                && ((UINT32) (radio_height_var.var_value.n * 3.28084 - DecisionHeight > 0))
                        && (vs_var.var_value.n <0))
				{MFSSoundFilePlay(dhwarn, FALSE);} // 50ft Warning

                        else
				{MFSSoundStop(dhwarn);}
Vieleicht etwas umständlich, aber funzt. Trotzdem vielen Dank für Eure Hilfen (werd ich sicher noch öfter brauchen )

Viele Grüße
____________________________________
Sven
http://online.vatsimindicators.net/871844/3.png
schwudde ist offline   Mit Zitat antworten
Alt 17.11.2004, 16:47   #8
Rider99
Veteran
 
Registriert seit: 13.07.2004
Beiträge: 371


Standard

Zitat:
Original geschrieben von HansHartmann
Wo siehst Du die denn???
Im Originalcode nach dem ):

if(DecisionHeight > 410); // 150ft Warning
____________________________________
Stolzer PPL-Besitzer und IFR-Schüler!
Rider99 ist offline   Mit Zitat antworten
Alt 17.11.2004, 17:02   #9
HansHartmann
Inventar
 
Registriert seit: 12.02.2001
Alter: 57
Beiträge: 2.908


Standard

Jo, aber an der Stelle hat das keinerlei Auswirkung.
____________________________________
Bis dann,
Hans
Digital Aviation
HansHartmann ist offline   Mit Zitat antworten
Alt 17.11.2004, 17:46   #10
Rider99
Veteran
 
Registriert seit: 13.07.2004
Beiträge: 371


Standard

Zitat:
Original geschrieben von HansHartmann
Jo, aber an der Stelle hat das keinerlei Auswirkung.
Sicherlich, weil die Anweisungen in den darauffolgenden geschwungenen Klammern auf jeden Fall durchgeführt werden. Unabhängig ob beim if true oder false ermittelt wird.

(zur Info: ich programmiere seit etwa 14 Jahren C und C++!)

Grüsse,
Christoph
____________________________________
Stolzer PPL-Besitzer und IFR-Schüler!
Rider99 ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist an.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:50 Uhr.


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