> Projekt: Software-Sanierung > Entwicklerdokumentation > Tabelle zu den Entwicklerdokumenten > Topographie > Fehler

Topographie

Fehler

 

Autoren: projekt98



Erkannte und evtl. korrigierte Fehler in den Quellfiles durch die Entwickler

(Jeder erkannte Fehler in den Quellfiles ist hier zu dokumentieren. Ist darüber hinaus eine 'problemlose' Fehlerbehebung möglich (ohne Seiteneffekte, ...), so kann diese am Quelltext vorgenommen werden. Sie ist dort kenntlich zu machen und außerdem hier als vorgenommene Korrektur zu erwähnen.)

Statusarten:

jeder dieser Stati sollte mit Datum und User-kennung in der Liste auftauchen.
Die Spalte Beschreibung kann die Abschnitte: Charakterisierung, Ursache, Bemerkung und Behebung beinhalten.
Nr. Datum Status Wer? Beschreibung
1 22.06.2000 FIX gollnick Charakterisierung:
Wird das Fenster "Topographie Einstellen" aus dem "Topographie Ausführen"-Fenster heraus aufgerufen, so stimmen die dargestellten Werte nicht mit den aktuell im Programm eingestellten Werten überein. Das Fenster läßt sich nicht mit "OK" beenden, d.h. es können keine Einstellungen übernommen werden.
Ursache:
TTopographySetParam::Dlg_OnCommand case cm_ParamSet: der Aufruf von SetFocus führt dazu, daß die Variable hWindow aus dlg_tpl.h nicht mehr auf das "Einstellen Topographie"-Fenster, sondern auf das "Topographie Ausführen"-Fenster zeigt. GetHandle() liefert in Folge dessen den falschen Wert. -> Alle nachfolgenden fensterbezogenen Funktionen beziehen sich auf das falsche Fenster und haben somit keinen Effekt. 
Behebung:
Ich habe SetFocus auskommentiert.
2 Juli.2000
05.12.2002

 

