- Beiträge
- 24.285
- Reaktionspunkte
- 7.711
-> Hier kostenlos registrieren
Wir haben hier 2 Probleme:
(1) der TIA-SCL-Compiler behandelt bei der S7-1500 Zugriffe auf Strings hinter das aktuelle Ende des Strings wie Zugriffe auf nicht existierenden Speicher (mindestens bei optimiertem Speicher). Die Zugriffe lösen aber anscheinend keine Fehler aus, sie gehen einfach nur ins Leere. Lesezugriffe liefern (anscheinend immer?) '$00'
(2) bestimmte Schreibzugriffe in einen String hinter das aktuelle Ende des Strings verändern die aktuelle Stringlänge
Problem (2) darf nicht sein, ich halte das für einen Bug.
Problem (1) könnte man durch entsprechende Dokumentation zu einem Feature machen, dann müsste man damit leben und ggf. früher funktionierenden Code umschreiben. Ist dieses Verhalten so dokumentiert? Gibt es beim Migrieren von classic-SCL zu S7-1500-SCL oder beim Compilieren in TIA entsprechende Warnungen/Fehlermeldungen? Bei Zugriff auf indiziert adressierte Zeichen in Strings müsste man nun sicherstellen daß zuvor die aktuelle Stringlänge hinter die Zugriffsstelle zeigt.
? Gibt es in der verwendeten TIA-Version eine neue Definition des Datentyps STRING für S7-1500, eventuell nur gültig in "optimiertem" Speicher? Steht da irgendwo, daß der Speicher hinter dem aktuellen Ende des Strings nicht existiert und/oder daß man darauf nicht zugreifen darf/kann? Und wenn man es trotzdem macht, daß man da '$00' erhält bzw. ein hineinschreiben "ins Leere" geht?
Wieso läßt der Compiler ohne Warnung indizierte Zugriffe auf die Zeichen des Strings zu, obwohl er sogar sehen kann, daß die Zugriffe hinter das aktuelle String-Ende gehen? Meine Meinung: weil sie grundsätzlich zulässig sind.
? Wie kann man die aktuelle Stringlänge vergrößern? Anscheinend nur durch Anhängen eines Strings - das erfordert nun (im Hintergrund) vermutlich immer ein Kopieren des gesamten Strings. "Früher" war das nicht nötig und deshalb effizienter
? Wenn der Speicher hinter der aktuellen Stringlänge nicht mehr existiert, welchen Sinn hat dann noch die deklarierbare maximale Stringlänge?
Harald
(1) der TIA-SCL-Compiler behandelt bei der S7-1500 Zugriffe auf Strings hinter das aktuelle Ende des Strings wie Zugriffe auf nicht existierenden Speicher (mindestens bei optimiertem Speicher). Die Zugriffe lösen aber anscheinend keine Fehler aus, sie gehen einfach nur ins Leere. Lesezugriffe liefern (anscheinend immer?) '$00'
(2) bestimmte Schreibzugriffe in einen String hinter das aktuelle Ende des Strings verändern die aktuelle Stringlänge
Problem (2) darf nicht sein, ich halte das für einen Bug.
Problem (1) könnte man durch entsprechende Dokumentation zu einem Feature machen, dann müsste man damit leben und ggf. früher funktionierenden Code umschreiben. Ist dieses Verhalten so dokumentiert? Gibt es beim Migrieren von classic-SCL zu S7-1500-SCL oder beim Compilieren in TIA entsprechende Warnungen/Fehlermeldungen? Bei Zugriff auf indiziert adressierte Zeichen in Strings müsste man nun sicherstellen daß zuvor die aktuelle Stringlänge hinter die Zugriffsstelle zeigt.
? Gibt es in der verwendeten TIA-Version eine neue Definition des Datentyps STRING für S7-1500, eventuell nur gültig in "optimiertem" Speicher? Steht da irgendwo, daß der Speicher hinter dem aktuellen Ende des Strings nicht existiert und/oder daß man darauf nicht zugreifen darf/kann? Und wenn man es trotzdem macht, daß man da '$00' erhält bzw. ein hineinschreiben "ins Leere" geht?
Wieso läßt der Compiler ohne Warnung indizierte Zugriffe auf die Zeichen des Strings zu, obwohl er sogar sehen kann, daß die Zugriffe hinter das aktuelle String-Ende gehen? Meine Meinung: weil sie grundsätzlich zulässig sind.
? Wie kann man die aktuelle Stringlänge vergrößern? Anscheinend nur durch Anhängen eines Strings - das erfordert nun (im Hintergrund) vermutlich immer ein Kopieren des gesamten Strings. "Früher" war das nicht nötig und deshalb effizienter
? Wenn der Speicher hinter der aktuellen Stringlänge nicht mehr existiert, welchen Sinn hat dann noch die deklarierbare maximale Stringlänge?
Harald