|
Registriert seit: 2. Feb 2021 3 Beiträge Delphi 10.4 Sydney |
#1
Hi Guy's
wer kann helfen, bei "JL @ELSE_b" wird falsch ausgwertet, warum ? thanks.
Delphi-Quellcode:
procedure TFanucForm.NC_programm;
const hundert: double = 100; halbieren_asm: double = 2; var nZaehler : integer; int : ^integer; liste : TStringList; D_Ist : double; D_von : double; D_bis : double; AP : double; ersteRate : double; Rate : double; H : double; apX : double; apMin : double; Summe : double; ergebnis_asm: double; begin int := @nZaehler; Abbruch := false; nZaehler := 0; H := 0; apX := 0; D_Ist := 0; Summe := 0; try D_von := StrToFloat(EditTextToString(MinEdit).Replace(#46, #44)); D_bis := StrToFloat(EditTextToString(MaxEdit).Replace(#46, #44)); AP := StrToFloat(EditTextToString(APEdit).Replace(#46, #44)); ersteRate := StrToFloat(EditTextToString(ersteRateEdit).Replace(#46, #44)); ersteRate := ersteRate / hundert; Rate := StrToFloat(EditTextToString(RateEdit).Replace(#46, #44)); Rate := Rate / hundert; apMin := StrToFloat(EditTextToString(APMinEdit).Replace(#46, #44)); except exit; end; if not((D_bis > 0) or (D_von > 0)) then exit else if (D_von = D_bis) then exit else if not(AP > 0) then begin ShowMessage('Schnitttiefe <ap> kann nicht berechnet werden.'); exit; end else if not(apMin > 0) then begin ShowMessage('mind. Schnitttiefe <apMin> kann nicht berechnet werden.'); exit; end else if (AP < apMin) then begin ShowMessage('Schnitttiefe <ap> kleiner als mind. Schnitttiefe <apMin>.'); exit; end else if not(Rate > 0) then begin ShowMessage('Zustellung Rate <%> kann nicht berechnet werden.'); exit; end else if not(ersteRate > 0) then begin ShowMessage('1. Zustellung Rate <&> kann nicht berechnet werden.'); exit; end; if (D_bis > D_von) then bearbeitung.innen := true; if (D_von > D_bis) then bearbeitung.aussen := true; liste := TStringList.Create; SetLength( data1, 3); repeat case (bearbeitung.innen) of true: begin case (int^) of 0: begin asm INC nZaehler JMP @START @START: FLD D_bis // ST(0) = D_bis FSUB D_von // ST(0) = ST(0) - D_von FDIV halbieren_asm // ST(0) = ST(0) / 2 FSTP H // ST(0) zurückschreiben auf Variable: H FLD AP FMUL ersteRate FSTP apX FLD apX FMUL halbieren_asm FADD D_von FSTP D_Ist FLD Summe FADD apX FSTP Summe end; { Inc(nZaehler); H := (D_bis - D_von) / 2; apX := AP * (ersteRate / hundert); D_Ist := D_von + (2 * apX); Summe := Summe + apX; } data1[0] := int^; data1[1] := apX; data1[2] := D_Ist; liste.ADD(SetStringFormat(data1)); end; else begin asm INC nZaehler JMP @START @START: FLD apX FMUL Rate FCOM apMin // vergleiche, ST(0) : apMin JG @ELSE_a // wenn größer, springe FLD apMin FSTP apX JMP @END_a @ELSE_a: FLD apX FMUL Rate FSTP apX JMP @END_a @END_a: FLD Summe FADD apX FCOM H JL @ELSE_b // wenn kleiner, springe: Abfrage wird falsch ausgewertet !?! FLD H FSUB Summe FSTP apX JMP @END_b @ELSE_b: JMP @END_b @END_b: FLD apX FMUL halbieren_asm FADD D_Ist FSTP D_Ist FLD Summe FADD apX FSTP Summe end; { if ((apX * (Rate / hundert)) < apMin) then begin apX := apMin; end else begin apX := apX * (Rate / hundert); end; if ((Summe + apX) > H) then apX := H - Summe; D_Ist := D_Ist + (2 * apX); Summe := Summe + apX; } data1[0] := int^; data1[1] := apX; data1[2] := D_Ist; liste.ADD(SetStringFormat(data1)); end; end; end; end; case (bearbeitung.aussen) of true: begin case (int^) of 0: begin INC(nZaehler); H := (D_von - D_bis) / 2; apX := AP * (ersteRate / hundert); D_Ist := D_von - (2 * apX); Summe := Summe + apX; data1[0] := int^; data1[1] := apX; data1[2] := D_Ist; liste.ADD(SetStringFormat(data1)); end; else begin INC(nZaehler); if ((apX * (Rate / hundert)) < apMin) then begin apX := apMin; end else begin apX := apX * (Rate / hundert); end; if ((Summe + apX) > H) then apX := H - Summe; D_Ist := D_Ist - (2 * apX); Summe := Summe + apX; data1[0] := int^; data1[1] := apX; data1[2] := D_Ist; liste.ADD(SetStringFormat(data1)); end; end; end; end; until (Summe >= H); FProgressBarMax := int^; DataProgressBarComponent( true, clRed, FProgressBarMax); SetFormControl(true); for nZaehler := 1 to (liste.Count) do begin BerechnungProgressBar.Position := int^; self.Caption := String.Format('%s [%d %%]', [FFormCaption, ProzentProgressbar(nZaehler, FProgressBarMax)]); BerechnungListBox.AddItem( liste[int^ - 1], BerechnungListBox); WriteZählerEdit(int^.ToString); if (THoistThread(DataFanucThread).Terminated) then begin AbbruchRoutine(Abbruch); break; end else begin BerechnungListBox.Perform( WM_VSCROLL, SB_BOTTOM, 0); // Botschaft direkt an die Fensterprozedur des Steuerelements senden Application.ProcessMessages; end; end; if not(Abbruch) then begin SetFormControl(false); DataProgressBarComponent(false); end; liste.Free; SetLength( data1, 0); end;
Andreas
|
Zitat |
Ansicht |
Linear-Darstellung |
Zur Hybrid-Darstellung wechseln |
Zur Baum-Darstellung wechseln |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
LinkBack URL |
About LinkBacks |