TIA Comfortpanel TP1500 Popupbild dynamisch versorgen

ducati

Level-3
Beiträge
9.635
Reaktionspunkte
2.745
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

mal eine Frage zu einem ordentlichen Konzept, folgendes soll umgesetzt werden:

- in der S7-1500 gibt es einen Global-DB mit einem Array of Struct für die Daten von sagen wir mal 100 Motoren, also jedes Arrayelement beinhaltet die Daten für einen Motor, z.B. Bool für Betrieb, Störung, Hand, Auto, DINT für Betriebsstunden, Doppelwort für Steuerbits vom Panel, also Bits mit denen Der Motor z.B. eingeschaltet werden kann usw.
- Auf dem Panel soll jetzt durch Klick auf verschiedene Motorsymbole EIN Poupbild aufgerufen werden, welches mit den Daten des jeweiligen Motors verbunden ist.
- Es soll nur ein Popupbild geben
- Änderungen an der SPS-Software sollten nicht gemacht werden, der Global-DB ist fix.
- in dem Popupbild soll noch ein variabler Text, also Motor1 oder Motor2 usw. angezeigt werden

Hat da jemand eine gute Lösung parat, oder kennt nen Beitrag oder FAQ? Ich hab da schon ein par Ideen, aber will nicht in die falsche Richtung loslaufen.
Scripte kann man sicherlich schreiben, aber sollten nicht zu viele sein. Die Texte sollten idealerweise irgendwo stehen, wo man sie in einem Rutsch aus Excel rüberkopieren kann...

Würd mich über Ideen freuen.

Gruß.
 
Hallo ducati,

Du kannst Die Array-Struktur über eine Variable multiplexen.
Multiplex.jpg

Auf das dropdown an der markierten Stelle klicken und eine Int oder Dint als Indexvariable einfügen.

Diese Int oder Dint beschreibst Du dann bevor Du das Popup aufrufst mit der gewünschten Indexnummer, dazu kannst Du noch eine String-Variable mit dem Motornamen füllen.
Quasi eine Schaltfläche mit den Funktionen am Ereignis "Drücken":
- Setze Variable "indexvariable":=gewünschte Nummer
- Setze Variable "Motorname"":=gewünschter Text

Funktion am Ereignis Loslassen:
- Zeige Popup "MotorFaceplate"

Die Texte kannst Du auch als Textliste übergeben, aus der Du über den selben Index wie die Arraystruktur den Namen auswählst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ducati,

Du kannst Die Array-Struktur über eine Variable multiplexen.
Anhang anzeigen 44942

Auf das dropdown an der markierten Stelle klicken und eine Int oder Dint als Indexvariable einfügen.

Diese Int oder Dint beschreibst Du dann bevor Du das Popup aufrufst mit der gewünschten Indexnummer, dazu kannst Du noch eine String-Variable mit dem Motornamen füllen.
Quasi eine Schaltfläche mit den Funktionen am Ereignis "Drücken":
- Setze Variable "indexvariable":=gewünschte Nummer
- Setze Variable "Motorname"":=gewünschter Text

Funktion am Ereignis Loslassen:
- Zeige Popup "MotorFaceplate"

Die Texte kannst Du auch als Textliste übergeben, aus der Du über den selben Index wie die Arraystruktur den Namen auswählst.

OK, danke, aber ich kapiers noch nicht ;) Wie sieht denn Dein HMI-Datentyp aus? Ist da da das komplette Array drin, oder nur ein Element?

Was ist diese {4} bzw [4] bei der PLC Variable?

Noch ein par Nebenbedingungen:
- TIA V13 SP1 Upd9
- kein optimierter DB
- absolute Adressierung in den HMI-Variablen, bzw. SPS ist nicht zwingend im gleichen Projekt wie das Comfortpanel

Danke.
 
Hallo ducati.

Ob es mit Deinen Randbedingungen klappt, kann ich nicht sagen, dass musst Du prüfen.
die [4] ist ein Index des Array of UDT in der Steuerung. Fürs Multiplexen kann man einen index wahlweise nehmen, dieser wird im HMI dann von der Indexvariable ersetzt.

Leider habe ich nicht darauf geachtet, dass Du einen Array of Struct hast, ob es damit geht, weiß ich nicht. Ebenso ob es in V13 geht. Ebenso, ob es mit nicht optimiertem DB geht :(
Bei einem Array of UDT ist der Datentyp in PLC und HMI der gleiche.

Es gibt sonst HMI-seitig noch die Möglichkeit des HMI-Multiplexen, das hab ich aber noch nie genutzt. Schau mal in der Hilfe.

Sorry, ich hab das so on-the-fly geschireben, ich fürchte mit Deinen Rand-Bedingungen funktioniert es nicht. aber teste doch einfach mal :)
 
Es gibt sonst HMI-seitig noch die Möglichkeit des HMI-Multiplexen, das hab ich aber noch nie genutzt. Schau mal in der Hilfe.

Sorry, ich hab das so on-the-fly geschireben, ich fürchte mit Deinen Rand-Bedingungen funktioniert es nicht. aber teste doch einfach mal :)

