Aber es gibt in der S7 sicher elegantere Wege wie man das machen kann, gibt denke ich sogar Befehle für wandeln nach Zweierkomplement.
In S7 gibt es in AWL Befehle für das Umkehren des Vorzeichens: NEGI für INT (16 Bit) und NEGD für DINT (32 Bit).
Für LINT (64 Bit) ist mir in AWL bisher noch nichts untergekommen (und ich werde es auch nicht vermissen).
Übrigens:
die Befehle NEGI und NEGD wandeln nicht "nach Zweierkomplement", sondern negieren (invertieren) das Vorzeichen einer Variablen, die definitionsgemäss die ZweierkomplementDarstellung benutzt (SINT, INT, DINT, LINT, ...).
Gibt es auch Befehle für die (RückUm-)Wandlung einer negativen Zahl in ZweierKomplementDarstellung in eine positive Zahl?
Klares "jain". Gibt es: NEGI und NEGD, die ja beide das Vorzeichen einer Zahl in ZweierKomplementDarstellung wechseln. Eigene Befehle für die RückUmwandlung gibt es natürlich nicht.
Man könnte jetzt manuell das Vorzeichenbit aus-maskieren, wandeln und dann irgendwo mal -1 rechnen... Siehe Screenshot.
Wie bereits erwähnt, kann man in SCL, ST, FUP, KOP ohne spezielle Befehle das Vorzeichen durch Multiplikation ( X := X * -1 ; ) mit -1 umkehren.
Wie noch nicht erwähnt, kann man in SCL, ST, FUP, KOP ohne spezielle Befehle das Vorzeichen durch Subtraktion ( X := 0 - X ; ) einer Zahl von 0 umkehren. (Eine Subtraktion sollte theoretisch schneller sein als eine Multiplikation)
Wie ebenfalls noch nicht erwähnt, geht es aber auch noch einfacher ohne Multiplikation und ohne Subtraktion, da man "direkt" negieren kann:
X := -X ;