> Projekt: Software-Sanierung > Entwicklerdokumentation > Tabelle zu den Entwicklerdokumenten > Diffraktometrie/Reflektometrie > Fehler

Diffraktometrie/Reflektometrie

Fehler

 

Autoren: Gruppen projekt98 und projekt99

==>   in Bearbeitung   <name>  <datum>



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 und Behebung beinhalten.

Überblick:
Fehler 1-29: LineScan
Fehler 30-69: AreaScan
ab Fehler 70: LineScan und AreaScan

letzte Änderung: 25.04.2003

Achtung: Seit Juli 2003 gibt es eine neue Architektur des Diff.-/Refl.-Subsystems (siehe dort)

Nr. Datum Status Wer? Beschreibung
1 21.11.2000  1ST  Diffr.-gruppe Charakterisierung: bei laufendem StepScan ist nach minimieren + wiederherstellen des Scanfensters das Koordinatensystem verschwunden 
Ursache: ... 
Behebung:Aufgabe der Bildnerischen Darstellung ...
2 28.05.2001 FIX Diffr.-gruppe Charakterisierung: eine nachgeladene bk-Kurve wird falsch dargestellt
Ursache: Fehler in den I/O-Operationen
Behebung: in m_data.cpp in SaveSecondCurve die Zeile
		  sprintf(buf,"%.3f %.3f %.3f\n",x,y,z);
ersetzen durch
		  sprintf(buf,"%.3f %.3f %.3f",x,y,z);
		  strcat(buf,EOL);
3 21.11.2000  1ST 
FIX
Diffr.-gruppe Charakterisierung: in LoadMeasurementInfo in m_scan.cpp muß Datei über 100 Byte haben, sonst Fehlerausschrift
Problem beim Laden von .bk-Dateien, die nur 2 Punkte haben 
Ursache: ... 
Behebung: Die Behebung ist nicht mehr nötig, da durch B.Buss der Header der bk-Dateien vergrößert wurde. Jetzt sind bis auf unrealistische Sonderfälle auch die bk-Dateien länger als 100 Byte.
4 . . Diffr.-gruppe Charakterisierung: siehe jetzt Fehler 78
Ursache:
Behebung:
5 21.11.2000 
11.05.2001
FEA 
FIX
Diffr.-gruppe Charakterisierung: in InitializeTask in m_scan.cpp wird trotz Einstellung SaveOnReady=SaveContinuous=False bei vorher geladener Kurve immer die Auswahl eines Dateinamens zum Speichern verlangt (speichert also geladene Kurve unter diesem Namen ??) 
Ursache: liegt an Variable bOldDataLoaded (wird bei nachladen von Kurve auf True gesetzt) 
Behebung:bOldDataLoaded aus der if-Anweisung entfernt:
        if ( bSaveContinuous || bSaveOnReady || bOldDataLoaded)
            SaveFile( SaveWithNewName );
6 21.11.2000 
11.05.2001
1ST 
FIX
Diffr.-gruppe Charakterisierung: trotz erfolgreichem Kontinuierlichem Speichern Ausgabe von Kurve nicht gespeichert bei Schließen des Fensters 
Ursache: bFileChanged wurde nicht nach Beendigung des Scans auf False gesetzt 
Behebung: in SteeringReady in m_scan.cpp in der 
if (bSaveContinuous)- Anweisung die Zeile 
      bFileChanged= False;
hinzufügen 
7 09.05.2001 
11.05.2001
1ST 
FIX
Diffr.-gruppe Charakterisierung: beim Speichern einer geladenen Kurve wird ein Tripel zu wenig abgelegt
Ursache: in LoadOldData wird letztes Tripel nicht in Kurve aufgenommen
Behebung: in LoadOldData() Variable bReady = FALSE eingeführt
	 for ( cnt = 0; ; cnt++ )
ersetzt durch
	 for ( cnt = 0; !bReady ; cnt++ )
