- Beiträge
- 21.948
- Reaktionspunkte
- 7.298
-> Hier kostenlos registrieren
Hmm, den kannt ich auch noch nicht
Das sieht man auch selten. Hier kann man nachlesen ( S. 114 ):
Anhang anzeigen AWL_d.pdf
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Hmm, den kannt ich auch noch nicht
Das sieht man auch selten. Hier kann man nachlesen ( S. 114 ):
Anhang anzeigen 50354
L MD500 // DINT
L 1
+D
T MD500 // funktioniert
L MD500 // DINT
+ 1
T MD500 // funktioniert nicht
L MD500 // DINT
+ L#1
T MD500 // funktioniert
Ja, vermutlich sieht man das zu recht selten, da vermutlich jeder zweite den Fehler machen würde:
Code:L MD500 // DINT L 1 +D T MD500 // funktioniert L MD500 // DINT + 1 T MD500 // funktioniert nicht L MD500 // DINT + L#1 T MD500 // funktioniert
Gruß.
L #diVar1 // 16#0000FFFF : (65535)
[COLOR="#FF0000"]+ 1 // 16#00000000 : weil 16 Bit Addition! (nur AKKU1-L)[/COLOR]
T #diVar2 // -> [COLOR="#FF0000"]0[/COLOR]
L #diVar1 // 16#0000FFFF : (65535)
+ L#1 // 16#00010000 : weil 32 Bit Addition! (ganzer AKKU1)
T #diCount // -> 65536
L #diVar1 // 16#0000FFFF : (65535)
[COLOR="#FF8C00"]L 1 // 16#00000001 : wird als 16-Bit-Wert geladen! AKKU1-H wird auf 0 gesetzt[/COLOR]
+D // 16#00010000 : 32 Bit Addition - nochmal gut gegangen
T #diCount // -> 65536
L #diVar1 // 16#0000FFFF : (65535)
L L#1 // 16#00000001 : wird als 32-Bit-Wert geladen
+D // 16#00010000 : 32 Bit Addition
T #diCount // -> 65536
L #diVar1 // 16#0000FFFF : (65535)
[COLOR="#FF0000"]L -1 // 16#0000FFFF : wird als 16-Bit-Wert geladen! AKKU1-H wird auf 0 gesetzt - ohje![/COLOR]
+D // 16#0001FFFE : 32 Bit Addition - addiert nicht -1 sondern +65535 !!!
T #diVar2 // -> [COLOR="#FF0000"]131070[/COLOR]
L #diVar1 // 16#0000FFFF : (65535)
L L#-1 // 16#FFFFFFFF : wird als 32-Bit-Wert geladen :-)
+D // 16#0000FFFE : 32 Bit Addition - addiert -1
T #diVar2 // -> 65534
weitere Fehlermöglichkeiten bei +I anstatt +D !
...
Wenn man sich mit den AWL-Befehlen nicht 100% auskennt dann schreibe lieber ausführlicher so wie AWL-Code aus FUP/KOP aussieht.
Fallstricke bei simpler Addition in AWL:
Code:L #diVar1 // 16#0000FFFF : (65535) [COLOR=#FF0000]L -1 // 16#0000FFFF : wird als 16-Bit-Wert geladen! AKKU1-H wird auf 0 gesetzt - ohje![/COLOR] +D // 16#0001FFFE : 32 Bit Addition - addiert nicht -1 sondern +65535 !!! T #diVar2 // -> [COLOR=#FF0000]131070[/COLOR]
L -1
+D
L 1
-D
Habe mal versucht, mich selbst davon zu überzeugen, dass das bedingungslose Umknippsen der Bit31 beider Zahlen zum Ziel führt.Dank der Zweierkomplement-Codierung von DINT kann man "relativ" (auf dem Zahlenstrahl bzw. Zahlenkreis) rechnen: beide "UDINT"-Operanden durch Subtraktion von 16#8000'0000 in den DINT-Bereich verschieben, dann DINT-Vergleich anwenden. Subtraktion von 16#8000'0000 entspricht Invertieren des höchsten Bit .31, was man als Verschiebung/Vertauschung der Werte in den jeweils anderen Bereich (16#8000'0000 .. 16#FFFF'FFFF) und (0 .. 16#7FFF'FFFF) interpretieren kann.
Genau, Harald.Die Zweierkomplement-Darstellung war schon eine geniale Idee und wenn man sich die Zahlen auf einem Zahlenkreis vorstellt, dann ist auch leicht verständlich was man tun muß um mit DINT-Vergleich UDINT-Werte zu vergleichen.
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Siehe weitere Informationen und konfiguriere deine Einstellungen