TIA S7-400 / SCL / "Verweis" einer Variable auf eine zweite Variable

Nico770

Level-1
Beiträge
41
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen zusammen

Ich wurde mit dem Projekt betraut eine WinCC Visualisierung für unsere schon vorhandene Steuerung zu erstellen.
Über das WinCC Panel würde ich mir gerne diverse Daten anzeigen lassen; vorab aber mal kurz etwas zum Anlagenaufbau:

Die Anlage besteht aus Elementen ("4Stellige Zahl, z.b. 8101, 8102 etc.). Diese sind jeweils mit einem Antrieb und einer Stopp-Lichtschranke versehen.
In der SPS selbst hat jedes Element ein Bit in der Datenbank, welches anzeigt ob das Element aktuell "theoretisch" belegt ist oder nicht
(Wenn z.b. die Palette auf das nächste Element vorrückt, wird die Belegung auf dem "alten" Element erst entfernt, wenn die Palette das neue Element erreicht hat.)
Außerdem verfügt jedes Element über einen - ehemals Pointer - nun ein Index, welcher angibt wo der Datensatz für die aktuelle Palette im Datenbank-Array gespeichert ist - sprich dieser Int
wird auch immer mit der Palette "durch die Anlage geschoben".
Außerdem sind die einzelnen Elemente in Pult-Bereiche unterteilt, womit der Automatikbetrieb für diese Elemente angehalten wird,
und über ein noch altes Bedienterminal können die Antriebe dann auch per Tippbetrieb gesteuert werden.

Nun würde ich gerne diese Daten auf Nachfrage im HMI ausgeben nach dem Motto:
Element-Nr im E/A Feld eingeben -> SPS bekommt ein Änderungsbit gesetzt -> Wertet aus ob das Element existiert -> Wenn es existiert dann sollen Daten ausgegeben werden wie Belegung vorhanden, Lichtschranke belegt, Antrieb wird angesteuert, Pultbereich ist in "Hand" oder in Automatik, sowie Diverse Sachen aus dem Datensatz in der Datenbank (ZielHalle etc.).

Nun könnte man sich einen FC Bauen, welcher einen Int - die Element ID - als Eingangsparameter hat, diesen Int in einer Case verwenden und "Hardcoded" dann die gewünschten Daten aus der
Datenbank auslesen und per Ausgangsparameter zurückgeben. Finde ich aber nicht schön sowas "Hardcoded" zu machen.
Die zweite Lösung wäre einen DB anzulegen in Form eines Array Of Struct, wo in der Struct jeweils die Element-ID stehen, sowie die Offsets für Belegungs-Bit und Pointer im Datenbank-DB, um dann aus diesem DB die zugehörigen Daten auszulesen - wäre eleganter da man DB-Einträge entspannter ändern kann (falls die Anlage erweitert wird o.ä.).
Ich muss aber sagen ich habe die Steuerung erst vor kurzem von einer S5 umgebaut, und aktuell läuft die Anlage komplett über symbolischen Zugriff (sofern möglich), daher würde ich jetzt ungerne wieder mit der indirekten Addressierung anfangen.
Also ist diese Möglichkeit für mich auch eher ungeeignet...

Nun zur Frage: Habt ihr eine Idee wie man so etwas elegant & symbolisch lösen kann?
Oder ist es möglich dass man im HMI-DB sozusagen einen Verweis auf eine andere Variable in einem anderen DB erstellt?

Erwähnenswert: Ich nutze eine 417-4 CPU in Verbindung mit Step7 Professional V15.1, die gesamte Software ist in SCL geschrieben (und das würde ich gerne beibehalten).

Danke im Vorraus!
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
WinCC Advanced V15.1 Upd2 in Verbindung mit einem KTP700 Mobile oder KTP400 Mobile (Die Größe wissen wir noch nicht genau, aber ich denke das wird keinen Unterschied machen).
 
Mobile Panel sind aber Comfort Panels. Advanced wird dir da nichts helfen.

Ich hab was ähnliches so gelöst, dass ich in einer For Schleife meine Datenbank nach der LE Nummer durchsuche. Hab ich sie gefunden, wird der komplette Datensatz des Speicherbereichs unter welchem die LE Nummer liegt in einen weiteren Datensatz kopiert, der dann auf der Visu angezeigt wird. Nach 20 Sekunden wird dann der Vorgang erneut getriggert um den Datensatz zu aktualisieren. Wird die Seite gewechselt oder eine neue LE eingegeben, werden die Daten gelöscht/ überschrieben.
 
Zuletzt bearbeitet:
Ich würde auf jeden Fall versuchen, das rein im HMI zu erledigen. Dann kannst du beispielsweise wenn sich jemand ein zweites Bediengerät mit gleicher Funktionalität wünscht, das Projekt einfach duplizieren und es läuft.

Hängt davon ab wie viele Elemente vorhanden sind. Du könntest im HMI alle Elemente als Variablen anlegen, und dann per Skript den Variablennamen mit der Nummer zusammenbauen und dem Wert einer internen Variable zuweisen der dann angezeigt wird. Die Werte werden dann aber nicht von selbst aktualisiert, da muss man "nachhelfen".
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Okay?
Wie habe ich das dann zu verstehen?
  • Mit WinCC Basic können Sie alle Basic Panels projektieren.
  • Mit WinCC Comfort können Sie alle mit WinCC (TIA Portal) projektierbaren Panels projektieren
    (Basic Panels, Comfort Panels, Mobile Panels).
  • Mit WinCC Advanced können Sie zusätzlich zu den Panels das PC-basierte Runtime-System
    "WinCC Runtime Advanced" projektieren.
  • Mit WinCC Professional können Sie zusätzlich zu den mit WinCC Advanced projektierbaren Geräten das PC-basierte Runtime-System "WinCC Runtime Professional" projektieren.
- Von Hier
 
Okay?
Wie habe ich das dann zu verstehen?

- Von Hier

Wenn man Advanced hat kann man zusätzlich zu den Panels die man mit Comfort programmieren kann auch noch PC basierte Systeme programmieren.
Wenn man keine PC basierte Visualisierung programmieren will, braucht man kein Advanced. Die Mehrkosten kann man sich dann sparen.

Mit Advanced gehen Panels und PC, mit Comfort nur Panels. Advanced ist die Erweiterung von Comfort um PC basierte Systeme.
 
Zuletzt bearbeitet:
@Thomas
Also in der Halle, in der ich aktuell diese Umstellung mache sind es "nur" ~300 Elemente.
In einer anderen Halle die in der Zukunft noch umgebaut wird, sind es hingegen ~900 Elemente.
Und ich würde gerne den selben "Grundaufbau" in allen Stationen haben.

Und außerdem wäre bei dieser Lösung auch wieder das Problem dass alles im HMI sehr "hardcoded" ist - was nicht so ganz das ist was ich unbedingt erreichen möchte.

@Zombie
Achsoo falsch verstanden, sorry.
Naja WinCC Advanced habe ich bereits auf dem PG, habe das PG M6 mit der WinCC Option bereits hier stehen, also ist der Zug eh abgefahren.
Hatte es jetzt nur so verstanden, dass es nicht möglich sei die Mobile Panels mit Advanced zu Projizieren und hatte kurz ein wenig Angst^^
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich zitiere mich mal selbst

Ich hab was ähnliches so gelöst, dass ich in einer For Schleife meine Datenbank nach der LE Nummer durchsuche. Hab ich sie gefunden, wird der komplette Datensatz des Speicherbereichs unter welchem die LE Nummer liegt in einen weiteren Datensatz kopiert, der dann auf der Visu angezeigt wird. Nach 20 Sekunden wird dann der Vorgang erneut getriggert um den Datensatz zu aktualisieren. Wird die Seite gewechselt oder eine neue LE eingegeben, werden die Daten gelöscht/ überschrieben.

Das was du eingibst, ist die LE Nummer, wie auch immer bei dir genannt. Das ganze kann in einen FB programmiert werden, der eine Variable von einem Panel bekommt, und die Daten in einen anderen Datensatz schreibt der dann an das Panel geht.
Der FB kann mehrfach aufgerufen werden und so auch mehrere Panels mit unterschiedlichen Daten befeuern.
 
Zuletzt bearbeitet:
Also in der Halle, in der ich aktuell diese Umstellung mache sind es "nur" ~300 Elemente.
In einer anderen Halle die in der Zukunft noch umgebaut wird, sind es hingegen ~900 Elemente.
Und ich würde gerne den selben "Grundaufbau" in allen Stationen haben.

Und außerdem wäre bei dieser Lösung auch wieder das Problem dass alles im HMI sehr "hardcoded" ist - was nicht so ganz das ist was ich unbedingt erreichen möchte.

Je nach Anzahl der Variablen ist das dann aber nur eine Zeile (so in der Art)
Wert_Element = SmartTags("Element_" & Elementnr)

Wenn dann deine Variable je Element z.B. "Element_1000" heißt und jemand als Elementnr 1000 eingibt, dann wird der Wert von Element_1000 ausgegeben.

Das Variablen anlegen ist ja nur Copy-Paste aus dem SPS-Programm wenn alles in einem Projekt ist. Hängt von deiner Anzahl an Variablen je Element ab ob das so überhaupt funktioniert, und wie viele andere Variablen du hast. Ansonsten bist du recht schnell am Variablenlimit der Panels (imho 2048).
 
Spontan fällt mir da ein "Variablen-Multiplexen" im HMI. Vielleicht ist auch Bildbaustein sinnvoll? Das ist vollsymbolisch und auf jeden Fall besser als Variablennamen zusammenbasteln und Aktualisierung irgendwie realisieren.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Spontan fällt mir da ein "Variablen-Multiplexen" im HMI. Vielleicht ist auch Bildbaustein sinnvoll? Das ist vollsymbolisch und auf jeden Fall besser als Variablennamen zusammenbasteln und Aktualisierung irgendwie realisieren.
Das wäre eigentlich die Methode der Wahl. Leider ist das projektieren des Multiplexens bei vielen Variablen sehr umständlich, und wenn ich mich recht entsinne war es zumindest zumindest bei V14 nicht möglich, das Multiplexen über Ex-/Import zu automatisieren um die Listen z.B. mit Excel zu erstellen. Kann aber sein, dass sich da mittlerweile etwas getan hat.
 
Ich zitiere mich mal selbst

Das was du eingibst, ist die LE Nummer, wie auch immer bei dir genannt. Das ganze kann in einen FB programmiert werden, der eine Variable von einem Panel bekommt, und die Daten in einen anderen Datensatz schreibt der dann an das Panel geht.
Der FB kann mehrfach aufgerufen werden und so auch mehrere Panels mit unterschiedlichen Daten befeuern.

Das Problem an der Sache ist leider, dass bei mir die Elementnamen nicht in einer Variable stehen, und der Datenbankeintrag sozusagen garnicht weiß wo die Palette jetzt genau ist.
Und den Aufbau der Datenbankeinträge würde ich ungerne ändern, da die EInträge 1:1 als Telegramm an die anderen Gewerke verschickt werden; Würde mir also mehr arbeiten machen wie gewollt/geplant.
Und die Liste wo die Pointer auf den Elementen gespeichert werden, ist im Endeffekt nur ein DB mit mehreren Integer hintereinander, welche nur im Symbolnamen das eigentliche Element haben.

Je nach Anzahl der Variablen ist das dann aber nur eine Zeile (so in der Art)
Wert_Element = SmartTags("Element_" & Elementnr)

Wenn dann deine Variable je Element z.B. "Element_1000" heißt und jemand als Elementnr 1000 eingibt, dann wird der Wert von Element_1000 ausgegeben.

Das Variablen anlegen ist ja nur Copy-Paste aus dem SPS-Programm wenn alles in einem Projekt ist. Hängt von deiner Anzahl an Variablen je Element ab ob das so überhaupt funktioniert, und wie viele andere Variablen du hast. Ansonsten bist du recht schnell am Variablenlimit der Panels (imho 2048.
Also dass ich das richtig Verstehe (Bin WinCC Anfänger tbh): Ich kann in der HMI ein VBA-Script anfertigen, wo ich mir Symbolnamen als Strings zusammenbasteln kann, und mit diesen kann ich dann die jeweiligen Variablen in der SPS ansprechen? Und da müsste ich doch trotzdem jede "theroetisch mögliche Variable" auch in der HMI definieren, oder?


Spontan fällt mir da ein "Variablen-Multiplexen" im HMI. Vielleicht ist auch Bildbaustein sinnvoll? Das ist vollsymbolisch und auf jeden Fall besser als Variablennamen zusammenbasteln und Aktualisierung irgendwie realisieren.

Harald
Das wäre eigentlich die Methode der Wahl. Leider ist das projektieren des Multiplexens bei vielen Variablen sehr umständlich, und wenn ich mich recht entsinne war es zumindest zumindest bei V14 nicht möglich, das Multiplexen über Ex-/Import zu automatisieren um die Listen z.B. mit Excel zu erstellen. Kann aber sein, dass sich da mittlerweile etwas getan hat.
Hört sich interessant an, werde mich mit dem Stichwort mal befassen und schauen das das richtige für meinen Anwendungsfall ist.

Und Danke für die vielen Antworten! :)
 
Beim Multiplexen wie auch beim Zusammensetzen des Variablennamens müssen alle möglichen Variablen mit entsprechendem Symbol angelegt werden. Das Anlegen der Variablen ist normalerweise nicht das Problem, das ist ggf. die Anzahl an Variablen.

Klar, in der SPS multiplexen ist einfacher. Wenn es auch anders geht versuche ich aber zu vermeiden im SPS-Programm Funktionalitäten zu haben die eigentlich ins HMI gehören.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Problem an der Sache ist leider, dass bei mir die Elementnamen nicht in einer Variable stehen, und der Datenbankeintrag sozusagen garnicht weiß wo die Palette jetzt genau ist.
Und den Aufbau der Datenbankeinträge würde ich ungerne ändern, da die EInträge 1:1 als Telegramm an die anderen Gewerke verschickt werden; Würde mir also mehr arbeiten machen wie gewollt/geplant.
Und die Liste wo die Pointer auf den Elementen gespeichert werden, ist im Endeffekt nur ein DB mit mehreren Integer hintereinander, welche nur im Symbolnamen das eigentliche Element haben.


Also dass ich das richtig Verstehe (Bin WinCC Anfänger tbh): Ich kann in der HMI ein VBA-Script anfertigen, wo ich mir Symbolnamen als Strings zusammenbasteln kann, und mit diesen kann ich dann die jeweiligen Variablen in der SPS ansprechen? Und da müsste ich doch trotzdem jede "theroetisch mögliche Variable" auch in der HMI definieren, oder?




Hört sich interessant an, werde mich mit dem Stichwort mal befassen und schauen das das richtige für meinen Anwendungsfall ist.

Und Danke für die vielen Antworten! :)

Hat sich wohl erledigt das mit dem Multiplexen, da ich aktuell bei 12 Variablen Pro Datensatz * 300 Mögliche Datensätze = 3600 Variablen bin, wo das Gerät nur (wie von Thomas erwähnt) 2048 Variablen unterstützt. Und abgesehen davon ist das aktuell nur eine Funktion die ich mit dem Panel realisieren möchte.
Also ich glaube die Sache mit dem Case-Hardcoding, ist die Lösung welche am Wenigsten aufwand auf der HMI-Seite erfolgt, und dementsprechend für mich auch aktuell die attraktivste.
 
Zurück
Oben