Das mit dem Multiplexen mach ich grad, Deine Variante sieht auch gut aus, nur hab ich in der SPS keine UDTs ... Ich probier grad, aber irgendwie krieg ich Deine Variante nicht hin... Nebenbei muss das ganze auch noch mit 300/400 funktionieren...

Danke schonmal,
Gruß.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das mit dem Multiplexen mach ich grad, Deine Variante sieht auch gut aus, nur hab ich in der SPS keine UDTs ... Ich probier grad, aber irgendwie krieg ich Deine Variante nicht hin... Nebenbei muss das ganze auch noch mit 300/400 funktionieren...

Danke schonmal,
Gruß.


Auch mit 300/400 uiui...
 
sollte gehen,

hab jetzt unter der Hilfeüberschrift:

"Adress-Multiplexen projektieren mit absoluter Adressierung"

noch ne 3. Variante gefunden... sollte funktionieren...

Bei der 2 Variante (HMI-Multiplexen) kann ich nicht mit Buttons auf die gemultiplexten Variablen schreiben :(

Schaun wir mal, wie weit ich komme... Mit ein par Scripten solltes aber gehen.

Gruß.
 
Mal so ganz frei aus der Hüfte geschossen.

Wenn du für dein Popup-Bild einen eigenen Bereich in einem DB belegst (DB_HMI.Popup.Motordaten....) und dort alle Variablen hast, welche auf dem Popup angezeigt bzw. zu bedienen sind, sollte das doch in etwa so funktionieren:

Beim Aufruf des jeweiligen "Motorpopus" machst du beim Ereignis wie oben schon erwähnt "Setze Variable "indexvariable":=gewünschte Nummer" und eben den Aufruf des Popups.
Die Indexvariable bezieht sich auf eben den entsprechenden Motor (1, 2, 3 ...).
Mit dieser Indexvariable schiebst du die Motordaten in deinen DB_HMI.Popup.Motordaten - Bereich, ergo, diese werden schon mal vom jeweiligen Motor angezeigt. Für die zu bedienenden Tasten / Funktionen gehts natürlich genau in die andere Richtung. Triggerst du eine Taste, wirkt diese aus dem "DB_HMI....."-Bereich auf den jeweiligen Motor. Deine Referenz ist ja die Indexvariable.

Müsstest du nur dann halt beim Schließen des Popus den Index auf z.B. 0 schreiben, und null ist halt dann einfach ein leerer "dummy-Bereich" (als Beispiel)

Ich hoffe du verstehst in etwa was ich meine. Das würde dann ohne Scripte gehen.


Gruß

-chris
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mal so ganz frei aus der Hüfte geschossen.

Wenn du für dein Popup-Bild einen eigenen Bereich in einem DB belegst (DB_HMI.Popup.Motordaten....) und dort alle Variablen hast, welche auf dem Popup angezeigt bzw. zu bedienen sind, sollte das doch in etwa so funktionieren:

Beim Aufruf des jeweiligen "Motorpopus" machst du beim Ereignis wie oben schon erwähnt "Setze Variable "indexvariable":=gewünschte Nummer" und eben den Aufruf des Popups.
Die Indexvariable bezieht sich auf eben den entsprechenden Motor (1, 2, 3 ...).
Mit dieser Indexvariable schiebst du die Motordaten in deinen DB_HMI.Popup.Motordaten - Bereich, ergo, diese werden schon mal vom jeweiligen Motor angezeigt. Für die zu bedienenden Tasten / Funktionen gehts natürlich genau in die andere Richtung. Triggerst du eine Taste, wirkt diese aus dem "DB_HMI....."-Bereich auf den jeweiligen Motor. Deine Referenz ist ja die Indexvariable.

Müsstest du nur dann halt beim Schließen des Popus den Index auf z.B. 0 schreiben, und null ist halt dann einfach ein leerer "dummy-Bereich" (als Beispiel)

Ich hoffe du verstehst in etwa was ich meine. Das würde dann ohne Scripte gehen.


Gruß

-chris

Am SPS-Programm soll nach Möglichkeit nichts geändert werden ;)

Hab's jetzt soweit schon am laufen, schreib morgen mal hier, wie ich's umgesetzt habe...

Gruß.
 
ich machs jetzt im Panel mit Multiplexing auf absolute DB-Adressen ("Adress-Multiplexen projektieren mit absoluter Adressierung")

HMI_Multiplex.jpg

In einer internen Variablen (DB1_Adresse) steht die absolute DB-Adresse der jeweiligen Instanz, diese wird bei Klick auf das entsprechende Motorsymbol gesetzt.

Im Popupbild werden werden die "gemultiplexten" externen Variablen verwendet. Diese können gelesen, beschrieben, über Buttons gesetzt usw. werden. Funktioniert alles.

Die Adressen kann man auch in nem Script berechnen lassen, und muss am Motorsymbol nur die jeweilige Instanznummer als Zahl antragen...

Gruß und danke!
 
Zuletzt bearbeitet:
Zurück
Oben