Ich hätte mir gewünscht, dass TIA intelligent wandelt bei unterschiedlichen Variabelentypen. Bin vor kurzen über folgendes gestolpert:
#varBYTE := 5;
#varINT := #varBYTE * 250; // Ergebnis : 226 !?!!? (LowByte von 1250 !)
#varINT := BYTE_TO_INT(#varBYTE) * 250; // Ergebnis : 1250
#varINT := #varBYTE * INT#250; // Ergebnis : 1250
#varINT := 5 * 250; // Ergebnis : 1250
Ja, die unteren Programmierarten sind alle "sauberer". Ich bin bei TwinCAT "ST/SCL-isiert" worden. Und da gilt grob: Es wird versuch, alle Variablen auf die Zielvariable zu wandeln. Wenn das Verlustfrei möglich ist: Tut einfach. Sonst Meldung.
Und wenn ich bei einer INT-Berechnung ein Byte als Formel-Teil habe hätte ich in einer Modernen, Hochsprachen-Ähnlichen Umgebung ein anderes Verhalten erwartet.
Ganz abgehen davon: Warum ist die untere Berechnung (5*250) nicht genau so komisch? Ist auch in Byte abbildbar und nicht explizit als INT definiert. Klassische Siemens (In-)Konsequenz.
Und andersrum: Wer wirklich nur das Low-Byte haben will und das so programmiert, wäre dem noch zu helfen?
Laut Siemens-Hotline ist das Verhalten so korrekt (aus Speed-Gründen !?!?!?) Normalerweise wird die varByte auch gelb auf weiß unterkringelt und es gibt eine Übersetzungs-Warnmeldung. Bei meinem Originalprojekt kam das reproduzierbar nicht (war aber auch eine etwas komplizierte verschachtelte Formel).
Ich habe jetzt alle Bausteine auf IEC-Prüfung umgestellt. Dann wird es rot/unübersetzbar. Dann bekomme ich das vorher mit und werde von der Siemens-Interpretation nicht doof überrascht. (Keine Ahnung was da noch so schlummert ...)