Step 7 Wertezuweisung

MadMa

Level-1
Beiträge
16
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Community,

ich habe Jahrelang mit C++ Programmiert und viel mit Arduino herum experimentiert.
Jetzt will ich mich Hobby bedingt etwas in SPS einarbeiten.

Leider ähneln sich C++ und AWL nicht all zu sehr...

Ich hänge gerade an dem Thema "Wertezuweisen" .

Ich habe einen Wert -100000. Diesen wert möchte ich in ein ARRAY of DINT ablegen.
Die Lösung lautet:

L L#-100000
T DB38.MeaV[9]

Meine Frage ist, warum schreibe ich bei dem Load-befehl zwei mal ein L. Also wozu benötige ich des L vor dem #? In der Lösung wird noch erwähnt, weil "L" DINT ist und nicht INT... damit kann ich leider nichts anfangen. DINT ist doch das gleiche nur 32Bit oder?

Danke schonmal für eure Hilfe!!!

Liebe Grüße
Max
 
Hallo Madma

das L steht für Long weil ein int ein Vorzeichen Bit hat und du der SPS mitteilen musst wo dieses ist das sie deine Werte richtig interpretieren kann.

Mit freundlichen Grüßen tia
 
Danke für die schnellen Antworten!
Was meinst du mit einer anderen Stelle? Das vorzeichnen wird doch immer über das "vorderste" Bit festgelegt oder?
 
Bei Negativ-Werten kommt ja auch noch die andere Bedeutung des Negativ-Bits hinzu:
16 Bit = Wert der 15 Bits - 32.768
32 Bit = Wert der 31 Bits - 2.147.483.648

Dadurch müssen mehr führende Stellen mit 1 aufgefüllt werden.
Beispiel Dezimal -10.000 als INT oder DINT:
Code:
INT:                        1101 1000 1111 0000
DINT: 1111 1111  1111 1111  1101 1000 1111 0000
 
L# ist ein Datentyp-Qualifizierer ähnlich dem Typecast in C, es gibt auch Zahlenbasis-Qualifizierer 16#, 2#, ...
Code:
STEP7                   C
------------------------------------
   16#1234  entspricht  0x1234
 W#16#1234  entspricht  0x1234
DW#16#1234  entspricht  0x00001234
 L#-10000   entspricht  (DINT)-10000
L#... wird nötig, wenn die nachfolgende Zahl auch als 16-Bit-Zahl interpretiert werden könnte, aber die 32-Bit-Zahl gemeint ist, z.B. "L -10000" lädt 16#0000D8F0 in den AKKU1, "L L#-10000" lädt 16#FFFFD8F0 in den AKKU1

Harald
 
Viel Danke an die schnellen und hilfreichen Antworten!
Muss euch zeitnahe vllt noch paar mal nerven mit anderen Fragen...
Gruß
Max
 
Zurück
Oben