TIA Prüfen ob eine Instanz in einer Multiinstanz noch existiert

G

Gelöschtes Mitglied 129338

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

In einem Array werden die Präfixe der Aufrufe meines Bausteins gespeichert.
Ich möchte nun dieses Array dynamisch programmieren, das heißt ich muss prüfen ob die gespeicherten Präfixe noch existieren. Falls nicht vorhanden Präfix löschen und Array lückenlos sortieren.

Gibt es hierfür eine Möglichkeit ohne einen extra Baustein zu schreiben und die Instanz-DBs an zu parametrieren?

Im Einsatz TIA V17 1518er CPU
 
Mit der Funktion GetInstancePath schreibt jeder Aufruf den eigenen „Präfix“ in einen globalen DB.
Wenn nun ein Programmierer einen Aufruf umbenennt oder komplett löscht gibt es einen Präfix in dem Array ohne dazugehörigen Bausteinaufruf. Und diese möchte ich dann aussortieren.

Als Randinformation; diese Präfixe benutze ich in einem VB Skript.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Und wenn das Laden einer Programmänderung keinen SPS-Neustart nach sich zieht?
Wenn man dynamische Objektverwaltung in eine SPS einführen will, dann muß man das selber richtig machen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vor der S7-1500 waren das die Anlauf-OBs OB100/101/102
Mit S7-1500 kenne ich mich nicht gut aus, da sollte aber was in der TIA Hilfe drüber stehen.

Harald
Danke für die Info.

Klingt vll blöd, aber der Aufruf eines weiteren OBs stellt keine Option dar. Der Baustein wird an verschiedenen Standorten von verschiedenen Firmen implementiert. Ich muss den Aufwand so gering wie möglich halten.
 
Tja dusch mich aber mach mich nicht nass …
Ohne Änderung wird es wohl kaum gehen.
Was ich damit sagen möchte ist, das ich eine elegante Lösung im FB suche. Ich kenne da auch eine Lösung mit den DB Nummern als Datentyp DB_ANY aber ich wüsste nicht wie man die DB Nummer einer Instanz auslesen kann in der sich der auszuführende Code befindet

Zur Not würde ich ein VB Skript schreiben, da fällt mir nämlich auf Anhieb eine Lösung ein.
 
Ich versteh nur Bahnhof, was der TE hier eigentlich machen will...
Geht es um SPS oder HMI? Und wie kriegt man nen VB Script in die SPS?
Ich denke er möchte auf der HMI irgendwie visualisieren welche Multiinstanzen (evtl. Betriebsmittel) in der SPS existieren. Und das ohne Aufwand. Vlt. geht es um eine dynamische Visu des Einrichtbetriebs
 
Ich denke er möchte auf der HMI irgendwie visualisieren welche Multiinstanzen (evtl. Betriebsmittel) in der SPS existieren. Und das ohne Aufwand. Vlt. geht es um eine dynamische Visu des Einrichtbetriebs
Also so wie ASOS Übersetzen + CFC in classic... bzw. PCS7 wo dann die richtigen Visuobjekte schon im richtigen Visubild der technologischen Hierarchie platziert werden?
Keine Ahnung, wie das mit TIA sinnvoll gehn sollte, garnicht würd ich sagen. Mit Sivarc vielleicht...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also so wie ASOS Übersetzen + CFC in classic... bzw. PCS7 wo dann die richtigen Visuobjekte schon im richtigen Visubild der technologischen Hierarchie platziert werden?
Keine Ahnung, wie das mit TIA sinnvoll gehn sollte, garnicht würd ich sagen. Mit Sivarc vielleicht...
So wie ich das Ganze verstehe, gibt es einen einen Global-DB mit einem Array.
In dieses Array tragen sich die entsprechenden FBs unter Verwendung vom GetInstancePath ein.
Durch Programmänderung und / oder unfähige Programmierer gibt es nun "Leichen" bzw. falsche Einträge in diesem Array.
Diese sollen nun - wie auch immer - möglichst ohne Änderung und ohne zusätzliche Bausteine korrigiert werden.
 
So wie ich das Ganze verstehe, gibt es einen einen Global-DB mit einem Array.
In dieses Array tragen sich die entsprechenden FBs unter Verwendung vom GetInstancePath ein.
Durch Programmänderung und / oder unfähige Programmierer gibt es nun "Leichen" bzw. falsche Einträge in diesem Array.
Diese sollen nun - wie auch immer - möglichst ohne Änderung und ohne zusätzliche Bausteine korrigiert werden.
Hmm, da würd ich die benötigten statischen Daten in dem GlobalDB Array ablegen und dann keinen FB sondern FC benutzen. Die einzelnen Instanzen des FC kriegen dann ne Nummer (das entspr. Arrayelement). Gegen unfähige Programmierer schützt ne Überwachung, ob die Nummer evtl. doppelt benutzt wird und nicht die verfügbare Array länge überschreitet. Nicht benutzte Arrayelemente sind einfach "Reserve"...

Wenn man die Nummer nicht händisch vergeben will, könnt man sich ja auch überlegen, wie der FC das automatisch hochzählt und fixiert... aber das wird undurchschaubar und bei Softwareänderungen gefährlich...
 
Mit der Funktion GetInstancePath schreibt jeder Aufruf den eigenen „Präfix“ in einen globalen DB.
Wenn nun ein Programmierer einen Aufruf umbenennt oder komplett löscht gibt es einen Präfix in dem Array ohne dazugehörigen Bausteinaufruf. Und diese möchte ich dann aussortieren.
Hmmm, über welchen ZeitRaum soll denn geprüft werden, ob ein in der Liste enthaltener Präfix weiterhin benutzt bzw. nicht mehr benutzt wird?
Gilt ein Präfix als "nicht mehr benutzt", sobald er z.B. einen kompletten OB1-Zyklus lang nicht benutzt wird oder z.B. erst dann, wenn sich 1 Tag lang nichts getan hat?
Warum soll nur überwacht werden, ob ein Präfix nicht mehr benutzt wird?
Warum nicht auch prüfen, ob ein neuer Präfix hinzugekommen ist? Weil mehr PräfixEinträge angelegt werden könnten, als das Array aufnehmen kann, sich also die Reserve als zu knapp bemessen erweisen könnte?
Wäre es evtl. sinnvoller, nicht mehr benutzte PräfixEinträge nicht radikal zu löschen, sondern nur als nicht mehr benutzt zu kennzeichnen?

Die einzelnen Instanzen des FC kriegen dann ne Nummer (das entspr. Arrayelement).
Wer vergibt die Nummer, also den Index des ArrayElements? Wenn aus dem Array doch Elemente gelöscht werden sollen und anschliessend das Array sortiert werden soll, dann ändern sich hierduch ggfs die Zuordnungen von Instanz und ArrayIndex!
Gegen unfähige Programmierer schützt ne Überwachung, ob die Nummer evtl. doppelt benutzt wird und nicht die verfügbare Array länge überschreitet.
Doppelt vergebene Nummern lassen sich für mein Verständnis nach dem beabsichtigten Verfahren nicht feststellen und wären eine zusätzliche "Baustelle".
 
Zuletzt bearbeitet:
Zurück
Oben