1ST
FIX
gollnick
kullmann,
reinecker
Charakterisierung:
Werden im "Topographie Einstellen"-Fenster fehlerhafte Werte eingegeben, so läßt sich das Fenster nicht mit "OK" beenden. Es erfolgt aber kein Hinweis auf die fehlerhaften Eingabewerte. Wird das Fenster nun mit "Abbrechen" oder über den Windows-"x"-Button geschlossen, so werden die Werte nicht zurückgesetzt, sondern ein Teil der vorgenommenen Änderungen wird übernommen.
Ursache:
Die Wertüberprüfung und -übernahme erfolgt nach Betätigung des "OK"-Buttons durch m_topo.cpp TTopographieSetParam::CanClose. Die Werte werden dabei nacheinander übernommen. Tritt ein fehlerhafter Wert auf, so stoppt die Übernahme der Werte erst an dieser Stelle. Vorher übernommene Werte bleiben somit im System erhalten.
Bemerkung:
Die Übernahme der Werte dürfte eigentlich erst nach Überprüfung aller eingegebenen Werte erfolgen. Eine Fehlermitteilung ist unbedingt nötig, um auf mögliche Fehleingaben hinzuweisen.
Behebung:
In der bisherigen Topographie ist es so geblieben. In der neuen Topographie wird erst übernommen wenn alle Werte korrekt sind. Ist irgendwo ein ungültiger Wert eingegeben worden, dann wird eine MessageBox mit der Art und Position des Fehlers ausgegeben.
3 Juli.2000 1ST (FIX) gollnick Charakterisierung:
Bei der Einstellung "Einfachbelichtung" wird im "Topographie Ausführen"-Fenster unter "Restzyklen" der Wert angezeigt, welcher der Anzahl der eingebenen Restzyklen bzw. einem Standardwert entspricht. Dieser Wert kann standardmäßig nicht mit 0 belegt werden, da dieser Wert auch im "Einstellungen Topographie"-Fenster verwendet wird und sich dieses nicht mit "OK" schließen läßt, falls die Anzahl der Mehrfachbelichtungen (id_Shots) auf 0 steht.
Ist "Einfachbelichtung" eingestellt, sollte im "Topographie Ausführen"-Fenster nicht der Wert von id_Shots stehen, sondern ein vorgegebener Wert ( 0 oder 1 ), der verdeutlicht, daß es sich nicht um eine Mehrfachbelichtung handelt, da es sonst zu irreführenden Wertanzeigen kommen kann.
Behebung:
Ich habe 1 als Standardwert im Konstruktor von TTopography eingetragen. So steht zumindest eine 1 im Restzyklenfeld, wenn dieser Wert nicht unter im "Topographie Einstellen"-Fenster unter "Mehrfachbelichtung" geändert wird. Zur endgültigen Problemlösung sollte bei Darstellung des "Topographie Ausführen"-Fensters abgefragt werden, ob "Mehrfachbelichtung" ausgewählt wurde oder nicht. Im Falle der Einfachbelichtung sollte das "Restzyklen"-Feld mit einem festgelegten Wert gefüllt werden, der verdeutlicht, dass es sich um die Einfachbelichtung handelt.
4 17.09.2000
05.12.2002
1ST
FIX
gollnick
kullmann,
reinecker
Charakterisierung:
In der Topographie wird die Variable fFailure im Konstruktor mit dem Wert 0.02 belegt. Die Variable läßt sich nicht durch Nutzereingabe verändern. Sie wird verwendet, um bei der Initialisierung des Zählers durch die Topographie den Meßfehler des Zählers anzugeben. Damit wird der Wert, der im Zähler-Konfigurationsfenster eingegeben wurde, bei Nutzung der Topographie überflüssig.
Behebung:
Die Variable fFailure wird nicht mehr benötigt, da der Messfehler bei SetExposureSettings(...); als Parameter nicht mehr berücksichtigt wird. Ist in der bisherigen Topographie als Toter Code auskommentiert, in der neuen gar nicht erst verwendet.
5 17.09.2000 FIX  gollnick Charakterisierung:
Wird im Topographie Ausführen Fenster der Button "Startposition anfahren" angewählt, so erfolgt immer die Ausgabe des Informationstextes "Arbeitspunkt wird angefahren". Dieser erscheint auch, wenn bei eingestellter Mehrfachbelichtung ein zweites Anfahren der Startposition mit einem entsprechenden Hinweisfenster abgelehnt wird.
Ursache:
In der Funktion TTopographyExecute::Dlg_OnCommand case-Zweig cm_GotoWorkPoint erfolgt die Ausgabe des Informationstextes vor Überprüfung, ob die Startposition bereits angefahren worden ist.
Behebung:
Ich habe die Anweisungen für die Ausgabe des Informationstxetes des "Arbeitspunkt wird angefahren" verschoben, so dass jetzt zuerst die Überprüfung erfolgt.
         
6 17.09.2000 FIX gollnick Charakterisierung:
Wird im "Topographie Ausführen"-Fenster die Detektormeßzeit geändert, so wird diese zwar für den Zähler geändert und auch im "Topographie Ausführen"-Fenster angezeigt, aber nicht in die topographieinterne Variable übernommen. Wird nun über "Einstellungen" das Topographie Einstellungen Fenster geöffnet, so wird dort der alte Werte angezeigt.
Ursache:
Es wurde vergessen, die Topographie-Variable fMaxTime zu ändern.
Behebung: In der Funktion TTopographyExecute::Dlg_OnCommand case-Zweig IDOK bei Übernahme der neuen Zählermeßzeit diese auch in Topography.fMaxTime ändern. Die entsprechende Anweisung wurde von mir eingefügt.
7 20.09.2000 FIX
aber
siehe
9
gollnick Charakterisierung:
Die Funktion TTopographySetParam::CanClose übernimmt auch negative Werte aus den Eingabefeldern, da bei der Übernahme nur auf Ungleichheit zu Null geprüft wird. Bei den meisten Eingaben sind aber negative Werte nicht sinnvoll. Dies betrifft folgende Angaben:
  • Actuator Beschränkung auf ( fMaxAngleEscape )
  • Detektor Parameter Zeit ( fMaxTime )
  • Detektor Parameter Counts (dwMaxCounts )
  • Arbeitspunkt anfahren mit ( fMoveStep )
  • Belichtungsregelung Schritt ( fControlStep )
  • Belichtungsregelung Bereich ( fContolRange )
  • Mehrfachbelichtung Schrittweite ( fAngleBetweenShots )
  • Belichtungszeit ( lMesurementTime )


Behebung: Der Test wurde von mir so veraendert, dass nun eine Übernahme negativer Werte für diese Felder nicht mehr erfolgt.

