TIA implizite Konvertierung UsInt*Int=time

Ludewig

Level-3
Beiträge
1.057
Reaktionspunkte
224
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe eine Frag an alte Siemens-AWL-Hasen.

Ich fand gerade in altem Code folgende Rechnung

Code:
L Usint 0...ca 180
L int#1000
*I
T Time
Die Rechnung scheint bis zu den Grenzen der Wete von Usint [0 - 255] und Int [0 - 32767] problemlos zu funktionieren. Kann ich mich darauf verlassen?
Im der aktuellen Version musste ich einen Faktor eiinführen und habe das Ganze in Real gewandelt und zum Schluss (im vorhandenen AWL) geRNDet.

Sollte ich die alten Anlagen updaten oder kann man das lassen? Das wär meine Frage.
 
Die Rechnung scheint bis zu den Grenzen der Wete von Usint [0 - 255] und Int [0 - 32767] problemlos zu funktionieren. Kann ich mich darauf verlassen?
Wenn Du Siemens und deren AWL-Dokumentation traust, dann kannst Du Dich darauf verlassen daß das auch in 20 Jahren noch auf irgendeiner Siemens-SPS funktioniert welche S7-AWL kann.

Setze den Cursor in die Zeile mit dem *I und drücke F1! Da erhältst Du die Beschreibung der *I-Anweisung: zwei 16-Bit-Ganzzahlen (INT) werden multipliziert und liefern ein 32-Bit-Ergebnis (DINT). (welchen Datentyp die Werte in den beiden Akkus wirklich haben/hatten ist der Anweisung egal)

Ein "Schönheits"-Fehler ist hier das verwendete *I: wenn der USINT-Wert > 32 ist, dann werden bei der Operation die Fehler-Statusbits OV (Überlauf) und OS (Überlauf speichernd) gesetzt, weil das Ergebnis "außerhalb des zulässigen Zahlenbereichs" liegt (TIA) bzw. "außerhalb des Bereichs einer Ganzzahl (16 Bit)" (Step7 classic).
Also: *I funktioniert, *D wäre aber besser, weil dabei kein Fehler signalisiert wird. (In AWL kann man eine ganze Menge Scheixx machen, der in richtigen Programmiersprachen mit Datentyp-Prüfung nicht erlaubt wäre.)

Im der aktuellen Version musste ich einen Faktor eiinführen und habe das Ganze in Real gewandelt und zum Schluss (im vorhandenen AWL) geRNDet.
In der aktuellen Version von was? Für welche CPU? Musstest Du genau was machen?

Harald
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für Deine Antwort. Ich habe leider Siemens-AWL nie richtig gelernt und schreibe meine Bausteine meist in SCL.

Aktuelle Version = es handelt sich um en Standard-Programm für eine ganze Reihe gleichartiger Anlagen, das ich weiterentwickeln muss.
Da 3 verschieden Personen den Code über Jahre zusammengetragen haben, .......

edit: s7-1500 als ET200 1512SP
 
Zuletzt bearbeitet:
Zurück
Oben