TIA Wie kann man im TIA nach allem MOVE Bausteinen suchen

--alex--

Level-2
Beiträge
102
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,
hatte heute ein Problem, welches ich bis dato noch nie hatte.
Mit einem MOVE Befehl schreibe ich mir einen INT Wert auf einen DINT Wert.
Das funktionierte soweit immer ohne Probleme.
Keine Ahnung warum, aber heute hat mir der MOVE Baustein aus INT -3747 einen DINT mit 61789 gemacht.
Habe den MOVE durch einen CONV ersetzt.

Keine Ahnung ob ich hier was falsch verstanden habe oder nicht, aber ich verwende den MOVE Befehl für solche Sachen schon seit Jahren.
Möchte jetzt alle MOVE Befehle noch einmal prüfen.

Gibt es eine Möglichkeit im TIA Portal alle MOVE Bausteine anzuzeigen?
Habe leider nichts entsprechendes gefunden.
Ich habe v18 im Einsatz.

Vielen Dank
Alex
 
Das funktionierte soweit immer ohne Probleme.
Keine Ahnung warum, aber heute hat mir der MOVE Baustein aus INT -3747 einen DINT mit 61789 gemacht.
Dann hast du bisher Glück gehabt, dass es dir nicht früher auf die Füße fiel.

Der Grund ist, dass das höchstwertige Bit in INT und DINT das Vorzeichen anzeigt. Wenn du einen negativen INT-Wert hast, ist das höchstwertige Bit gesetzt.
Wenn du dein INT nur auf ein DINT verschiebst, dann verliert das höchstwertige Bit im INT seine Rolle und ist nur ein weiteres Stellenbit im DINT.

Ich hab leider keine Lösung für deine Anfrage, aber vielleicht könnte ich deine Verwirrung lösen, woher das Verhalten kommt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Konvertieren ist hier das Stichwort.

48711306_STEP7_Basic_V105_Beispiele_zur_Umwandlung_von_Datentypen_01.png


48711306_STEP7_Basic_V105_Beispiele_zur_Umwandlung_von_Datentypen_2.png


Wie können Sie in STEP 7 (TIA Portal) die Datentypen für die S7-1200/S7-1500 umwandeln?​

 
Zuviel Werbung?
-> Hier kostenlos registrieren
Keine Ahnung warum, aber heute hat mir der MOVE Baustein aus INT -3747 einen DINT mit 61789 gemacht.
Habe den MOVE durch einen CONV ersetzt.
Wenn man von einem kleineren Datentyp (z.B. 16 Bit INT) zu einem größeren Datentyp (z.B. 32 Bit DINT) kopieren will, dann muss man das mit konvertieren machen. Wenn man die TIA Hilfe zu MOVE mal liest, dann kann man da finden:
Wenn die Bitlänge des Datentyps am Eingang IN die Bitlänge des Datentyps am Ausgang OUT1 unterschreitet, werden die höherwertigen Bits des Zielwerts mit Nullen überschrieben.
Von INT zu DINT müssen aber alle 16 höherwertigen Bits des DINT den Wert des höchstwertigen Bit 15 des INT erhalten. Der CONV beachtet das.
Warnt das TIA da nicht, wenn man INT zu DINT MOVEd? (ich mache solche Fehler nicht ;) )

Keine Ahnung ob ich hier was falsch verstanden habe oder nicht, aber ich verwende den MOVE Befehl für solche Sachen schon seit Jahren.
Dann machst du das schon seit Jahren falsch und hast wohl nur Glück gehabt, dass da wohl nie negative Werte kopiert wurden. Hätte aber eigentlich auffallen müssen, wenn man seinen poduzierten Code auch mal richtig testet ...

Gibt es eine Möglichkeit im TIA Portal alle MOVE Bausteine anzuzeigen?
Falls TIA bei den fehlerhaften MOVEs warnt, dann könnte man die Warnliste abarbeiten.
 
So bin jetzt noch einmal die Programme durchgegangen.
Das war zum Glück der einzige MOVE von INT nach DINT.
Und den habe ich "auf die Schnelle" vor 2 Wochen eingebaut.
Alle anderen waren "Typenrein"

Danke für eure Hinweise
 
Warnt das TIA da nicht, wenn man INT zu DINT MOVEd?
Ich habe es mal mit TIA V15.1 für S7-1500 getestet

FUP/KOP INT zu DINT, DINT zu INT: keine Warnung, das Verhalten ist ja dokumentiert --> Hilfe zur Anweisung MOVE lesen! (und nach unten scrollen bis zur Detailbeschreibung)
MOVE: Wert kopieren
(...)
Wenn die Bitlänge des Datentyps am Eingang IN die Bitlänge des Datentyps am Ausgang OUT1 überschreitet, gehen die höherwertigen Bits des Quellwerts verloren. Wenn die Bitlänge des Datentyps am Eingang IN die Bitlänge des Datentyps am Ausgang OUT1 unterschreitet, werden die höherwertigen Bits des Zielwerts mit Nullen überschrieben.

SCL INT zu DINT: keine Warnung, weil implizite Konvertierung angewendet wird
SCL DINT zu INT: Warnung: Das Vorzeichen oder die Genauigkeit des Werts können verloren gehen.
AWL "CALL MOVE": Fehler: Implizite Konvertierung (...) ist nicht möglich.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Okay, sehe ich. Ändert aber auch nichts an der Aussage, dass an dem höchstwertigen Bit das Vorzeichen erkennbar ist.
Stimmt. Bei Zahlen in ZweierKomplementDarstellung kann man am höchstwertigen Bit das Vorzeichen ablesen.
Aber man kann das Vorzeichen einer Zahl nicht "umdrehen" ohne den Betrag der Zahl zu ändern, wenn man das VorzeichenBit umknippst.
Ich persönlich finde es deshalb ziemlich irreführend, das höchstwertige Bit als VorzeichenBit zu bezeichnen.
Kann man machen, aber Vooorischt! Oft provoziert man damit voreilige SchlussFolgerungen.
 
Zurück
Oben