8 20.09.2000 1ST
FIX
aber
siehe
9
gollnick Charakterisierung:
Bei der Übernahme der Werte aus dem "Topographie Einstellen"-Fenster erfolgt nur eine Umwandlung der Werte und nötigenfalls eine Überprüfung auf Ungleichheit mit Null. Da in die Eingabefelder reelle Zahlen ohne führende Null eingegeben werden können, bei einem erneuten Aufruf des "Topographie Einstellen"-Fensters, aber diese Werte immer mit führender Null dargestellt werden, kommt es zur Ausgabe fehlerhafter Werte. Bezog sich die Wertangabe nur auf die letzte Stelle, so erscheint in der Neudarstellung eine Null. Da aber die Werte stets neu aus den Eingabefeldern übernommen werden, läßt sich das Topographie Einstellen Fenster nun nicht mehr mit "OK" schließen.
Behebung:
Ich habe die Wertüberprüfung erweitert, so dass die Wertebeträge nun auch auf bestimmte Mindestgrößen überprüft werden. 
Achtung! Bei Neudarstellung kann es trotzdem zu ungenauer Wertdarstellung kommen, wenn die letzte Stelle wegfällt. Wird das "Topographie Einstellen"-Fenster jedoch nicht erneut geöffnet, so wird intern diese Stelle beibehalten. Es ist mit den Physikern zu klären ob dies relevant ist. Evtl. muß der String vor der Umwandlung auf das Vorhandensein einer führenden Null überprüft werden. 
9 05.12.2002 FIX kullmann,
reinecker
Charakterisierung:
Die Fixes zu Fehler 8 und 9 reichen leider nicht aus.
Die Mindestgrößen für einige Werte sind zu klein, deshalb das Problem bei der erneuten Darstellung. Besonderns bei Werten die antriebsspezifisch sind, muss die Genauigkeit der Mindesgrößen VARIABEL an den jeweiligen Antrieb angepasst werden.
Bemerkung:
Die minimalen und maximalen Werte ergeben sich anscheinend durch die Länge des jeweiligen Eingabefeldes. Die Stellenanzahl entspricht jedenfalls immer der Anzahl der Zeichen. Das ist sehr schlechtes Design. Es sollte vielleicht mit den Physikern geklärt werden, welche Grenzwerte hier im einzelnen sinnvoll wären.
Behebung:
Die folgenden Fixes stellen die Fehler im einzelnen dar und sind NUR in der neuen Topographie behoben.
10 05.12.2002 FIX kullmann,
reinecker
Charakterisierung:  
in der bisherigen Topographie M_TOPO.CPP  Zeile: 861

  if ( valueF >= 0.01 ) { TopographyOld.fControlRange = valueF / 100.0; }

Die Wert in der if-Abfrage ist zu klein. Die Genauigkeit der Wertes ist bei der Ausgabe nur eine Dezimalstelle. Bei einer Eingabe < 0.1 und erneutem oeffen des Dialogs wird 0.0 angezeigt.
Behebung:
in der neuen Topograpfie TP_FUNK.CPP

  BOOL TTopography::SetControlRange( float aRange ) {
   
if ( (aRange < (float)0.1) || (aRange > 9999.0) ) return
FALSE;

    m_fControlRange= aRange / 100.0;
   
return TRUE;
  };

11 05.12.2002 FIX kullmann,
reinecker
Charakterisierung: 
in der bisherigen Topographie M_TOPO.CPP  Zeile: 874

  if ( (valueF >= 0.001) || (valueF <= -0.001) ) {
     TopographyOld.fAngleBetweenShots = valueF; }

Der Bereich in der if-Abfrage ist zu klein. Die Genauigkeit der Wertes hängt vom Motor ab, damit muss die Genauigkeit des Minimums auch vom Motor abhängen.
Behebung:
in der neuen Topograpfie TP_FUNK.CPP

  BOOL TTopography::SetAngleBetweenShots( float aAngle ) {
    float Min= 1 / pow((float)10, (float)GetMotorDigits(eDF));
    if ( (aAngle < -9999.0) || ((aAngle < Min) && (aAngle > (-1*Min))) ||
         (aAngle > 99999.0) ) return FALSE;

    m_fAngleBetweenShots= aAngle;
    return TRUE;
 
};

