Datenminimierung bei Instanzen.

schaible.r

Level-1
Beiträge
217
Reaktionspunkte
28
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen.

Wir haben bei uns in der Firma eine eigen Library in PCWORX entwickelt.

Bei den Bausteinen verwende ich zur Zeit immer eine Instanz pro Aufruf, da sich die Daten darin Teilweise für jeden Aufruf anders gestalten.

Nun habe ich vor für eine neue Version der Library die Instanzen so klein wie möglich zu halten.
Speichernde Daten plane ich dazu aus zu lagern in eine externe Variable evtl. mit einer Struktur.

Nun wollte ich mal wissen auf was ich alles achten muss um jeden Bausteintyp mit der gleichen Instanz auf zu rufen.

Diesbezüglich würde mich noch interessieren ob es dann noch möglich ist OPC Variablen innerhalb der Instanz immer noch Differenziert aus zu lesen.

Ich hoffe ich habe jetzt keinen Doppel Thema erstellt.
Beim ersten suchen habe ich nix passenden gefunden..

Gesendet von meinem SM-A300FU mit Tapatalk
 
Ob Du Instanzdaten innerhalb der Instanz oder außerhalb der Instanz speicherst wird wohl kaum zu einer Daten-"Minimierung" führen. Ich kann mir vorstellen, daß beim Ausgelagern von Daten vielleicht sogar mehr Datenspeicherplatz benötigt wird.
Weitere Nachteile
- unnötige Verkomplizierung des Codes
- Code-Mehraufwand für den Zugriff auf die ausgelagerten Daten
- langsamerer Code
- Instanzdaten werden Globaldaten

Ich würde sagen, daß Dein Vorhaben nur Nachteile hat und vermutlich keinerlei Vorteile. Oder hast Du mal ein konkretes Beispiel, was sich durch das Auslagern verbessern würde?

Bevor Du in großem Stil all die Library umschreibst, untersuche erst mal nur einen Beispiel-Baustein, welches Verfahren mehr Codegröße und Datenspeicherbedarf hat.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo.

Ja alle diese Punkte gilt es zu bedenken.
Allerdings wollte ich nicht wirklich wissen ob es Sinnvoll ist sonder was ich beachten muss.

Den ich nutze in meinen Bausteinen einige nur Temporäre Variablen die nicht speichernd verwendet werden und bei denen es auch egal ist welchen Zustand diese zum Aufrufzeitpunkt haben.
Z.b. wandeln von Werten etc.
Zum kleinen Teil kann ich davon evtl. ein paar sparen.
Die Daten die ich wirklich speichernd haben möchte/muss halten sich teilweise klein.

Trotzdem Danke für den Post.
Denn das hat mich nochmals über einiges im anderen Blickwinkel nachdenken lassen.
Dabei bin ich darauf gekommen das ich mit den Aufrufen von anderen Bausteinen sehr aufpassen muss. Denn das Funktioniert in dem Fall nur wenn diese Bausteine wiederum ebenfalls mit nur einer Instanz unterschiedliche Ergebnisse liefern können.
Ebenfalls muss ich wohl mit RS/SR eher sparsam sein.
Oder wird das funktionieren?

Naja einen Test habe ich schon begonnen und bin dabei das ganze an einem Baustein zu versuchen. Deshalb bin ich ja auf die Fragen gestoßen.

Ich werde meine Ergebnisse auch mal Posten wenn es so weit ist.

Gesendet von meinem SM-A300FU mit Tapatalk
 
Hallo schaible.r,

um ehrlich zu sein sehe ich Dein Vorhaben extrem kritisch.

Alles was dazu führt eine Instanz eines FBs mehrfach zu verwenden führt i.d.R. zu Problemen im Sinne der Datenkonsistenz.
Nicht umsonst wird für jede FB Instanz ein eigener Speicherbereich genutzt.

Daher würde ich mich eher auf Tips beschränken wie du die einzelne Instanz (und damit die Anzahl der verwendeten Lokalen Variablen) möglichst klein halten kannst.

  1. Datentypen und Strukturen immer passend wählen und keine Reserven einplanen.
    z.B. Int Bereich reicht, es wird aber ein Dint verwendet; Es wird ein Stream mit 10 Byte verarbeitet, aber ein Array von 20 Byte wird genutzt...
  2. Klasse sind auch die In/Out Variablen. Im wesentliche stellt dies ein Pointer auf eine Variable im aufrufenden Programm dar.
    Hier könntest du super alle Variablen auslagern, die dur dir nicht in der Instanz "merken" musst.

Gruß

Frank
 
Zurück
Oben