-> Hier kostenlos registrieren
Hallo,
ich schreibe meine S7-Programme als AWL-Quelltext und habe mich entschlossen aus Gründen der Überschaubarkeit, Wiederverwendbarkeit und Verläßlichkeit dies rein symbolisch zu tun. Also keine Verwendung von absoluten Operanden im Quelltext. (Ausnahme sind Ein- und Ausgänge in dafür speziellen Funktionen).
Nun ist aber leider der AWL-Compiler von Siemens so gebaut, daß er die rein symbolische Programmierung mehr behindert als fördert. Während sich die siemenschliche Lust an Fehlermeldungen und Pedanterie voll austobt, fehlt es an elementaren Zugriffsmöglichkeiten auf das, was hinter den Symbolen steht.Vieles, was auf absoluter Ebene leicht und einfach zu machen ist, erfordert auf symbolischer Ebene lange Umwege und Verrenkungen.
Um rein symbolisch auf Bits von einem WORD in einem Datenbaustein zuzugreifen, brauch ich zb eine Funktion die mir die Nummer des DB herausgibt, für eine Anypointerbastelei um mit Blockmove dann ein WORD in eine UDT zu laden. Oder ich brauche eine Funktion, die Bit für Bit vom WORD ins UDT schaufelt. Und eine weitere für den Rückweg. Das geht natürlich ganz schön auf die Performance und Zykluszeit, wenn es häufig geschehen muß. Und das alles nur, damit der Compiler nicht meckert.
Wie geht ihr mit solchen Problemen um? Welche Tricks gehen am wenigsten auf Kosten der Zykluszeit. Welche Umwege sind die kürzesten?
ich schreibe meine S7-Programme als AWL-Quelltext und habe mich entschlossen aus Gründen der Überschaubarkeit, Wiederverwendbarkeit und Verläßlichkeit dies rein symbolisch zu tun. Also keine Verwendung von absoluten Operanden im Quelltext. (Ausnahme sind Ein- und Ausgänge in dafür speziellen Funktionen).
Nun ist aber leider der AWL-Compiler von Siemens so gebaut, daß er die rein symbolische Programmierung mehr behindert als fördert. Während sich die siemenschliche Lust an Fehlermeldungen und Pedanterie voll austobt, fehlt es an elementaren Zugriffsmöglichkeiten auf das, was hinter den Symbolen steht.Vieles, was auf absoluter Ebene leicht und einfach zu machen ist, erfordert auf symbolischer Ebene lange Umwege und Verrenkungen.
Um rein symbolisch auf Bits von einem WORD in einem Datenbaustein zuzugreifen, brauch ich zb eine Funktion die mir die Nummer des DB herausgibt, für eine Anypointerbastelei um mit Blockmove dann ein WORD in eine UDT zu laden. Oder ich brauche eine Funktion, die Bit für Bit vom WORD ins UDT schaufelt. Und eine weitere für den Rückweg. Das geht natürlich ganz schön auf die Performance und Zykluszeit, wenn es häufig geschehen muß. Und das alles nur, damit der Compiler nicht meckert.
Wie geht ihr mit solchen Problemen um? Welche Tricks gehen am wenigsten auf Kosten der Zykluszeit. Welche Umwege sind die kürzesten?