12 05.12.2002 FIX kullmann,
reinecker
Charakterisierung: 
in der bisherigen Topographie M_TOPO.CPP  Zeile: 892

  if( valueF >= 0.00001 ) { TopographyOld.fControlStep = valueF; }

Der Wert der if-Abfrage muss variabel sein. Die Genauigkeit der Wertes hängt vom Motor ab, damit muss die Genauigkeit des Minimums auch vom Motor abhängen.
Behebung:
in der neuen Topograpfie TP_FUNK.CPP

  BOOL TTopography::SetControlStep( float aStep ) {
    float Min= 1 / pow((float)10, (float)GetMotorDigits(eSF));
    if ( (aStep < Min) || (aStep > 9999999.0) ) return FALSE;

    m_fControlStep= aStep;
    return TRUE;

  };

13 05.12.2002 FIX kullmann,
reinecker
Charakterisierung: 
in der bisherigen Topographie M_TOPO.CPP  Zeile: 905

  if( valueF >= 0.0001 ) { TopographyOld.fMoveStep = valueF; }

Der Wert der if-Abfrage muss variabel sein. Die Genauigkeit der Wertes hängt vom Motor ab, damit muss die Genauigkeit des Minimums auch vom Motor abhängen.
Behebung:
in der neuen Topograpfie TP_FUNK.CPP

  BOOL TTopography::SetMoveStep( float aStep ) {
    float Min= 1 / pow((float)10, (float)GetMotorDigits(eSF));
    if ( (aStep < Min) || (aStep > 99999.0) ) return FALSE;

    m_fMoveStep= aStep;
    return TRUE;
  };

14 05.12.2002 FIX kullmann,
reinecker
Charakterisierung:  
in der bisherigen Topographie M_TOPO.CPP  Zeile: 918 

  if (valueF >= 0.01 ) { TopographyOld.fMaxAngleEscape = valueF; }

Die Wert in der if-Abfrage ist zu klein. Die Genauigkeit der Wertes hängt vom Motor ab, damit muss die Genauigkeit des Minimums auch vom Motor abhängen.
Behebung:
in der neuen Topograpfie TP_FUNK.CPP

  BOOL TTopography::SetMaxAngleEscape( float aAngle ) {
    float Min= 1 / pow((float)10, (float)GetMotorDigits(eDF));
    if ( (aAngle < Min) || (aAngle > 9999.0) ) return FALSE;

    m_fMaxAngleEscape= aAngle;
    return TRUE;
  };

15 05.12.2002 FIX kullmann,
reinecker
Charakterisierung: 
in der bisherigen Topographie M_TOPO.CPP  Zeile: 961

  if ( (valueF >= 0.001) || (valueF <= -0.001) ) {
   TopographyOld.fWorkPoint = fabs(valueF / 100); }

Der Bereich in der if-Abfrage ist zu klein. Die Genauigkeit der Wertes ist bei der Ausgabe nur eine Dezimalstelle. Bei Eingabe von 0.001 und erneutem oeffen des Dialogs wird 0.0 angezeigt.
Behebung:
in der neuen Topograpfie TP_FUNK.CPP

  BOOL TTopography::SetWorkPoint( float aPoint ) {
    if ( (aPoint < -9999.0) || ((aPoint < 0.1) && (aPoint > -0.1)) ||
         (aPoint > 99999.0) ) return FALSE;

    m_fWorkPoint= fabs(aPoint / 100);
    return TRUE;
  };

16 05.12.2002 FIX kullmann,
reinecker
Charakterisierung:  
in der bisherigen Topographie M_TOPO.CPP  Zeile: 975

  if ( valueF >= 0.0001 ) { TopographyOld.fMaxTime = valueF; }

Die Wert in der if-Abfrage ist zu klein. Die Genauigkeit der Wertes ist bei der Ausgabe nur eine Dezimalstelle. Bei einer Eingabe < 0.1 und erneutem oeffen des Dialogs wird 0.0 angezeigt.
Die obere Grenze wird nur durch die Länge des Eingabefeldes definiert.
Behebung:
in der neuen Topograpfie TP_FUNK.CPP

  BOOL TTopography::SetMaxTime( float aTime ) {
    if ( (aTime < 0.1) || (aTime > 99999.0) ) return FALSE;

    m_fMaxTime= aTime;
    return TRUE;

  };

