@PN/DP
Ja, bin mir sicher, dass sie kein ABS kann. Aussage vom Hersteller. ABS für INT/WORD/DINT/DWORD gibt es nicht.
Nur für Real/Float, eingeführt vor ein paar Jahren...
Die Steuerung, bzw. der Compiler bietet einem an, Funktionen, welche man mehrmals benötig als sogenannte Makros zu schreiben und diese können dann überall mit einem kurzen Aufruf gestartet werden.
Dabei wird jedoch nicht eine Übergabe an eine Funktion ausgeführt (z.B. bei C++ oder ein FB/FC bei Siemens, welcher dann abgearbeitet wird), sondern der in dem Makro geschrieben Code einfach nur eingefügt wird.
Wenn ich z.B. eine Berechnung mehrmals machen möchte, die Formel dazu aber immer gleich ist, erstelle ich ein Makro und nutze dies dann immer.
Beispiel:
Formel: r = a + b + c + d
Makro:
Code:
#define /m Formal1(value_a,value_b,value_c,value_d,result_r)
L (value_a)
+ (value_b)
+ (value_c)
+ (value_d)
= (result_r)
Wenn ich das nun im Programm einfüge wäre das z.B. so:
Code:
Formel1(10,20,30,40,M_Ergebnis)
L M_Ergebnis
.....
Der Compiler macht danach in der fertig zu übertragenen Datei folgendes:
Code:
L 10
+ 20
+ 30
+ 40
= M_Ergebnis
L M_Ergebnis
.....
Wenn ich das nun mit einem Vergleich mache, ob eine Zahl kleiner Null ist und ich sie dann Multipliziere mit -1, dann habe ich ein IF in einem IF-Kopf:
Code:
L AABBCC
A BBCCDD
> ABS(TestZahlABS)
L TestZahlABS
< 0
IFT
L TestZahlABS
X K-1
= TestZahlABS
ENDI
IFT
BlaBlaBla
ENDI
Das funktioniert aber nicht...
Daher bin ich auf der Suche nach einer Lösung, welche nur mit + - * / zum Ergebnis kommt....