Allgemeines zu Multiinstanzen

Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn nun die Visualisierung oder auch das SPS Programm auf diesen Multi-DB zugreifen kann, auf welche Instanz des DB´s greift sie denn dann zu, denn jede Instanz kann doch auch andere Werte enthalten?!

Wenn Du das WinCC flexible Projekt ins Step7 Projekt integriert hast ist es doch kein Problem auf die Instanzen zu zugreifen. Eindeutige Namen für die Instanzen sind eigentlich das einzige was Du brauchst. Nach einer Änderung des IDB´s kannst Du mit der "Neu Verbinden" Funktion die ggf. geänderten Adressen oder Namen aktualisieren.
 

Anhänge

  • InstWinnCCflex.JPG
    InstWinnCCflex.JPG
    196,9 KB · Aufrufe: 25
... ich traue mich ja fast schon nicht mehr auf meinen Vorschlag einzugehen. :ROFLMAO:

Hallo Roland,
ob ernst gemeint oder nicht - natürlich hat jeder das Recht, sich seine Programme nach eigenem Ermessen zu verwurschteln ...
Ich bin allerdings schon der Meinung, dass man erst lernen sollte, wie man es vernünftig (richtig) macht, bevor man das wurschteln anfängt. Sicher hat hier jeder so seine Sichtweise aber viele Dinge macht man u.U. gar nicht mehr, wenn man den Hintergrund von etwas richtig verstanden hat.

Für diesen Fall bleibe ich bei der von mir dargestellten Ansicht. Gerade die angedachte Funktion hat viel mit einer Elementar-Funktion (wie z.B. einem IEC-Timer) gemeinsam und somit weiterhin mein Vorschlag : behandel es auch so ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Warum muss es den ein "FB" sein ?
Pack doch den ganzen Kram in einen FC,
Bausteinparameter "DB" und "DATA" (=DB-Nr und 1.Byte im DB) dran,
(oder mit Pointer)
Ein UDT für die benutzten Daten erstellen,
dieses UDT im "normalen" DB sooft wie benötigt einbauen,
Fertig.

Im FC baust du dir intern einen Zeiger, der auf das Datenfeld zeigt.

Damit baust du ja quasi eigene Multiinstanzen.
Hab ich zwar in S5-Zeiten auch so gelöst, aber seit S7 finde ich diesen Stil obsolet.

Gruß
Dieter
 
Damit baust du ja quasi eigene Multiinstanzen.

Eher schon fast "Klassen", nur ohne Vererbung. Die FB-typischen Einschränkungen fehlen.

Wenn ich nur in Step7 arbeite, kommt statt der Pointer für mich ein VAR_IN_OUT-Parameter des betreffenden UDT-Typs in Frage. Das wird intern auch als Pointer behandelt, wodurch die FCs exorbitant viel Speicher und Laufzeit brauchen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Implementation

Eher schon fast "Klassen", nur ohne Vererbung. Die FB-typischen Einschränkungen fehlen.

Wenn ich nur in Step7 arbeite, kommt statt der Pointer für mich ein VAR_IN_OUT-Parameter des betreffenden UDT-Typs in Frage. Das wird intern auch als Pointer behandelt, wodurch die FCs exorbitant viel Speicher und Laufzeit brauchen.

Zur Erklärung einmal ein paar Hinweise, wie die eigentliche Runtime und die Compiler das ganze implementiert haben:

Je nach Alter der Entwicklungsumgebung sind die Implementationen zur Generation der Funktionsblöcke (und auch die anderen Sachen) entweder in C (alt) oder C++ geschrieben.

In C sind die FUB als struct implementiert, wobei der eigentliche FUB Aufruf in der struct als Pointer auf eine Funktion, die der Signatur der verschiedenen Übergabe Parameter entpricht (VAR_IN_OUT und VAR_OUT sind dabei wieder Pointer auf die eigentlichen Variablen), eingebaut wird.

In C++ werden Instanzen von Klassen generiert, wobei man im Kopf behalten soll, dass structs eigentlich Klassen sind, in denen alle Member public sind. der Rest ist im Prinzip mit der C Implementation vergleichbar.

Aus den Pointern werden unter C++ allerdings Referenzen, sprich vereinfacht Pointer auf feste Adressen, jegliche Veränderung des Pointers (nicht des Inhalts) werden vom Compiler verhindert.
 
Zurück
Oben