17 05.12.2002 FIX kullmann,
reinecker
Charakterisierung: 
in der bisherigen Topographie M_TOPO.CPP  Zeile: 989

  if( valueL > 0 ) { TopographyOld.dwMaxCounts = valueL; }

Die obere Grenze wird nur durch die Länge des Eingabefeldes definiert.
Behebung:
in der neuen Topograpfie TP_FUNK.CPP

  BOOL TTopography::SetMaxCounts( DWORD aCount ) {
    if ( (aCount <= 0) || (aCount > 999999.0) ) return FALSE;

    m_dwMaxCounts= aCount;

    return TRUE;
  };

18 21.09.2000 FIX
aber
siehe
19
gollnick Charakterisierung: 
Die Funktion TTopographySetParam::Dlg_OnCommand case-Zweig cm_ParamSet übernimmt die Darstellung der Werte in den Anzeigefeldern des Topographie Einstellen Fensters. Für die Belichtungszeit wird der auszugebende Wert nach int konvertiert und die Formatierungsangabe %.d für int angegeben. Da es sich aber bei diesem Wert um einen long Wert handelt, führt dies bei entsprechend großen Werten zu einem Überlauf des Integerbereichs, so daß ein fehlerhafter Wert angezeigt wird.
Behebung:
Ich habe die explizite Typumwandlung gestrichen und die Formatierungsangabe in %.ld für long geändert. Es kommt nun nicht mehr zum Überlauf, und der Wert wird korrekt dargestellt.
19 05.12.2002 FIX
zu 20
 
kullmann,
reinecker
Charakterisierung: 
Dies ist ein FIX zu Fehler 19, denn der beseitigt zwar die Symptome aber leider nicht die Ursache. In Borland C++ 4.5 steht der Praefix long fuer long double und nicht wie in Standard C++ fuer long int. Durch die damit falsche Formatierung bei der Ausgabe entsteht hier ein Fehler der sogar die Umrechnung beeinflusst. Der Faktor ist 601 muss aber 60 sein!
Außerdem wird auch hier die obere Grenze nur durch die Länge des Eingabefeldes definiert.
Behebung:
Der korrekte Typ muss LONG sein ( 32bit unsigned integer).
in der bisherigen Topographie M_TOPO.CPP bleibt das so.
in der neuen Topograpfie TP_GUI.CPP

  if ( !m_lnkTopography->SetMeasurementTime( LONG)(CtrlGetLong( id_MeasurementTime,
                                                                bValid) * 60) ))
 

  CtrlSetLong( id_MeasurementTime, (LONG)(m_lnkTopography->GetMeasurementTime() / 60) );

in der neuen Topograpfie TP_GUI.CPP

  BOOL TTopography::SetMeasurementTime( LONG aTime ) {
    if ( (aTime <= 0) || (aTime > 9999999l) ) return FALSE;

    m_lMeasurementTime= aTime;
    return TRUE;
  };

