Step 7 Word in Int konvertieren

Nico_1996

Level-2
Beiträge
10
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
gibt es eine Möglichkeit den Inhalt eines als Word deklarierten Inhalt eines DB's in ein Int zu konvertieren.
Konkret geht es darum das ich einen vierstelligen zahlenwert bekomme der als Word abgespeichert ist, und ich diesen nun als Integer speichern möchte. Mir geht es darum das der Inhalt der gleiche bleibt. Das heißt im Word steht der Wert "4075". Diesen Zahlenreinfolge will ich anschließend genau so auch als int haben. Wenn ich das ganze mit move verschiebe wird das ganze in der Schreibweise umgeschrieben und der tatsächliche Inhalt bleibt der gleiche, mir geht's aber eben darum das im Int nach ebenfalls 4075 steht
 
INT ist nur eine mögliche Interpretation von WORD.
Kritisch wird es nur wenn bei dem WORD das höchstwertigste Bit gesetzt ist - dann wird dein INT-Wert negativ.
Ansonsten kannst du dein WORD einfach umcasten (WORD_to_INT).

Du kannst aber in deinem DB das WORD auch einfach zu INT umdeklarieren ...
 
Dann werde ich mal schauen müssen wie das ganze für Kop oder awl aussieht.
Oder kannst du mir da weiterhelfen?
 
Gut das reine umwandeln funktioniert, aber das Problem liegt darin das dass der Word Wert in hex Schreibweise übergeben wird und nachher der gleiche zahlenwert in dezimal Schreibweise rauskommen soll.
Da habe ich mich wohl zu ungenau bzw. falsch ausgedrückt.
 
Das kann schon sein ... Hex ist auch nur eine andere Darstellung desselben Zahlenwertes. Ich denke mal, dass du BCD meinst ?
Vielleicht schreibst du mal welchen WORD-Wert du erhältst und was du dann daraus machen willst ...
 
Also das ganze mal aufgebaut auf meinem Test Rack. Also ich bekomme von einer anderen Anlage den Wert "4075" in hex Schreibweise als Word, wenn ich dann in der nächsten Anlage damit weitermachen will soll das ganze in dezimal Schreibweise Geschehen als int gespeichert werden und dort soll dann ebenfalls der Wert "4075" stehen und nicht 16501.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Interessante Aufgabe .... direkt wandeln wird nicht gehen. Jedenfalls ist mir keine Funktion bekannt die das so macht.

Ich würde jetzt tatsächlich den HEX-Wert in 4 CHAR wandeln und dann CHAR in INT wandeln. Das müsste gehen. Aber vielleicht gibt es noch andere Lösungen
 
Interessante Aufgabe .... direkt wandeln wird nicht gehen. Jedenfalls ist mir keine Funktion bekannt die das so macht.

Ich würde jetzt tatsächlich den HEX-Wert in 4 CHAR wandeln und dann CHAR in INT wandeln. Das müsste gehen. Aber vielleicht gibt es noch andere Lösungen
Oke, da ich bis jetzt noch nicht mit char gearbeitet habe, müsste ich da erstmal etwas probieren. Wenn du eine Lösung egal in welchem Code Format hast wäre ich dir auch nicht böse wenn du mir das weiter helfen kannst
 
Solange in der Hex-Darstellung keine Buchstaben (A..F) enthalten sind, dann ist das klar BCD zu INT Umwandlung.
Achtung: sollte doch mal ein Buchstabe dabei sein, dann kommt es zu BCD-Wandlungsfehler, der ohne OB121 zum STOP der CPU führt.
In AWL könnte man einfach das WORD laden und dann BTD.
Code:
L DB1.DBW0
BTD
T DB1.DBW2
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Solange in der Hex-Darstellung keine Buchstaben (A..F) enthalten sind, dann ist das klar BCD zu INT Umwandlung.
Achtung: sollte doch mal ein Buchstabe dabei sein, dann kommt es zu BCD-Wandlungsfehler, der ohne OB121 zum STOP der CPU führt.
In AWL könnte man einfach das WORD laden und dann BTD.
Code:
L DB1.DBW0
BTD
T DB1.DBW2
Okay danke das funktioniert, dann werde ich mir wohl nur noch darüber Gedanken machen das ich den Fehlerfall abfangen muss falls sich doch mal ein Buchstabe einschleicht....
 
Ahh super, das schaut auf dem ersten Blick schonmal ganz gut aus, das werde ich mir dann aber wohl morgen in aller Frische mal anschauen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Solange in der Hex-Darstellung keine Buchstaben (A..F) enthalten sind, dann ist das klar BCD zu INT Umwandlung.
Achtung: sollte doch mal ein Buchstabe dabei sein, dann kommt es zu BCD-Wandlungsfehler, der ohne OB121 zum STOP der CPU führt.
In AWL könnte man einfach das WORD laden und dann BTD.
Code:
L DB1.DBW0
BTD
T DB1.DBW2

Der Code ist eindeutig kürzer als mein Vorschlag. :) Mit BCD hatte ich aber auch bisher noch nie zu tun gehabt.
 
Unter TIA würde CONVERT das in FUP/KOP dann über den ENO als FALSE ausgeben.
😁
Nicht bei S7-300, da geht die CPU ohne OB121 schon vorher in STOP,. @Nico_1996 hat eine 315-2DP

PS: Trotz OB121 geht natürlich die SF-LED an der CPU an, und die bekommt man nur wieder aus, indem man die CPU in STOP schaltet.
Der ENO vom TIA-CONV wird sogar erst dann wieder grün, wenn die CPU Netz-aus + Netz-ein geschaltet wird (zumindest in TIA V!5.1 und PLCSIM).
 
Zuletzt bearbeitet:
Zurück
Oben