Subtraktionen ohne negatives Ergebnis?

Osi7

Level-2
Beiträge
12
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Abend,
Ich würde gerne 3 von 2 abziehen und hätte gerne als Ergebnis 0 und keine negative Zahl.

Da gibt es in Pc Worx doch sicherlich eine einfache Lösung oder?

Aktuell hab ich es mit einem GT und einem SEL gelöst, dass gefällt mir aber garnicht.
Danke
 
Es wird doch wohl in Pc-Worx eine "MAX"-Funktion geben? Eine Subtraktion 3 von 2, deren Ergebnis 0 ist, das gibt es vielleicht auf Nachfrage und gegen Aufpreis bei Phoenix :LOL:.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mir würde da jetzt das hier einfallen :
Code:
Result := 0 ;
if Var1 > Var2 Then Result := Var1 - Var2 ; End_if ;
oder
Code:
if Var1 > Var2 then
   Result := Var1 - Var2 ;
else
   Reslt := 0 ;
end_if ;
oder
Code:
Result := Var1 - Var2 ;
if Result < 0 then Result := 0 ; end_if ;
 
Ich würde es ja auch so machen wie von Larry vorgeschlagen. Das ist zumindest für andere welche mal in das Programm reinschauen einfacher lesbar.
Code:
Result := Var1 - Var2 ;
IF Result < 0 THEN
    Result := 0;
END_IF;

Ich würde gerne 3 von 2 abziehen und hätte gerne als Ergebnis 0
Ex-Deutsche-Bank Chef Hilmar Kopper hätte sicherlich die passende Peanuts-Formel gehabt.
 
Danke für die Antworten. War der Meinung das es einfacher gehen müsste.

So eine If Abfrage hab ich mir mit den GT und SEL Baustein gebastelt da ich in FBD und kein eigenes ST Blatt öffnen wollte.

Danke 👍
 
Was macht der LIMIT-Operator bei REAL-Werten, wenn man als Max-Wert einen NaN angibt (16#FFFF_FFFF)?
CODESYS macht aus dieser impliziten Konvertierung einen Wert von 4.2949673E+09. Nachdem sich Pc Worx aber vermutlich anders verhält, habe ich mir die Vertiefung für REAL-Max oder REAL-pos.-Unendlich gespart. Ich wollte primär den Weg mit LIMIT() aufzeigen.

Nur wenn man mit UNION oder Pointer ein DWORD/DINT-Speicher auf REAL uminterpretiert ergibt sich ein NaN.

Beim Lesen des ersten Hinweises auf MAX() hatte ich an den umständlichen Weg gedacht vor der Subtraktion die Eingangswerte zu analysieren. Aber beim neuerlichen Hinweis auf MAX() fällt es mir wie Schuppen von den Augen. Eindeutig die elegantere Wahl gegenüber LIMIT().
Code:
rResult := MAX(0, rVal_1 - rVal_2);
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für die ausführliche Erklärung.
Ich stimme Ihnen zu, dass die Verwendung von MAX() eine elegantere Lösung im Vergleich zu LIMIT() darstellt. Es ist weniger umständlich und reduziert die Notwendigkeit, die Eingangswerte vor der Subtraktion zu analysieren.
 
Zurück
Oben