20 21.09.2000
05.12.2002
1ST
FIX
gollnick
kullmann,
reinecker
Charakterisierung:
Werden in die Dialogfelder des "Topographie Einstellen"-Fensters Werte eingegeben, die sich auf reelle Zahlen beziehen, so werden diese mit der Funktion atof umgewandelt. Diese Funktion erkennt auch die Angabe von Exponenten (z.B. 2e-20). Es lassen sich somit Werte angeben, die außerhalb der vorgesehenen Wertebereiche liegen. Wird eine Zahl eingegeben, die den Wertebereich der float-Zahlen überschreitet, kommt es zur Borland Laufzeitfehlermeldung: "Floating Point: Overflow", und das gesamte RTK-Programm wird beendet. 
Ursache:
Unterstützung der Exponentenschreibweise durch die verwendete Umwandlungsfunktion atof.
Bemerkung:
Es empfiehlt sich, vor Umwandlung des Strings mit atof, diesen auf die enthaltenen Zeichen zu prüfen. Werden bei Angabe reeler Zahlen nur Eingabestrings zugelassen, die keine Buchstaben enthalten, so wird das Problem der Exponentenangabe umgangen. Gleichzeitig läßt sich der Eingabestring auf fehlerhafte Zeichen untersuchen und gegebenenfalls zurückweisen. Damit würde vermieden werden, daß Eingabefehler zur Übernahme falscher Werte führen (z.B. wird der Eingabestring "1q7" durch atof zu 1.0 umgewandelt).
Behebung:
In der bisherigen bleibt der Ueberlauf.
In der neuen Topographie werden die Eingaben explizit mit den Grenzwerten verglichen. Der Fehler tritt damit nicht mehr auf (siehe FIX 11 - 20).
21 21.10.2000
05.12.2002
FIX
FIX
gollnick
kullmann,
reinecker
Charakterisierung:
Im "Topographie Einstellen"-Fenster lassen sich im Bereich Mehrfach Belichtung im Feld Anzahl sehr große Zahlen und negative Zahlen angeben. Wird das "Topographie Einstellen"-Fenster erneut aufgerufen, so enthält dieses Feld andere Zahlenwerte als zuvor eingegeben wurden, wenn die vorherigen Eingaben zu groß ( über 35535 ) oder negativ waren.
Ursache:
Der eingegebene Wert wird in der Topographie Variablen nNumberCycle gespeichert. Diese ist vom Typ WORD (d.h. vorzeichenlos und maximal 35535). Bei der Wertübernahme kommt es zum Überlauf.
Behebung:
Die Wertübernahme in der Funktion TTopographysetParam::CanClose für nNumberCycle wurde von mir so geändert, daß zunächst eine Umwandlung der Zeichenkette in einen long Wert ( vorher short int ) erfolgt und anschließend eine Überprüfung, ob der Wert größer Null und kleiner 35535 ist. Ein Überlauf kann somit nicht mehr erfolgen (bisherige Topographie).
In der neuen Topographie durch 'intelligente' Eingabefelder und explizite Intervallprüfung eliminiert.

in der neuen Topograpfie TP_GUI.CPP

  if ( !m_lnkTopography->SetNumberCycle( CtrlGetLong(id_Shots, bValid)) )

in der neuen Topograpfie TP_FUNK.CPP

  BOOL TTopography::SetNumberCycle( WORD aNumber ) {
    if (aNumber <= 0) return FALSE;

    m_nNumberCycle= aNumber;
    return TRUE;

  };

23 25.10.2000
05.12.2002
1ST
FIX
gollnick
kullmann,
reinecker
Charakterisierung:
Im "Topographie Ausführen"-Fenster läßt sich die Detektormeßzeit verändern. Bei der Übernahme dieses Wertes kommt es jedoch nicht zu einer Wertebereichsprüfung. Es können somit auch unsinnige Werte (Null, negative) eingegeben werden. Diese werden in das Programm übernommen und dort ohne weitere Überprüfung verwendet. Wird ein sehr großer Wert in Exponentenschreibweise eingegeben, kommt es zur Borland Laufzeitfehlermeldung: "Floating Point: Overflow" und das gesamte Programm bricht ab. Bei Eingabe von Werten < 0.1 wird Null angezeigt.
Ursache:
Eine Wertebereichsüberprüfung bei der Übernahme fehlt. Die Umwandlung des Eingabestrings erfolgt mittels atof, was eine Exponentenangabe ermöglicht. Die Darstellung des Wertes erfolgt mit der Fomatierungsangabe "%.1f". Dadurch wird nur eine Nachkommastelle abgebildet, und Werte kleiner 0.1 werden zu Null.
Behebung:
in der neuen Topographie durch FIX von Fehler 17 implizit behoben. Das Eingabefeld 'Detektormeßzeit' benutzt die gleiche Funktionalität aus TP_Funk.CPP.

  if ( !m_lnkTopography->SetMaxTime( CtrlGetFloat(id_ExposureTime, 1, '.', bValid)) )
 

24 05.12.2002 FIX kullmann,
reinecker
Charakterisierung:
in der bisherigen Topographie M_TOPO.CPP
Beim Verlassen wird bControlActive (Status ob Messung läuft) nicht auf FALSE gesetzt. Die Folge: bei Unterbrechung einer laufenden Messung mittels 'Abbrechen' und einem erneuten Aufruf von
'Ausführen' -> 'Topographie' muss 2x 'Regel starten' gedrückt werden um eine neue Messung zu starten (das 1.mal um zu stoppen und bControlActive=TRUE zu setzen, das 2.mal um zu starten)
Behebung:
in der neuen Topographie TP_GUI.CPP

  TTopographysetParam::CanClose() {
    ...
    bControlActive=TRUE
  }