goto Ready ersetzt durch bReady = TRUE
in case R_Overflow am Ende ein zusätzliches continue; einfügen
Ready: Label entfernen
8 21.11.2000 
11.05.2001
1ST 
FIX
Diffr.-gruppe Charakterisierung: zur Dialogbox Einstellungen StepScan
Eingabe von 
  • Schrittweite ist kleiner als die minimal erlaubte (des Motors)  
  • negativer Meßzeitbegrenzung 
  • negativer Impulsbegrenzung 
    erlaubt 
    Ursache: in m_scan.cpp in TSetupScan::CanClose() werden die Werte auf diese Kriterien nicht überprüft 
    Behebung:in TSetup::Dlg_OnInit() Impuls und Zeitbegrenzngs-Zeilen entfernen und diese unter Dlg_OnCommand unter case cm_ParamSet einfügen
    in CanClose() ist in den Tests das "!=" durch "<" zu ersetzen
    bzw. bei Schrittweite (0 != valueF) durch (mGetValue( Width ) <= valueF) ersetzen
    in Dlg_OnInit die Variable buf entfernen
  • 9 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: zur Dialogbox Einstellungen StepScan
    beim Wechsel der Scanachse sollte die zugehörige Einheit angezeigt werden, außerdem sollten event. überschreitungen des Scanbereichs (min, max) automatisch korrigiert werden 
    Ursache: ... 
    Behebung: in TSetupStepScan::Dlg_OnCommand in 
    id_ChooseMotor: in case CBN_SELCHANGE
     das Kommando 
         FORWARD_WM_COMMAND(GetHandle(),cm_ParamSet,0,0,PostMessage); 
    einbinden 
    10 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Nach dem Start eines Scans wird immer eine Speichern unter-Box zuviel aufgerufen. 
    Ursache: ... 
    Behebung: aus InititializeTask() erste SaveFile-Anweisung entfernen 
    11 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Bei kont. Speichern enthält die Datei den String [DATA] zweimal 
    Ursache: nutzen problematischer File-I/O-Befehle 
    Behebung: in SaveMeasurementInfo() in m_scan.cpp folgende Anweisungen ersetzen:
    FILE* hFile;                       ==> int hFile; OFSTRUCT of;
    hFile=fopen(FileName,"rb+");       ==> hFile=OpenFile(FileName,&of,OF_WRITE);
    hFile=fopen(FileName,"w");         ==> hFile=OpenFile(FileName,&of,OF_CREATE);
    if(!hFile)                         ==> if(-1==hFile)
    fwrite(data,strlen(data),1,hFile); ==> _lwrite(hFile,data,strlen(data));
    fclose(hFile);                     ==> _lclose(hFile);
    12 21.11.2000  1ST 
    AEN
    Diffr.-gruppe Charakterisierung: Die Funktionalität "Continuous Scan" funktioniert nicht 
    Ursache: nicht vollständig bzw. fehlerhaft implementiert 
    Behebung: möglich(von Physik erwünscht) 
    13 21.11.2000  1ST 
    AEN
    Diffr.-gruppe Charakterisierung: Bei aktivierter dynamischer Schrittweitensteuerung sind die Angaben (verbleibende Zeit) in der Statusleiste falsch. 
    Ursache: Da sich die Schrittweite dynamisch aus der gemessenen Intensität ergibt und diese erst zur Meßzeit ermittelt wird ist eine Angabe der verbleibenden Meßzeit nie möglich. 
    Behebung: Da von Physikern die dyn. Schrittweitensteuerung nicht mehr gewollt ist, ist eine Behebung wohl nicht erforderlich. 
    14 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: in loadOldData kein Test auf richtige Extension 
    Ursache: ... 
    Behebung: in LoadOldData() hinter der Zeile 
         FileOpen("Altes Datenfile laden ...",Filter,NewFileName,szDataPath);
    die folgenden Zeilen einfügen:
    	 if((strcmp(strupr(&(NewFileName[strlen(NewFileName)-3])),"CRV"))&&
    		 (strcmp(strupr(&(NewFileName[strlen(NewFileName)-2])),"BK"))&&
    		 (strcmp(strupr(&(NewFileName[strlen(NewFileName)-3])),"DTN")))
    		  return FALSE;
    
    15 06.07.2001
    13.07.2001
    1ST
    FIX
    Diffr.-gruppe Charakterisierung: Es werden keine Monitorintensitäten in der Crv-Datei angelegt, obwohl man einen Scan mit Monitordetektor durchgeführt hat.
    Ursache: Die Funktionalität StepScan mit Monitordetektor ist fehlerhaft. (in dieser Version werden keine Monitorintensitäten gemessen).
    Behebung: in m_Scan.cpp in InitializeTask() die Zeilen:
      if (bMonitorUsed)
        {
             Monitor->MeasureStop();
             Monitor->SetHost( hWndChild );
         	 Monitor->SetExposureValues( 0.8*fMaxTime, dwMaxCounts, fFailure );
        }
    
    einfügen, sowie in CounterSetRequest() die Zeilen:
    if ( bMonitorUsed )
      {     // normalize signal
    	Monitor->GetData( z );
    	Steering.SetNorm( z );
      }
    else
      z = 0.0;
    
    durch die Zeilen:
    if ( bMonitorUsed )
      { 
      if ( lParam == Monitor->GetId() )
       {
            // normalize signal
    	Monitor->GetData( z );
    	Steering.SetNorm( z );
            return;
        }
      }
    else
      z = 0.0;
    
    ersetzen. (Außerdem die Variable z als static deklarieren)
    in m_steering.cpp in TScanCmd-Konstruktor unter case ForScan: die Zeilen:
    bMonitorUsed = ScanW->bMonitorUsed;
    if(bMonitorUsed)
      Monitor = lpDList->DP(ScanW->Monitor->GetId());
    
    einfügen.
    16 21.11.2000  1ST  Diffr.-gruppe Charakterisierung:
    Ursache: ... 
    Behebung: ...
    17 21.11.2000  1ST  Diffr.-gruppe Charakterisierung:
    Ursache: ... 
    Behebung: ...
    30 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: nach einem Areascan mit 0-dim. Detektor werden bei ChooseScan falsche Omega- und Thetawerte angegeben 
    Ursache: bei einem Areascan mit 0-dim. Detektor wird kein Scanreport angelegt (in m_arscan.cpp in CounterSetRequest()) 
    Behebung:Variablen float x2,y2,z2 einführen
    unter case Omega2ThetaScan im else-Zweig von if (bPsdDevice) unter if (bThetaScanCompleted) folgende Zeilen einfügen:
    		MainCurve->SetPP(0);
    		MainCurve->PGet(x2,y2,z2);
    		MainCurve->GetGravityCenter(intens,intens,peakpos,2);
    		ScanReport->PAdd(z2,x2,intens);
    
    
    im else-Zweig in MainCurve->PAdd( y, intens, y ); das letzte y durch x ersetzt
    in SteeringReady() erweitert:
    		  switch (eScanType){
    		  case Omega2ThetaScan:if (!bPsdDevice)
    						  {
    						  //! die Werte zu der letzten Scankurve in Report-
    						  //! kurve ablegen
    						  //! FIX Fehler 30,40
    						float x2,y2,z2,intens,peakpos;
    		 				MainCurve->SetPP(0);
    						MainCurve->PGet(x2,y2,z2);
    						MainCurve->GetGravityCenter(intens,intens,peakpos,2);
    						ScanReport->PAdd(z2,x2,intens);
    						}
    						break;
    
    		  default: ;
    		  }
    
    31 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: bei Areascan mit 0-dim. Detektor wird die letzte Kurve bei ChooseScan nicht dargestellt 
    Ursache: es wird in m_arscan.cpp in CounterSetRequest eine Kurve zuviel angelegt (diese enthält einen Punkt und wird deshalb nicht dargestellt) dadurch auch falsche Anzahl von Scans in der Statusleiste. 
    Behebung: in m_steerg.cpp 
    TCCode TAreaScanCmd::ControlStep(void)
    {
      if(nThetaPoint >= nMaxThetaPoint)
      if(nOmegaPoint >= nMaxOmegaPoint)
      {
        eStep = CReadyStep;
        bNoMeasure = TRUE;
        StartMove(nOmega,Steering.dStartPoint);
        StartMove(nTheta,dStartPointTheta);
      }
    else
      {
        AreaScanW->bThetaScanCompleted = TRUE;
        dOmega += dOmegaWidth;
        nOmegaPoint++;
        StartMove(nOmega,dOmega);
        nThetaPoint = 0;
        dTheta = dOmega * dMoveRelation - dThetaWindow / 2.0;
        StartMove(nTheta,dTheta);
      }
      else 
      {
        nThetaPoint++;
        dTheta += dThetaWidth;
        StartMove(nTheta,dTheta);
      }
      return CRecall;
    };
    (beinhaltet gleichzeitig die Lösung von Fehler 54)
    32 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Bei Areascanstart erscheint Box auch wenn keine Speicheroption gewählt wurde 
    Ursache: in m_arscan.cpp in InitializeTask() fehlt eine if-anweisung 
    Behebung:
    if(SaveOnReady || SaveContinuous)
            SaveFile(SaveWithNewName);
    33 21.11.2000  1ST 
    FIX
    Diffr.-gruppe
    Buss
    Charakterisierung: Bei speichern einer zuvor geladenen Datenbasis enthält die zugehörige Scanreportdatei als max.Intensitätswert für jeden Scan den Wert -1 
    Ursache: beim laden der Datenbasis wird die zugehörige Scanreportdatei nicht geladen der Scanreport (omega- und Thetawinkel zu jeder Kurve werden stattdessen aus den Headerinfos der *.psd datei ermittelt und der Intens.wert pauschal auf -1 gesetzt) 
    Behebung: in m_arscan.cpp LoadOldData() 
     vor
                    ScanReport->FastPAdd(omega,theta,intens);
     folgende Zeilen einfügen
                    TheCurve = lpDBase->GetCurve(cnt);
                    TheCurve->GetGravityCenter(dummy,intens,dummy,2);
    wobei dummy noch als float-Variable einzuführen ist
    weiterhin die Zeile:
    	intens = -1.0;
          
    einfügen
    34 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Lädt man eine Datenbasis nach die bei einem Areascan mit einem 0-dim. Detektor und der Speicheroption (Ständig sichern) entstanden ist, so erhält man eine Datenbasis die #Thetaschritte mal #Omegaschritte viele (zum Teil sinnlose) Kurven enthält. 
    Ursache: in m_ascan.cpp in CounterSetRequset() wird bei 0-dim. Detektoren in jedem Thetaschritt die aktuelle Kurve an die Datei angehängt. sieht z.B. dann folgendermaßen aus
    102 0 0 0 0 0 0 0 0
    102 470 0 0 0 0 0 0 0
    102 470 420 0 0 0 0 0 0
    ... 
    Behebung: in CounterSetRequest() Anweisung
    	if (bSaveContinuous)
    		UpdateFile();
    
    entfernen und in if (bThetaScanCompleted) noch vor
    lpDBase->AddCurve( MainCurve->GetPNumber() );
    einfügen
    35 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Beim Aufruf der Calbrierungsdialogbox wenn gerade die kontinuierliche Spektrumdarstellung (Position- oder Energiespektrum) aktiviert ist, kommt es zu einer Fehlermeldung und nach verlassen dieser Box läßt sich die kont. Spektrumanzeige nicht mehr ausschalten. Es ist somit auch kein Scanstart mehr möglich. 
    Ursache: in m_arscan.cpp in CalibratePsd() der Aufruf ShowSensorContinuous(0) soll bewirken, das zum einen die akt. Spektrumanzeige ausgeschalten wird und bei wiederholtem Aufruf die alte Spektrumanzeige wieder angeschaltet wird. Das Problem ist, das diese Funktion mit dem Argument 0 nicht implementiert ist. 
    Behebung: in CalibratePsd() bCalibrationActive=TRUE; hinter die if-Anweisung if (bShowPsdContinuous)einfügen
    und an das Ende dieses if-Zweiges ein return eingefügt
    weiterhin wurden alle Ausdrücke und Variablen entfernt, die sich mit der kontinuierliche Anzeige beschäftigen
    36 21.11.2000  1ST 
    AEN
    Diffr.-gruppe Charakterisierung: Beim Fahren eines Areascans mit einem Psd wird nicht über die gesamte Meßzeit gemessen, sondern nach ca 5 sec ein aktuelles Spektrum ausgegeben(nicht akkumuliert). Es wird auch nicht das Ergebnis nach Ablauf der Meßzeit angezeigt. 
    Ursache+Behebung: um die Anzeige des Ergebnisspektrums nach Ablauf der Meßzeit zu realisieren sind alle 
           Device->SetSignalGrowUp(True);
    durch 
           Device->SetSignalGrowUp(False);
    zu ersetzen. 
    Um dagegen eine akkumulierte Anzeige zu erhalten, muß in Counters.cpp in TPsd:PollDevice() der Befehl 
          ... = PsdReadOut(IntermediateRead);
    durch 
          ... = PsdReadOut(AccumulationRead);
    ersetzt werden.(mit Detektorgruppe zu klären)
    Von Physik ist für die Zukunft eine direkte Auswahlmöglichkeit der Anzeigeart während des Scans gewünscht. 
    37 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Es wird die Speicheroption Bei Beenden speichern (SaveOnReady) zwar bei schließen des Areascanfensters in der Ini-datei gespeichert, aber beim öffnen eines neuen Fensters wird dieser Wert nirgendwo eingelesen. 
    Ursache: ... 
    Behebung: im Konstruktor TAreaScanParameters in m_arscan.cpp die Zeile 
          bSaveOnReady = GetPrivateProfileInt( Ident, "SaveOnReady", 1, GetCFile() );
    einfügen. 
    38 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Bei Ändern des Detektors in der Dialogbox zum einstellen der Scanparameter werden automatisch Werte wie z.B. die Speicheroption (Save Each Scan), die Omegaschrittweite, der Speicherpfad u.a. Dialogfelder zurückgesetzt. Dieses Zurücksetzen ist aber nur für die Elemente unter Settings2Theta sinnvoll( wenn z.B. von einem Psd auf 0-dim. Detektor umgeschaltet wird muß die Eingabe eines Thetawindow möglich werden). 
    Ursache: in m_arscan.cpp in TSetupAreaScan:Dlg_OnCommand() wird bei auswählen eines anderen Detektors cm_ParamSet gesendet und dieses Kommando das auch beim Start der Dialogbox gesendet wird um einige Dialogboxelemente zu initialisieren, hat diese Wirkung. 
    Behebung: Die weniger sinnvollen Änderungsanweisungen für Schrittweite, Datenpfad und Relation unter cm_ParamSet entfernen und in TSetupAreaScan:Dlg_OnInit einfügen 
    aus cm_ParamSet Speicheroptionen entfernen
    in CanClose Datenpfad neu setzen und Überprüfung von Relation und Omega-Schritt mit Korrektur bei falschen Werten
    39 21.11.2000 
    21.05.2001
    08.08.2001
    1ST 
    FIX
    FIX
    Diffr.-gruppe & Buss Charakterisierung: Beim Speichern eines AreaScans, der mit einem 0-dim. Detektor gemacht wurde, bei dem aber vor dem Abspeichern in der Einstellungsbox der Detektor auf Psd gestellt wird, werden falsche Measurementinfos gespeichert. 
    Ursache: Es wird vom Programm angenommen, daß die Kurven der Datenbasis mit dem aktuell eingestellten Detektor erstellt wurden. Das gleiche Problem tritt auf, wenn nach dem Laden einer Datenbasis der aktuelle Detektor geändert wird . 
    Behebung: in m_data.h wird folgende Struktur eingeführt, um Informationen über eine aktuell im Speicher befindliche Datenbasis zu sichern:
    typedef struct
    {    
        double dThetaWindow, dMoveRelation, dOmegaMin, dOmegaMax;
        double dThetaMinFirst, dThetaMaxFirst, dThetaMinLast, dThetaMaxLast; 
        float fAngleRange, fAngleStep;
        BOOL bPsd;
    }
    TDisplay;
    
    weiterhin wird eine Variable VisualDB von diesem Typ als protected in der Klasse TPlotData deklariert

    Dafür gesorgt, daß alle Zugriffe auf die urspünglichen Variablen nun auf die VisualDB-Variablen erfolgen.
    40 21.11.2000 
    21.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Ein nachgeladener AreaScan, der mit einem 0-dim. Detektor gemacht wurde, wird falsch dargestellt. 
    Ursache: Da beim Abspeichern die Headerinformationen für Omegamin.,Omegamax., Thetamin. und Thetamax. aus dem Scanreport entnommen werden und dieser nicht existiert (siehe Fehler Nr.30), werden falsche Werte eingetragen, die dann beim Laden zu unsinnigen Darstellungen führen. 
    Behebung:Dieser Fehler ist durch die Behebung der Fehler 30 und 39 glech mitbehoben worden.
    41 . . Diffr.-gruppe Charakterisierung:
    Ursache:
    Behebung:
    42 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: in der ChooseScan-Dialogbox wird statt dem Omegawinkel der Thetawinkel des jeweiligen Spektrums angezeigt. 
    Ursache:
    Behebung: in m_arscan.cpp in TChooseScan:Dlg_OnCommand() bei case cm_ParamSet: den Befehl 
         sprintf(buf,"%.3f",y);
    durch 
         sprintf(buf,"%.3f",x);
    ersetzen. 
    43 21.11.2000  1ST 
    FIX
    Diffr.-gruppe
    Buss
    Charakterisierung: beim ChooseScan einer Psd-Kurve wird der Bereich vom letzten Thetaspektrum für alle anderen Spektren benutzt. (x-Achse von Koordinatensystem) 
    Ursache: da bei einem Areascan mit einem Psd immer eine komplette Kurve vom Detektor kommt, in dieser aber keine korrekten Winkelangaben stehen können, muß dieser Fehler über einen Offset realisiert werden. Dies wird hier falsch gemacht. 
    Behebung: in m_arscan.cpp in TAreaScan::GetThetaOffset() ist bei case curve: den Befehl
          ScanReport->SetPP(10000);
     durch 
          ScanReport->SetPP(nActiveScan);
    ersetzen. 
    44 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: nach Laden von z.B. p829fein.psd und anschließendem Start eines Scans von z.B. 0.0 nach 4.0 sind die Achsenbeschriftungen falsch. 
    Ursache: ... 
    Behebung: in m_arscan.cpp in InitializeTask() kurz vor Omegamotor-Initialisierung den Befehl 
           dThetaOffset=0; 
    einfügen 
    45 21.11.2000 
    15.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Das Nachladen von Bitmap war scheinbar geplant , funktioniert aber nicht und führt häufig zum Absturz. 
    Ursache: in m_arscan.cpp LoadOldData() wird ProcessBitmapFile aus m_data.cpp aufgerufen (gehört zur Darstellung) 
    Behebung: In LoadOldData() die Zeilen
    if ( !strcmp( strupr( &( buf[ strlen( buf ) - 3 ] ) ), "BMP" ) )
        {
            strcpy( buf, "*.bmp" );
            hFile = OpenFile( buf, &of, OF_READ );
            retval = BSource->ProcessBitmapFile( hFile );
            _lclose( hFile );
            return retval;
        }
    entfernen.
    46 21.11.2000 
    15.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Bei Datenbasis im Speicher und Aktivierung der kont.Spektrumsanzeige und anschließendem Aufruf von ChooseScan werden
  • zwischendurch neue kont. Spektren angezeigt
  • die ausgewählten Spektren der Datenbasis durch die kont. Spektren überschrieben
    Ursache: Dazu kommt es da bei ChooseScan MainCurve die aktuell betrachtete Kurve beinhaltet und bei Kont. Spektrumanzeige das neue Spektrum auch in Maincurve kommt. 
    Behebung: in CallLocalAction() unter case cm_ChooseScan: folgende Zeilen einfügen :
    if(bShowPsdContinuous)
             {
             MessageBox(GetFocus(),szMsgLine017,szMessage,
             MBINFO);
             break;
             }
    
    Außerdem in ShowSensorContinuous() Variable TCurve* dummy = new TCurve(100) einführen und im if(bShowContinuous)-zweig die Zeile:
    MainCurve = dummy;
    und im else-zweig die Zeile:
    MainCurve = lpDBase->GetCurve(nActiveScan);
    einfügen.
  • 47 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Bei einem laufenden Scan wird in der Statusleiste nicht die gesamte gewollte Information ausgegeben. 
    Ursache: in m_arscan.cpp in CounterSetRequest() wird versucht die Informationzeichenkette in eine kürzere zu kopieren und dabei geht die letzte Information(Nr. des akt. Spektrums) verloren. 
    Behebung: in m_arscan.cpp in CounterSetRequest die arraygröße von buf und fmt erhöhen. z.B. auf 3*MaxString 
    48 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Bei der Psd-Kalibrierung werden veränderte Werte(Winkel je Kanal) übernommen, auch wenn man die Box über "Abbrechen" verläßt. 
    Ursache: in m_arscan.cpp in TCalibrate::Dlg_OnCommand() unter case cm_CounterSet: wird mit Device->SetAngleStep(val_f); der geänderte Wert gleich an den Detektor übergeben. 
    Behebung:in TCalibrate::Dlg_OnInit()
    	dStepWidth = Device->GetAngleStep()
    
    eingefügt
    in Dlg_OnCommand() in case ParamSet und cm_CounterSet Device->GetAngleStep() durch dStepWidth ersetzt
    in Dlg_OnCommand() in case cm_CounterSet die Zeile
    	Device->SetAngleStep(val_f);
    
    ersetzt durch
    	dStepWidth = val_f
    
    in CanClose() Device->SetAngleStep(dStepWidth); vor erster if-Anweisung einfügen
    in m_xscan.h in TCalibrate das Attribut dStepWidth von long in float ändern
    49 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: beim kalibrieren wird die Motorschrittweite auf einen anderen Wert gesetzt. 
    Ursache: ... 
    Behebung: in m_arscan.cpp in TCalibrate::LeaveDialog() die alte Motorschrittweite wieder zurücksetzen. (mSetValue(Width,dOldMotorWidth))
    50 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: zur Areascan-Einstellungsdialogbox:
    folgende offensichlich fehlerhaften Eingaben werden nicht abgefangen: 
    • Omegamax: 
      • Eingabewert ist kleiner als minimal erlaubter Winkel
      • Omegamax ist kleiner als Omegamin
    • Omegamin: 
      • Eingabewert ist größer als maximal erlaubter Winkel
    • Thetawindow ist negativ
    • Thetaschrittweite ist negativ
    • Meßzeit ist negativ
    • Meßcount ist negativ 


    Ursache: in m_arscan.cpp in TSetupAreaScan::CanClose() werden die Werte auf diese Kriterien nicht überprüft 
    Behebung: beinhaltet gleichzeitig Behebung von Fehler 52
    in TSetupAreaScan::CanClose()

    	 if ( (valueF < mlGetValue( nOmega, MaxDistance ))&&
    			(valueF > mlGetValue( nOmega, MinDistance )))
    		  Scan->dOmegaMax = valueF;
    	 else
    	 {
    		  Scan->dOmegaMax = ( mlGetValue( nOmega, MaxDistance ) -
    									 mlGetValue( nOmega, Width ) );
    		  sprintf( buf, mGetDF(), Scan->dOmegaMax );
    		  SetDlgItemText( GetHandle(), id_AngleMax, buf );
    		  bFailure = TRUE;
    
    sowie für OmegaMin entsprechend eingefügt
    obiger Quellcode enthält Behebung von Fehler 52: ThetaWindow-Werte durch OmegaMax-Werte ersetzt
    bei Überprüfung von Theta-Schritt,-window, Meßzeit sowie Impulsbegrenzung "!=" durch "<" ersetzt
    Test auf OmegaMin < OmegaMax eingefügt
    	 if (Scan->dOmegaMin >= Scan->dOmegaMax)
    	  {
    		Scan->dOmegaMax = ( mlGetValue( nOmega, MaxDistance ) -
    								  mlGetValue( nOmega, Width ) );
    		sprintf( buf, mGetDF(), Scan->dOmegaMax );
    		SetDlgItemText( GetHandle(), id_AngleMax, buf );
    		Scan->dOmegaMin = ( mlGetValue( nOmega, MinDistance ) +
    								  mlGetValue( nOmega, Width ) );
    		sprintf( buf, mGetDF(), Scan->dOmegaMin );
    		SetDlgItemText( GetHandle(), id_AngleMin, buf );
    		bFailure = TRUE;
    	  }
    
    51 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: zur Areascan-Einstellungsdialogbox:
    folgende offensichlich fehlerhaften Eingaben werden nicht abgefangen: 
    • Omegaschrittweite: 
      • ist negativ
      • ist null (führt bei Scanstart zu Absturz)
      • ist kleiner als minmal erlaubte (für diesen Motor)
    • Relation: 
      • ist negativ
      • ist null (ist zwar nicht sinnlos ,dafür ist aber "Theta-achse fixieren" gedacht)


    Ursache: in m_arscan.cpp in TSetupAreaScan::Dlg_OnCommand() case cm_InquireRelevantData werden die Werte auf diese Kriterien nicht überprüft 
    Behebung: siehe Behebung Fehler 38

    52 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Wird in der AreaScan-Einstellungsbox für Omegamax ein zu großer Wert eingegeben und wird versucht diese Box über OK zu verlassen, so wird statt Omegamax auf den max. erlaubten Wert zu setzen (ähnlich wie bei Omegamin) der Wert für Thetawindow aktualisiert.(was eigentlich keinen Sinn macht) 
    Ursache: in zugehöriger CanClose() fehlerhaft impl. 
    Behebung: siehe Behebung Fehler 50
    53 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Wenn man in der Einstellungsbox Thetaachse fixieren einstellt, so ist diese Einstellung nach erneutem Aufruf der Box wieder verworfen. 
    Ursache: die Zeilen
          if(Scan->bPsdDevice)
            CheckDlgButton(GetHandle(),id_FixThetaAxis,FALSE);
          else
            CheckDlgButton(GetHandle(),id_FixThetaAxis,TRUE);
    in m_arscan.cpp in TSetupAreaScan::Dlg_OnInit() sorgen dafür , daß dieser Button immer unchecked ist, da ja ein Standardscan nur mit Psd möglich ist. 
    Behebung:in TSetupAreaScan::Dlg_OnInit() den unter Ursache angegebenen Quelltext entfernen und den if-Zweig unter Dlg_OnCommand in case cm_ParamSet in case Omega2ThetaScan noch vor if (Scan->bPsdDevice) und den else-Zweig in case StandardScan einfügen
    54 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Nach Beendigung eines Areascans mit einem 0-dim. Detektor ist die Thetamotorposition nicht dieselbe wie vor dem Start des Scans. 
    Ursache: in m_steerg.cpp in TAreaScanCmd::ControlStep() wird nach dem Befehl auf Startpos. zurückzufahren der Befehl gegeben den thetamotor auf eine neue Position zu bewegen. 
    Behebung:siehe Behebung Fehler 31 in m_steerg.cpp in TAreaScanCmd::ControlStep()
          if ( nThetaPoint > nMaxThetaPoint )
    ersetzen durch
          else if ( nThetaPoint > nMaxThetaPoint )
    55 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: In der Areascan-Einstellungsbox ist trotz eingestelltem 0-dim. Detektor das auswählen des Absorbers möglich obwohl dies nicht implementiert ist(ist auch nicht sinnvoll) 
    Ursache: ... 
    Behebung: in m_arscan.cpp in TSetupAreaScan::Dlg_OnCommand in case cm_ParamSet in case Omega2ThetaScan in der if-Anweisung if (Scan->bPsdDevice) die Zeile
         EnableWindow(GetDlgItem(hwnd,id_AbsorberUsed),TRUE);
    und im else Zweig die Zeilen
         EnableWindow(GetDlgItem(hwnd,id_AbsorberUsed),FALSE);
         CheckDlgButton(hwnd,id_AbsorberUsed,FALSE);
    ergänzen  sowie unter case StandardScan die Zeile
         EnableWindow(GetDlgItem(hwnd,id_AbsorberUsed),TRUE);
    ebenfalls ergänzen
    56 21.11.2000  1ST 
    AEN
    Diffr.-gruppe Charakterisierung: Bei External Synchr. werden keine Dateien der Spektren angelegt.
    Ursache: Die Funktionalität External Synchronized ist unvollständig und fehlerhaft implementiert. Sie ist in der vorliegenden Version nicht funktionsfähig. 
    Behebung: ...
    57 21.11.2000 
    21.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Nach Einstellen eines Reportmodus der ungleich INTEGRAL ist,(im Ini-File Report=....) kommt es zu Fehlermeldungen, das Areascanfenster läßt sich teilweise nicht öffnen, falsche Werte werden angezeigt bzw. abgespeichert ,.... 
    Ursache: Nur der Reportmodus INTEGRAL ist für alle Funktionalitäten vollständig implementiert. Alle anderen Modis sind zwar über das Ini-File einstellbar aber nur im Ansatz implementiert . 
    Behebung:In der m_arscan.cpp im Konstruktor von TAreaScanParameters die folgenden Zeilen auskommentieren:
    	GetPrivateProfileString( Ident, "Report", "Integral", buf, MaxString,
                                GetCFile() );
            strupr( buf );
    	while ( 1 )
        	{
    	...
    	}
          
    Mit den Physikern bleibt zu klären, ob diese Zeilen ganz zu entfernen sind oder ob diese Report-Modi vollständig zu implementieren sind.
    58 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Trotz der Fehlermeldung bei der Calibrierung des Psd wenn die Kanäle für linken und rechten Peak gleich sind, werden beide Dialogbutton disabled (Vorgang wiederholen ist erst nach Verlassen und erneutem Aufruf der Dialogbox möglich).
    Ursache:
    Behebung: Nach der Fehlermeldung sollten alle Parameter zurückgesetzt werden.
    in Dlg_OnCommand unter case cm_CounterSet hinter die Fehlermeldung "Vorgang bitte wiederholen !" jeweils alle Werte bLongMove, LeftPeak.Valid, RightPeak.Valid, bGetRightPek, bGetLeftPeak, bMoveActive auf FALSE setzen und Buttons wieder aktivieren
    59 11.05.2001  1ST
    FIX
    Diffr.-gruppe Charakterisierung: das Einstellen von Impulsbegrenzung macht bei einem Psd keinen Sinn, ist aber zugelassen
    Ursache:
    Behebung: in TSetupAreaScan::Dlg_OnCommand unter cm_ParamSet unter case Omega2ThetaScan unter if (bPsdDevice)
    EnableWindow( GetDlgItem( hwnd, id_MaxCounts ), FALSE);
    
    im else Zweig
    EnableWindow( GetDlgItem( hwnd, id_MaxCounts ), TRUE);
    
    und unter case StandardScan
    EnableWindow( GetDlgItem( hwnd, id_MaxCounts ), FALSE);
    
    einfügen
    60 14.11.2001 1ST T.Panzner Charakterisierung: Während eines Areascans (SLD) bleibt der Thetamotor plötzlich (noch vor dem erreichen der Endposition) stehen. Die Position an welcher der Motor stehen bleibt ist immer eine andere. Der Motor bleibt auch nicht jedesmal stehen (jedoch häufig bei Scans, die über den Zeitraum von mehreren Tagen laufen). Die Motoren Omega und Theta lassen sich im Dialog manuelle Justage auch nicht mehr bewegen (Mauszeiger ist blinkende Sanduhr). Einzige Abhilfe ist Neustart des gesamten Programmes.
    Teil der Beschreibung von T.Panzner:
    manchmal lassen sich die Motoren nicht im Fenster Manuelle Justage bewegen. Der Mauszeiger wird zur blinkenden Sanduhr aber die Position des Motors verändert sich nich. Einzige Abhilfe : Neustart des gesamten Programms. Dummerweise ist das gestern Nacht sogar während eines Areascans passiert! Das Programm hat mitten im Scan gestoppt, da es anscheinend den nächsten 2Theta-wert nicht anfahren konnte.
    Ein viel dringenderes Problem ist das des Stehenbleibens eines Motors während eines Scans, weil die nächste Position nicht angefahren werden kann. Wir haben es inzwischen 3x versucht bei der derzeitigen Probe einen Scan über einen symetrischen Reflex zu fahren und immer bleibt das System irgendwann stehen. Und zwar immer an einer anderen Stelle. Ich schicke euch nachher noch eine Mail mit der Hardware.ini .
    Also wir haben folgende Werte für den Areascan eingestellt:
    aktuelle Positionen : omega= 29.7894
                          2Theta= 61.225
    
    Es werden KEINE Offset verwendet.
    
    Areascan : Omega,min : -0.6
               Omega,max :  0.6
               Omega,step:  0.004
    
               2Theta,min: -1.2
               2Theta,step: 0.03
               Relation:    2
               Window:      4.2
      
               Time/step:   1s
    
    Der Scan wird mit einem 0-dim. Detektor gefahren.
    Das Stehenbleiben erfolgt immer bei einem 2Theta-scan,
    d.h das Programm hat irgendwann Probleme die
    2Theta-Achse zu bewegen. Allerdings tritt das Problem
    NICHT immer an der selben Stelle im Areascan auf.
    
    Merkwürdigerweise lief ein Testscan, den ich zwischen
    den 3Versuchen durchführte ohne Probleme zu Ende.
    Dabei waren folgende Werte modifiziert:
    
    Omega,step: 0,01
    
    2Theta-window: 2.1
    

    Ursache: Dieser Fehler ließ sich bisher von uns mithilfe der simulierten Hardware nicht reproduzieren. Einen Fehler durch die Diffr.-Erweiterungen möchten wir ausschließen, da dieses Problem (laut T.Panzner) auch in der ursprünglichen Programmversion auftrat (allerdings nicht so häufig). Wir vermuten, daß die Ursache bei der Implementation der Motorschnittstellenkarte (C832) liegt, da dieser Fehler (laut T.Panzner) auch im Dialog der manuellen Justage auftritt ohne das vorher ein Scan gefahren wurde. Da die manuelle Justage von der Diff./Refl.- Komponente unabhängig ist, ist der Fehler unserer Meinung nach auf eine Komponente, die von der Diffr./Refl. und der man. Justage benutzt wird, zurückzuführen (Motorkomponente). Da dieser Fehler scheinbar nur bei den Motoren Omega und Theta aufzutritt, könnte die Ursache bei C832 liegen (Omega und Theta sind einzige Motoren an dieser Karte laut ini-file des Laborrechners).
    Behebung:
    61 17.11.2001 1ST T.Panzner Charakterisierung: Die Kalibrieren des Psd liefert neuerdings einen negativen Winkel/Kanal-Wert. Der Vorgang wurde durchgeführt wie immer. Der Wert scheint dem Betrag nach korrekt zu sein (ist nur negativ).
    Ursache: Der Fehler ließ sich mit simulierter Hardware nicht reproduzieren. Könnte eventuelle an den Motoren oder Hardware.ini liegen. Zu dieser Vermutung sind wir gelangt, da die Art der Berechnung bei der Psd-kalibrierung immer noch die ursprüngliche ist(diese hat früher scheinbar richtig funktioniert).
    Rechenvorschrift:
    Winkel/Kanal = (Left.Winkel-Right.Winkel)/(Right.Kanal-Left.Kanal)*(umrechnungsfaktor)
    wobei Left.Winkel die Thetaposition bezeichnet bei welcher der Peak am linken Fensterrand lag und Left.Kanal die Nummer des Kanals des Psd angibt, auf der dieser Peak lag (analog Right->rechts).
    Der umrechnungsfaktor ist eine konstante, die von der Thetawinkeleinheit abhänig ist. Bsp. Grad->3600;Minute->60;...

    Da der Ablauf der Kalibrierung von uns nicht geändert wurde, vermuten wir das vielleicht der Thetamotor die inversen Winkel geliefert hat. Das würde das Ergebniss und könnte eventuell auch den Fehler62 erklären.
    Behebung: ...
    62 14.11.2001 1ST T.Panzner Charakterisierung:(von T.Panzner) Nach einem Areascan in den letzten Tagen trat folgendes Problem auf: Vor dem Scan waren die Werte für Omega und 2Theta : 29.6° bzw. 61° . Während des Areascan wurden diese Werte vom Program relativ null gesetzt. Nach dem Scan wurden diese Werte aber auf -29.6° beziehungsweise -61° (!!!) gesetzt. Aus irgendeinem Grund wurden die Werte mit -1 multipliziert! Abhilfe war hier nur durch das setzen der richtigen Werte in der Hardware.ini für die Encoderpositionen zu erreichen.
    Ursache: Der Fehler ließ sich mit simulierter Hardware nicht reproduzieren. Könnte eventuelle an den Motoren liegen.(siehe Fehler61)
    Behebung: ...
    63 14.11.2001
    27.11.2001
    1ST
    FIX
    T.Panzner
    Diffr.-gruppe
    Charakterisierung: Bei einem Areascan mit 0-dimensionalem Detektor (SLD) ist es nicht möglich eine korrekte RL-Bitmap zu erhalten(nur in Sonderfällen).
    Ursache: Beim Sld-scan wird automatisch (ohne zu fragen) beim Starten des Scans die aktuelle Position relativ Null gesetzt. Dies hat zur Folge, das alle Winkelwerte die während des Scans anfallen auch nur relative Werte sind. In der RL-Bitmap sind aber die absoluten Winkelwerte für eine korrekte Darstellung nötig.
    Behebung: In der Datei m_arscan.cpp in der Methode InitializeTask() das automatische Setzen der relativen Null entfernen.
    Diese Art der Behebung wurde mit T.Panzner abgesprochen.
    64 20.02.2002 1ST hanisch Charakterisierung: Dialog "PSD Kalibrierung" lässt sich nur durch zweimaliges Anklicken des Buttons "Beenden" schließen.
    Ursache: Die Ereignisse "Beenden gedrückt" und "Eingabe eines Wertes für Winkel2Theta mit abschließendem Enter", werden über die selbe Methode TCalibratePsd::OnIDOK() behandelt. Die Dialogbox schließt erst nach zweimaligen Aufruf dieser Methode, ohne zwischenzeitlicher Wertänderung bei "Winkel2Theta".
    Behebung: ...
    65 24.06.2003 1ST;
    AEN
    sacklows;
    kullmann,
    reinecke
    Charakterisierung:
    Bei relativen Winkeln für Omega und Theta wurde die Meldung 'Omega ist relativ! Relativen Winkel auslassen?' ausgegeben. Sinnvoller ist ''Omega ist relativ! Offset berücksichtigen?'.
    Behebung:
    Die Meldungen (szMsgLine006 und szMsgLine007) wurden umdefiniert; die Ja/Nein-Bedeutung der Schaltflächen 'Yes'/ 'No' wurde getauscht.
    66 24.06.2003 1ST;
    FIX
    sacklows;
    kullmann,
    reinecke
    Charakterisierung:
    Bei relativen Winkeln für Theta wurde in der psd-/ Ergebnisdatei und im Koordinatensystem absolute Werte angezeigt.
    Ursache:
    Fasst bei jeder Scanart wurde beim Auslesen des Theta-Winkels das Offset subtrahiert. Damit waren die Angaben wieder absolut, trotz relativem Winkel..
    Behebung:
    Der einzige wirkliche Schreibzugriff (in Methode TAreaScan::InitializeTask) schreibt nun 0.0 in dThetaOffset (unabhängig davon, ob ein Offset definiert ist oder nicht).
    67 24.06.2003 1ST sacklows Charakterisierung:
    Die in der psd-/ Ergebnisdatei und im Koordinatensystem angezeigten Messwerte des Braun-PSD sind um den Faktor 16.777.216 (also 2 exp 24) zu groß.
    Behebung:
    ...
    70 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Wenn man eine Kurve bzw. einen Datensätz im speicher hat und anschließend einen neuen scan bzw. areascan startet (mit der option Kontinuierlich speichern) so werden in der Datei beide Kurven bzw. datensätze abgelegt . Dies kann dazu führen, daß beim Nachladen einer solchen Datei völlig falsche Kurven entstehen. Bei Areascan kann es sogar zum Absturz kommen. 
    Ursache: Beim eingeben des neuen Dateinamen für den neuen Scan wird die aktuell im speicher vorhandene Kurve bzw. Datenbasis in diese Datei gespeichert und während des Scans werden immer nur die neuen Punkte bzw. Kurven an die vorhandenen Daten der Datei angehängt. 
    Behebung: In m_scan.cpp und m_arscan.cpp in der jeweiligen InitializeTask() kurz vor den Aufruf der SaveFile()-Funktion den Befehl MainCurce->New() bzw. lpDBase->New() einfügen.
    71 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Eine gleichzeitige Auswahl von Bei beenden speichern und Kontinuierlich sichern ist zwar in der dialogbox möglich aber es wird immer nur eine datei angelegt. (es gibt zwei möglichkeiten für eine Lösung zum einen können 2 Dateien angelegt werden oder wie von den Physikern gewollt ist ein "exclusiv oder" schon für die dialogbox ) 
    Ursache:
    Behebung: (exclusiv oder) in m_scan.cpp bzw. m_arscan.cpp in der TSetupStepScan::Dlg_OnCommand() bzw. TSetupAreaScan::Dlg_OnCommand() jeweils die Zeilen:
          case id_SaveContinuous: CheckDlgButton(GetHandle(),id_SaveOnReady,FALSE);
                                  break;
          case id_SaveOnReady:    CheckDlgButton(GetHandle(),id_SaveContinuous,FALSE);
                                  break;
    72 21.11.2000 
    21.05.2001
    06.07.2001
    1ST 
    FIX
    FIX2
    Diffr.-gruppe Charakterisierung: Wird ein laufender Scan bzw. Areascan unterbrochen und nun die Motorposition z.B. per manueller Justage geändert, und wird nun der Scan fortgesetzt so führt das zu falschen Werten (=> falsche Darstellung).
    Ursache:
    Behebung: bei Interrupt die aktuelle Position speichern und bei Scan fortsetzen erst auf diese Position zurückfahren. Dazu:
    in m_steerg.h die neue Variablen bRestart in der Klasse TCmd als protected deklarieren
    in m_steerg.cpp in TSteering::ToggleInterrupt() in den if ( bInterrupt ) - Zweig einfügen:
    	 TheCmd->bRestart=TRUE;
    und
    switch(TheCmd->GetId()){
       case Scan:
       case AreaScan:
       mlSetAxis(nMotor= nOldMotor);//! FIX Fehler 79
       DeviceRequest();
       break;
       default:
       Device->MeasureStart();
       };
    in TScanCmd und TAreaScanCmd konstruktor jeweils die Zeile
    bRestart=FALSE;
    einfügen.
    in TScanCmd::ControlStep() existierende Motorsteuerung bei bRestart=False beibehalten ansonsten folgende Zeilen ausführen:
     bRestart = FALSE;
     StartMove( nMotor, dArgument );
     if ( bOmega2Theta)
       StartMove( nTheta, dArgument * dMoveRelation );
     return CRecall;
    
    analog in TAreaScanCmd::ControlStep()
       bRestart=FALSE;
       StartMove( nOmega, dOmega );
       StartMove( nTheta, dTheta );
       return CRecall;
    
    73 21.11.2000 
    21.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Es sind nicht von allen Dialogboxen, Fehlermeldungen, Infodialogen und Statusleistentexten die engl. und die deutsche Version vorfügbar. Von einigen sind nur deutsche (z.B. Dialogboxen) , andere (z.B. Fehlermeldungen) sind wiederum nur in englischer Sprache vorhanden. 
    Ursache:
    Behebung: die Message_Liste in m_arscan.cpp erweitern, so daß zu jeder Meldung jeweils eine deutsche und eine englische Meldung existiert
    eine solche Liste in m_scan.cpp einführen und die Meldungen aus den Quellen dort hinzufügen sowie ebenfalls fehlende deutsche bzw. englische Kommentare ergänzen
    zu den Dialogboxen ChooseScan und CalibratePsd die entsprechende englisch-sprachige Dialogbox in den Resourcen hinzufügen und in den Konstruktoren der jeweiligen Klasse den Aufruf der Dialogbox von der gewählten Sprache abhängig machen, z.B beim Choose-Scan-Dialog:
    	#ifdef GermanVersion
    	TChooseScan::TChooseScan( TAreaScan* ascan ) : TModelessDlg( "ChooseScan" )
    	#else
    	TChooseScan::TChooseScan( TAreaScan* ascan ) : TModelessDlg( "ChooseScanEng" )
    	#endif
    
    74 15.01.2001 
    21.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Es ist möglich einen Scan zu starten, auch wenn z.B. kein Thetamotor verfügbar ist.(bei Omega2Thetamodus)
    Ursache: ungenügende Tests der verfügbaren Hardware
    Behebung:in m_arscan.cpp in InitializeTask() in case cm_SetupAreaScan einfügen:
            if (!mlIsAxisValid (Omega))||
              	((!mlIsAxisValid(Theta)&&!dlIsDeviceValid(PsdDevice))))
              {
              MessageBox(GetFocus(),"Hardware ist nicht vollst&aauml;ndig verfügbar!",szMsgFailure,MBINFO);
              break;
              } 
    
    wenn kein Thetamotor verügbar ist, ist nur ein StandardScan möglich, dazu in TSetupAreaScan::Dlg_OnInit() einfügen:
            if(!mlIsAxisValid(Theta))
    	      Scan->eScanType=StandardScan;
    
    wenn kein Thetamotor verfügbar ist, kann nur ein Psd-Detektor ausgewählt werden
    in TSetupAreaScan::Dlg_OnCommand() ist unter id_ChooseDevice und case CBN_SELCHANGE die Zeile
                 Scan->eScanType = Omega2ThetaScan;
    
    zu ersetzen durch:
                 if(!mlIsAxisValid(Theta) && !Scan->bPsdDevice)
                  {
                  Scan->SetDevice( dlGetIdByName(PsdDevice));
                  Device= lpDList->DP(dlGetIdByName(PsdDevice));
                  ComboBox_SelectString( hDeviceList, 0, Device->Characteristic );
                  }
                 else
                  if( Scan->bPsdDevice)
                   Scan->eScanType = StandardScan;
                  else
                   Scan->eScanType = Omega2ThetaScan;
    
    die Checkbox Fix Theta Axis ist immer "Checked", wenn kein Thetamotor verfügbar ist
    unter case id_FixThetaAxis ist dazu noch der folgende Eintrag zu ergänzen:
          if (!mlIsAxisValid(Theta))
    	   CheckDlgButton(GetHandle(),id_FixThetaAxis,TRUE);
    
    75 27.04.2001 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Eine Fehler in der Programmierung in TScanCmd:ControlStep() kann dazu führen, das der zulässige Winkelbereich überschritten wird.
    Ursache: in TScanCmd:ControlStep() if (Steering.GetDistance()<= dArgumentMax) ... (aufgrund der nicht exakten Motorposition(z.B: 6,00002 statt 6,00000 kommt es selten dazu)
    Behebung: <= durch < ersetzen
    76 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: die Meldung, daß der Scan gespeichert wurde erfolgt nur bei Speicheroption Bei Beenden speichern , aber nicht bei der Option Kontinuierlich Speichern
    Ursache: in SteeringReady 
    Behebung: zusätzlichen Ausgabetext für die deutsche und die englische Version einfügen 
    77 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Bei LineScan und AreaScan kann ein Scan gestartet werden, bevor der Einstellungsdialog einmal aufgerufen wurde. 
    Ursache: in m_scan.cpp in der Funktion rButtonDown() sind if-ausdrücke falsch miteinander verknüpft 
    Behebung: bScanSetupOk als globale Variable entfernt und als private-Attribut in die Klassen TScan und TAreaScan eingefügt
    im jeweiligen Konstruktor auf FALSE setzen
    in den Methoden InitializeDlg() auf TRUE setzen
    in rButtonDown muß es heißen 
    if ((bMeasurementActive&& !bInterrupt)|| !bScanSetupOK) ...
    78 21.11.2000 
    11.05.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: bei laufenden Scan mit Option Kontinuierlich Speichern darf nicht Speichern unter aufgerufen werden 
    Ursache: ... 
    Behebung: in m_main.cpp in UpdateMenu() eingefügt:
      if (bMeasurementActive)
      {
        EnableMenuItem(hMenu,cm_Save,MF_GRAYED);
        EnableMenuItem(hMenu,cm_SaveAs,MF_GRAYED);
      }
      else
      {
        EnableMenuItem(hMenu,cm_Save,MF_ENABLED);
        EnableMenuItem(hMenu,cm_SaveAs,MF_ENABLED);
      }
    
    weiterhin in SteeringReady() sowie in TMDIWindow::New() jeweils UpdateMenu() einfügen
    79 06.07.2001 
    06.07.2001
    1ST 
    FIX
    Diffr.-gruppe Charakterisierung: Wenn man einen laufenden StepScan oder AreaScan unterbricht und anschließend per man. Justage einen Motor bewegt, so wird nach dem Fortsetzen des Scans statt mit dem ursprünglichen der zuletzt ausgewählte weiterbewegt.
    Ursache:
    Behebung: teilweise siehe Behebung Fehler 72
    in Steering.ToggleInterrupt() den Wert von nMotor(Motor des Scans) sichern und bei fortsetzung den ursprünglichen Motor wieder setzen
    80 11.07.2001 
    30.07.2001
    1ST 
    FIX
    Frau Richter
    Diffr.-gruppe
    Charakterisierung: Nachdem ein Scan durchgeführt wurde, kann man die Kurvendaten nicht speichern.
    Ursache: Die Bezeichnung der Menüpunkte im LineScanfenster- bzw. AreaScanfenstermenü sind irreführend. Es kann vermutet werden, das man über den Menüpunkt "Scan"->"speichern" die gerade gemessene und aktuell dargestellte Kurve abspeichern kann. In Wirklichkeit kann man über diesen Menüpunkt nur fixierte Scans speichern.
    Behebung: Durch Ausgrauen und Umbenennen der Menüpunkte in Abhängigkeit davon, ob eine Kurve fixiert ist oder nicht werden die Untermenüpunkte von "Scan" aktiviert bzw. deaktiviert sowie der Menüpunkt "Scan" in "fixierten Scan" umbenannt.
    in m_scan.cpp in TScan::rButtonDown()
    if (1>SecondCurve->GetPNumber())
          {
    		   EnableMenuItem( TheMenu, cm_FreezeCurve, MF_ENABLED );
         	 EnableMenuItem( TheMenu, cm_SaveSecondCurve, MF_GRAYED );
        	 EnableMenuItem( TheMenu, cm_KillSecondCurve, MF_GRAYED );
           ModifyMenu( TheMenu, 5, MF_STRING|MF_BYPOSITION,5,"Scan" );
          }
          else
          {
    		   EnableMenuItem( TheMenu, cm_FreezeCurve, MF_GRAYED );
         	 EnableMenuItem( TheMenu, cm_SaveSecondCurve, MF_ENABLED );
        	 EnableMenuItem( TheMenu, cm_KillSecondCurve, MF_ENABLED );
           ModifyMenu( TheMenu, 5, MF_STRING|MF_BYPOSITION,5,"fixierten Scan" );
          }
    
    in m_arscan.cpp ähnlich

    in m_data.cpp gleich noch kleinen fehler mitbehoben
    neue TPlotData::FreezeCurve
    void TPlotData::FreezeCurve(void)
    //! speichert Objektzustand von MainCurve in SecondCurve
    {
        if(1> MainCurve->GetPNumber())
          return ;
        *SecondCurve = *MainCurve;
    };
    
    81 21.11.2001 1ST Diffr.-gruppe Charakterisierung: Wird während eines laufenden Linescans das Areascanfenster geschlossen(oder umgekehrt), so bricht der laufende Scan ohne eine Meldung ab.
    Ursache: Im Destruktor von TAreaScan ( bzw. TScan) bewirken folgende Befehle
    	 Device->MeasureStop();
    	 Device->SetHost( NULL );
    
    das keine Werte mehr beim Fenster des laufenden Scans ankommen.
    Behebung: Diese Befehle entfernen (eventuell eine Überprüfung ob gerade ein Scan läuft einfügen).
    82 23.04.2003  1ST 
    FIX
    sacklows
    kullmann,
    reinecker
    Charakterisierung: Wenn man das LineScan-Fensters aufruft und schließt; das AreaScan-Fenster aufruft und schließt; das LineScan-Fenster erneut aufruft und schließt und abschließend das AreaScan-Fenster erneut aufzurufen versucht, stützt das Programm ab.
    Ursache: Das Speichermanagment, dynamisch verwaltete Speicherstrukturen werden mehrfach versucht freizugeben. 
    Behebung: Speichermanagment komplett analysiert, überprüft und korrigiert.
    83 23.04.2003  1ST 
    FIX
    sacklows
    kullmann,
    reinecker
    Charakterisierung: Wenn man das LineScan-Fensters öfter aufruft und schließt, stützt das Programm sporadisch ab.
    Ursache: Das Speichermanagment, dynamisch verwaltete Speicherstrukturen werden mehrfach versucht freizugeben. 
    Behebung: Speichermanagment komplett analysiert, überprüft und korrigiert.
    84 21.11.2000  1ST  Diffr.-gruppe Charakterisierung:
    Ursache: ... 
    Behebung: ...