Step 7 Vorzeichen fest vorgeben

Zuviel Werbung?
-> Hier kostenlos registrieren
ok, aber ABS sollte auch bei REAL-Zahlen funktionieren. Dann statt NEGI halt

Code:
L -1.0
*R
Mein roter Kommentar wird nicht erfüllt oder?

#Zahl1
L #Zahl2
*R
L 0.000000e+000
<R
L #Zahl 2
ABS
L -1
*R
T #Zahl3 -> Zahl 3 muss immer - sein, wenn Zahl 2 - oder + ist!
SPB END // Wenn kleiner 0, dann nicht transferieren
L #Zahl2
ABS
T #Zahl3 -> Zahl 3 muss immer + sein, wenn Zahl 2 - oder + ist!
END: NOP 0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mein roter Kommentar wird nicht erfüllt oder?
Eigentlich doch. Durch das ABS wird der Wert der Zahl immer positiv.

Bei -> Zahl 3 muss immer - sein, wenn Zahl 2 - oder + ist! wird die Zahl durch ABS und L -1 *R (oder NEGR) immer negativ.
Bei
-> Zahl 3 muss immer + sein, wenn Zahl 2 - oder + ist! wird die Zahl durch ABS immer positiv.
#Zahl1
L #Zahl2
*R
L 0.000000e+000
<R
L #Zahl 2
ABS
L -1
*R
T #Zahl3 -> Zahl 3 muss immer - sein, wenn Zahl 2 - oder + ist!
SPB END // Wenn kleiner 0, dann nicht transferieren
L #Zahl2
ABS
T #Zahl3 -> Zahl 3 muss immer + sein, wenn Zahl 2 - oder + ist!
END: NOP 0


Allerdings ist die Lösung von @PN/DP viel eleganter...
 
Ich Dank euch allen für die tollen Lösungen.
Ich probiers aus, Befehl ABS konnte ich nicht. Wenn durch ABS alles positiv wird, auch wenn es vorher positiv oder netativ war, sollte es funktionieren.

Nun noch die Erklärung für was ich das brauche.
SEW Movidrive übermittelt den Wirkstrom über Profibus zur SPS.
Der Wirkstrom ist negativ oder positiv. Anhand des Vorzeichen kann man aber nicht sagen, ob der FU generatorisch ist oder antreibt. Dies ist nämlich von der Drehzahl abhängig.
Drehzahl negativ (Zahl 1) und Wirkstrom positiv (Zahl 2) = generatorisch
Drehzahl negativ (Zahl 1) und Wirkstrom negativ (Zahl 2) = Motor wird bestromt
Dito bei Drehzahl positiv

Wenn man jetzt auf der Visu den Wirkstrom (Zahl 2) anschaut, glaubt man dass der Motor generatorisch wird wenn eine negative Zahl erscheint, was nicht der Fall ist. Mit eurer Lösung wäre das behoben.
 
:unsure:
So müsste es doch dann auch gehen:
Code:
      L    #r1      // Real-Zahl 1 laden
      L    #r2      // Real-Zahl 2 laden
      *R            // Realzahlen multiplizieren
      SPZ  RSLT     // Ergebnis = 0 (bereits im Akku1)
      TAK           // Akkus tauschen (#r2 wieder in Akku1)
      ABS           // Absolutwert von #r2
      SPP  RSLT     // Rechenergebnis >0? (= #r3 positiv lassen)
      NEGR          // Realzahl im Akku1 negieren
RSLT: T    #r3      // Ergebnis speichern
oder?
 
:unsure:
Ich bin mir mit meiner Überlegung nicht zu 100% sicher, weil ich AWL nur noch am Rande mitbekommen habe.
Wenn ich Harald da von 0.0 und -0.0 schreiben sehe, könnte es da schon noch Fallstricke geben, die ich nicht bedacht habe.
Harald bezieht sich bei -0,0 bestimmt auf die Rundungsfehler


 
Zuviel Werbung?
-> Hier kostenlos registrieren
:unsure:

🤷‍♂️
Ich rechne (fast) immer nur mit Ganzzahlen, weil:
Gleitpunkt wird in meinen Augen total überbewertet. Wenn man Nachkommastellen braucht, kann man vorher auch das Komma entsprechend verschieben.
(Das Komma ist dann nur virtuell auf der Anzeige an entsprechender Stelle.)

PS:
Ich vermute mal, dass man hier auch eigentlich Ganzzahlen vom SEW bekommt:
SEW Movidrive übermittelt den Wirkstrom über Profibus zur SPS.
Der Wirkstrom ist negativ oder positiv.
die man IMHO viel besser weiter verarbeiten könnte und (wenn überhaupt) erst zum Schluss in Gleitpunkt wandeln sollte.
 
Zuletzt bearbeitet:
Stimmt, SEW liefert Ganzzahl die dann in eine Gleitpunktzahl gewandelt wird und dann in Visu als kommazahl angezeigt wird.
Ändert das was im letzten AWL Code?
 
SEW liefert Ganzzahl die dann in eine Gleitpunktzahl gewandelt wird
Und warum, also welchen Vorteil erhoffst Du Dir davon?

HMI's können das Komma auch virtuell an die richtige Stelle setzen.
Und (32Bit-) Ganzzahlen sind genauer als (32Bit-) Gleitpunkt, weil keine Bits für das Merken der Kommaverschiebung "verschwendet" werden.
🤷‍♂️
 
Wie würde der AWL Code dann aussehen?
Im Prinzip bei den Operationen, wo ein R für Real angegeben wird, z.B. ein I für INT oder D für DINT verwenden (Ausnahmen bestätigen vermutlich die Regel).

Dafür musst Du Dir natürlich selber Gedanken machen, ob z.B. durch die Multiplikation eventuell Bereichsgrenzen überschritten werden könnten.
Wie immer, wo Vorteile sind gibt's garantiert auch Nachteile.


PS:
Welchen Ganzzahltyp bekommst Du denn vom SEW?
Und in welchem Wertebereich sind diese?
 
Zuletzt bearbeitet:
Mit der Belegung eines Prozess-Eingangsdatenwortes mit
WIRKSTROM liefert der Antriebsumrichter den aktuellen
Wirkstrom-Istwert mit der Einheit % In an das übergeordnete
Automatisierungssystem zurück.
1 digit = 0.1 % INennstrom

Integer 16bit
1 digit = 0.1 % IN Nennstrom des Antriebsumrichters
-3276.8% .... 0 ..... +3276.7%
8000hex .... 0 ..... 7FFFhex
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit der Belegung eines Prozess-Eingangsdatenwortes mit
WIRKSTROM liefert der Antriebsumrichter den aktuellen
Wirkstrom-Istwert mit der Einheit % In an das übergeordnete
Automatisierungssystem zurück.
1 digit = 0.1 % INennstrom
Also vermutlich INT als Eingang mit Werten von 0-1000 (100,0%), oder?

Ist die 2. Realzahl noch die % oder schon der Strom?
Wie groß sind die 100% Nennstrom in die das gewandelt wird?

Wie kommt die Drehzahl rein und in welchem Bereich bewegt die sich?
 
Zurück
Oben