25 05.12.2002 FIX kullmann,
reinecker
Charakterisierung:
in der bisherigen Topographie M_TOPO.CPP
Wird TTopographyExecuteDlg ohne vorherige Ausfuehrung von TTopographySetParamDlg zum ersten mal aufgerufen, so wird nMotor auf Omega gesetzt, existiert aber kein Omega, dann ist überhaupt kein Motor ausgewählt!

  if(TopographyOld.nMotor == -1) { TopographyOld.nMotor = mlGetIdByName(Omega); }

Behebung:
Wenn OMEGA nicht verfügbar, dann wird wenigstens auf den aktuellen gesetzt.
in der neuen Topographie TP_GUI.CPP

  BOOL TTopography::DoInitMotor( TAxisType aType, BOOL aSetup ) {
    if ( m_nMotor < 0 ) {

      if ( SetMotor(aType) );
      else SetMotor( GetActMotor() );

      if ( aSetup ) {
        m_bSetupOk= FALSE ;

        DoSaveMotorSettings( GetActMotor() );

      };
    };
    if ( m_nMotor < 0 ) return FALSE;

    return TRUE;
  };

26 05.12.2002 FIX kullmann,
reinecker
Charakterisierung:
in der bisherigen Topographie M_TOPO.CPP
Für den Parameter im Kontruktor ist der Typ BOOL völlig ausreichend

  TTopographySetParamDlg(int restrictions)

Behebung:
in der bisherigen Topographie bleibt es so
in der neuen Topographie TP_GUI.CPP

  TTopographySettingsDlg(BOOL restrictions)
 

27 05.12.2002 FIX kullmann,
reinecker
Charakterisierung:
in der bisherigen Topographie M_TOPO.CPP  Zeile 595, 608, 641
Es wird KillTimer(GetHandle(),TimerIdInformation); gerufen, obwohl dieser Timer in der Topographie nie gestartet wurde.
Behebung:
In der bisherigen Topographie bleibt es so, in der neuen Topographie TP_GUI.CPP ist es entfernt.
28 05.12.2002 FIX kullmann,
reinecker
Charakterisierung:
in der bisherigen Topographie M_TOPO.CPP  Zeile 140
Zuerst wird der aktive Motor auf den Wert von nMotor gesetzt. Danach wird aber wieder nMotor auf den aktuellen gesetzt - was völlig sinnlos ist.

  mlSetAxis(nMotor);
  nMotor = mlGetAxis();

Behebung:
Ist durch die Trennung in Funktionalität und Oberfläche der neuen Topographie entfallen, in der bisherigen bleibt es so.
29 05.12.2002 FIX kullmann,
reinecker
Charakterisierung:
in der bisherigen Topographie M_TOPO.CPP  Zeile 303
In der Zeile EnableWindow(GetDlgItem(GetHandle(),cm_GotoWorkPoint),!bControlActive); sollte anstelle von !bControlActive immer TRUE angegeben werden.
Behebung:
In der bisherigen Topographie bleibt es so, in der neuen Topographie TP_GUI.CPP wird TRUE gesetzt.
30 05.12.2002 FIX kullmann,
reinecker
Charakterisierung:
in der bisherigen Topographie M_TOPO.CPP  Zeile 763
Die Freigabe dieser Elemente ist nur beim Oeffnen des Dialog (also Dlg_OnInit) zu prüfen, wird aber auch bei Dlg_OnCommand im Zweig case cm_ParamSet ausgewertet.

  if ( !nRestrictions) {
    EnableWindow( GetDlgItem( GetHandle(), id_Shots), TopographyOld.bMultibleShot);
    EnableWindow( GetDlgItem( GetHandle(), id_From), TopographyOld.bMultibleShot);
    EnableWindow( GetDlgItem( GetHandle(), id_StepWidth), TopographyOld.bMultibleShot);
    EnableWindow( GetDlgItem( GetHandle(), id_WorkPoint), !TopographyOld.bMultibleShot);
    EnableWindow( GetDlgItem( GetHandle(), id_ControlRange), !TopographyOld.bMultibleShot);
  }

Behebung:
In der bisherigen Topographie bleibt es so, in der neuen Topographie TP_GUI.CPP ist es entfernt.

