Ok, die Instanz DB's haben sicher ihre Vorteile.
Was UDT's angeht:
Vor einige Wochen hatte ich folgendes: Von einem DP Slave bekomme ich Daten der Form
Code:
Status1 BYTE (0)
Wert1 WORD (1!)
Status2 BYTE (3!)
Wert2 WORD (4)
(unmittelbar hintereinander)
Wenn ich versuche, das als UDT oder auch nur als Deklaration im DB-Editor anzugeben, legt Step7 (V5.0, SP2) das WORD auf die nächste gerade Adresse. Habe keine Lösung dafür gefunden (auch nicht in Foren) und spreche meine Daten als DB.DBW1 oder DB.DBB3 an.
Die UDTs entsprechen in etwa structs in C oder records in Pascal, ohne jedoch wirklich deren Möglichkeiten zu erreichen.
Insgesamt wäre es mit lieber, Siemens würde einen anständigen Compiler für AWL anbieten und das Schreiben des Programms könnte mit jedem Editor erfolgen. Die Zuordnung von Variablen zu Adressen könnte dann AUTOMATISCH durch den Compiler erfolgen, sofern nicht ausdrücklich (für Ein- und Ausgänge) anders bestimmt. Wie in jeder vernünftigen Programmiersprache.
Die Zuordnung der Variablen nach Einfügen eines Parameters im FB bliebe dadurch erhalten, das man im Quelltext Formal- (im FB) und Aktualparameter (beim Aufruf) an derselebn Stelle (d.h z.B als dritten) einfügt. Verschiedene Zahl kann der Compiler immer, Vertauschungen nur bei unterschiedlichem Typ erkennen.
Auf die Steuerung würden die Änderungen aus dem letzten Compilerlauf idealerweise nur gemeinsam geladen.
Für S5 gab es einen Compiler, der aber pedantisch auf Tabs, Spaces und Spaltenposition der Anweisungsteile achtete. Mit einem normalen Editor nicht zu machen.
Instanz DB's sind aus dieser Sichtweise ein kleiner Schritt Richtung OO (objektorientierung). (Kapselung von Code und Daten). Leider hat das "Objekt" (FB +DB) nur eine Methode, den FB.
Da ich nur ein bis fünfmal im Jahr Step 7 anfasse, jedoch immer mal wieder auch andere SPS (S5, Allen Bradley, GE Fanuc), tendiere ich dazu alles so zu schreiben, wie es auf jeder Kiste geht.
Einfaches Beispiel Zeiten:
Sowas wie Einschaltverzögerung mit SE kann jede. Und in Kombination mit ein oder zwei Merkern kann man damit alles andere nachbilden.
Das einzige, dem ich nicht "widerstehen" konnte waren die Lokalvariablen in FB's.