31 05.12.2002 FIX kullmann,
reinecker
Charakterisierung:
in der bisherigen Topographie M_TOPO.CPP
Das Attribut bStarted wird in TopographyExecuteDlg::Dlg_OnInit stets auf TRUE gesetzt und danach nie wieder geschrieben. 
Behebung:
In der bisherigen Topographie bleibt es so, in der neuen Topographie TP_GUI.CPP ist es entfernt.
32 05.12.2002 FIX kullmann,
reinecker
Charakterisierung:
in der bisherigen Topographie M_TOPO.CPP
Das Attribut Monitor in den Dialogen wird zwar auf den aktuellen Detektor gesetzt, aber nie benutzt.
Behebung:
Ist durch die Trennung in Funktionalität und Oberfläche der neuen Topographie entfallen, in der bisherigen bleibt es so.
33 17.09.2000 1ST gollnick Charakterisierung:
Bei der Topographie Einfachbelichtung läßt sich der Arbeitspunkt mehrfach nacheinander anfahren, dabei wird vom aktuellen Intensitätswert ausgegangen. Der als Lage des Arbeitspunktes angegebene Prozentwert bezieht sich somit nicht auf den Peak, sondern auf den gerade vorliegenden Intensitätswert.
-> Für den Nutzer bleibt ein eventuell versehentlich vorgenommenes zweites Anfahren des Arbeitspunkt unbemerkt.
Ursache:
Dass der aktuelle Intensitätswert als Ausgangsbasis dient bzw. zu dienen scheint, liegt an einem Fehler der Steering Klasse TGotoPeakCmd ( - siehe auch "Ablaufsteuerung: Fehler" Fehler Nr. 2 ).
Für das mehrfache Anfahren ist die Topographie zuständig hier fehlt eine entsprechende Überprüfung und gegebenenfalls ein Warnhinweis.
Bemerkung:
Es sollte mit den Physikern geklärt werden, ob ein Ausführen der Funktion "Arbeitspunkt anfahren" mehrmals nacheinander gewünscht ist.
34 04.10.2000 1ST
(FIX)
gollnick
kullmann,
reinecker
Charakterisierung:
Wird bei dem Versuch, den Arbeitspunkt anzufahren ("Topographie Ausführen" ->  "Startposition einstellen") der Regelbereich verlassen, so erscheint ein entsprechendes Hinweisfenster. Der Motor wird aber auch bei Bestätigung des Hinweisfensters weiterbewegt, d.h. es wird weiterversucht, den Arbeitspunkt anzufahren.
Bemerkung:
Eine Ansatz zur Lösung in der neuen Topographie ist es, bei der Behandlung dieser Exception die Methode Dlg_OnSwitchControl zu rufen, wobei vorher m_bControlActive = TRUE gesetzt wird. Das wird  aber noch weitere Änderungen nach sich ziehen und muss genau getestet werden.
35 16.01.2003 1ST kullmann,
reinecker
Charakterisierung:
In TTopographyOld::Initialize der alten Topographie und im Konstruktor der Funktionalität der neuen Topographie TTopography werden einige der Attribute aus der DEVELOP.INI geladen. Diese INI-Einträge werden aber nie geschrieben.
Bemerkung:
Es sollte mit den Physikern geklärt werden, ob diese paar INI-Einträge entfernt werden können oder ob sie  zu Sicherung der Einstellungen bei einem Absturz dienen sollen. In dem Fall sollte für jeden Parameter im Dialog 'Topographie Einstellungen' ein INI-Eintrag erzeugt werden.
36 16.01.2003 1ST kullmann,
reinecker
Charakterisierung:
in der bisherigen und in der neuen getrennten Topographie wird beim Verlassen des Dialogs in TTopographyExecuteDlg::LeaveDialog bzw. TTopography::DoResetDetectorParams am Ende
Detektor->StartMeasuring gerufen.
Bemerkung:
Wenn dies nur zum aktualisieren der Detektorparameter dient, dann, sollte es für diesen Zweck besser eine neue eigene Methode im Detektor geben. Der Nutzen ist nicht klar ersichtlich, das Problem  existiert aber auch in anderen Subsystemen.
37 17.02.2004   kullmann,
reinecker
Einige, die Topographie betreffende Fehler, werden am Dokumentende beschrieben. (.doc)
Nr. 19.06.2000 
20.06.2000
1ST 
FIX
sacklows
sacklows
Charakterisierung: 
Ursache: 
Behebung:


. Projekt: Software-Sanierung
erstellt am 19.06.00 (Sacklowski)
geändert am 17.02.2004 (Sacklowski)