WinCC Performance von Dynamik Dialogen in WinCC V7.3

ChristianP

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

Ich habe eine Frage zur Performance von Dynamik Dialogen in WinCC V7.3.
Wenn ich mehrere Objekte mit derselben Variablen sichtbar machen möchte, machte es dann sinn alle Objekte zuerst zu Gruppieren und dann die Gruppe sichtbar zu machen?
Oder spielt es keine Rolle, da die Verarbeitung im Hintergrund von WinCC das genau so macht als würde ich jedes Objekt einzeln sichtbar machen.
Mein Problem ist nämlich, dass ich eine Fliessanzeige habe (Pfeile wandern über die Rohrleitungen). Diese Anzeige besteht aus 3 Pfeilen pro Gruppe (Bit 0, 1 & 2). Diese Gruppe dupliziere ich dann solange bis die Rohre voll sind.
Nun habe ich aber an meinem Anlagen PC 3 Monitore und 2 UHD Fernseher angeschlossen. Dadurch wandern so viele Pfeile über die Bilder, das WinCC sogar schon unbenutzbar wurde. Deshalb hatte ich die Idee, dass man einfach eine Gruppe aus allen Pfeilen mit zB. Bit 0 macht und diese dann sichtbar macht. Aber das wird nur Sinn machen, wenn WinCC im Hintergrund dieses Skript nur einmal und nicht Hundertmal abarbeitet.
Der Trigger hinter den Objekten wird immer auf Änderungen ausgeführt und die Bits ändern sich alle 1,5 Sek.

Mein System:
WinCC V7.3
3 Monitoren a 1680 x 1050
2 UHD TV a 3860 x 2160
Windows 7 x64
Intel i5
8 Gb RAM

Vielen Dank schon mal im Voraus.
 
D.h. hinter jedem Pfeil hast du ein Skript? Ja, Skripte sind wirklich langsam in WinCC. Es gilt: je weniger desto besser. Gruppieren und dann die ganze Gruppe ausblenden dürfte also etwas bringen wenn du dadurch die Anzahl verringern kannst.
Etwas schneller ist das Verwenden der Animationsmöglichkeit über eine Grafikliste. Dann müsstest du dir aber vorher entsprechende Pfeilsymbole erstellen die leicht verschoben sind. Das ist natürlich sehr unkomfortabel wenn du Farbe, Größe und Richtung ändern willst.

Ich habe solchen animierten Pfeile zur Anzeige des Materialflusses in großem Stil bei Intouch angewendet (Ein/Ausblenden inkl. logischer Verknüpfungen mit Pumpen und etlichen Schiebern, und Zählvariable zum Verschieben des Objekts), da ist das für das Grafiksystem absolut keine nennenswerte Belastung, und die Pfeile werden da pixelweise verschoben. WinCC scheint in der Richtung etwas ungünstig programmiert zu sein, ich habe das bei WinCC mit dem Pfeilen ganz einfach bleiben lassen, so schön es auch aussieht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Erstmal vielen Dank für deine Schnell Antwort.
Ich benutze für die Pseudo Animation den Assistenten „Dynamik-Dialog…“, ich schätze das dies als Skript im Hintergrund von WinCC so abgearbeitet wird. Ich bin mir halt nicht sicher gewesen wie WinCC im Hintergrund mit Gruppierungen umgeht, aber ich werde es mal versuchen dies um zu ändern und werde berichten.
Fakt ist aber sobald ich die Pfeile nicht mehr aufrufe läuft alles normal.
Am liebsten würde ich diese Pfeile einfach löschen, leider habe ich bei diesem Kunde schon viele Anlage Aufgebaut bzw. Umgebaut. Somit komme ich leider nicht Drumherum.
 
Ich hab es ausprobiert und musste leider feststellen, dass es nicht funktioniert hat. Somit habe ich den Siemens Support angerufen und um Rat gefragt.
Dabei hat sich herausgestellt, dass wenn ich die Trigger auf „Änderung“ abfrage, dies die meiste Performance zieht. Somit hat er mir empfohlen alles auf 2 Sek. zu Triggern. Er hat mir auch eine nützliche Funktion mit auf dem Weg gegeben (Siemens ID: 23809757).
Diese ist für ein EA-Feld vorgesehen, womit es auch eiwandfrei funktioniert. Aber ich habe meinen Trigger an einer anderen Stelle (Dynamik Dialog/Trigger).
Nun sind leider meine VBA Kenntnisse nicht sonderlich gut. Und Google konnte mir auch nicht wirklich weiterhelfen.
Hier mein abgeänderter Code:
Code:
Sub ChangeTrigger()
Dim colSearchResults, objMember, iResult

Set colSearchResults = ActiveDocument.HMIObjects.Find(ObjectName:="*", ObjectType:="HMIPOLYGON")
iResult = colSearchResults.Count
MsgBox "Objects: " & CStr(iResult) & vbCrLf

For Each objMember In colSearchResults
objMember.Properties("Visible").Dynamic.CycleType = hmiVariableCycleType_1s
objMember.Selected = True
Next objMember
MsgBox "Done"
End Sub
 
Trigger "auf Änderung" hört sich erstmal schön ressourcenschonend an, dabei entspricht das der gleichen Funktion wie wenn du den Trigger auf den kleinsten Abfragezyklus einstellst (250ms ?). Bei einer externen Variable will man das in den meisten Fällen genau nicht haben.
 
Hast du das Skript denn schon mal ausgeführt? Erhältst du eine Fehlermeldung, und wenn ja in welcher Zeile?
Ich nutze VBA zur Projektierung so gut wie überhaupt nicht, darum kann ich da nichts konkretes zu sagen.
 
Ja habe ich. Um es erstmal zu testen habe ich nur ein Objekt auf ein leeres Bild kopiert und das Skript ausgeführt. Es kam die Meldung 1 Objekt gefunden und anschliessend die Meldung, das an dieser Stelle nicht geändert werden kann. Den genauen Wortlaut weiß ich jetzt nicht, hab gerade Feierbend gemacht. Morgen schicke ich einen Screenshot.
 
ich habe mir dein Skript mal angesehen. So wie du es hast funktioniert das Bearbeiten nur wenn du an der Eigenschaft "Sichtbar" direkt eine Variable angibst, um das Objekt bei 1 aus- und bei 0 einzublenden.

Wenn du einen Dynamik-Dialog verwendest, musst du dir erst das zugehörige Objekt für den Dynamik-Dialog holen und es dann bearbeiten. Im einfachsten Fall funktioniert das dann so:

Code:
Sub ChangeTrigger()
Dim colSearchResults, objMember, iResult
Dim objDynDialog As HMIDynamicDialog
Dim objVariableTrigger As HMIVariableTrigger

Set colSearchResults = ActiveDocument.HMIObjects.Find(ObjectName:="*", ObjectType:="HMIPOLYGON")
iResult = colSearchResults.Count
MsgBox "Objects: " & CStr(iResult) & vbCrLf

For Each objMember In colSearchResults
    Set objDynDialog = objMember.Properties("Visible").Dynamic
    For Each objVariableTrigger In objDynDialog.Trigger.VariableTriggers
        objVariableTrigger.CycleType = hmiVariableCycleType_1s
    Next objVariableTrigger
objMember.Selected = True
Next objMember
MsgBox "Done"
End Sub

Das Objektmodell ist in der WinCC Hilfe unter "VBA zur automatisierten Projektierung" beschrieben. Zumindest habe ich da die Informationen für das obige Skript gefunden.
 
Das Skript funktioniert perfekt. Besten Dank.
Nur leider hat es nicht den gewünschten Effekt gebracht. Ich habe damit auch schon mit dem Siemens Support gesprochen. Es wird wahrscheinlich an der Masse der Objekte liegen.
Da die Inbetriebnahme Zeit hier langsam aber sicher sich dem Ende nähert, musste ich die Hose beim Kunde runterlassen.
Ich habe alle Pfeile auf den UHD Fernsehern gelöscht und jetzt läuft es einigermaßen flüssig.
Aber trotzdem besten Dank für der Mühe Thomas_V2.1.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie viele Pfeile hast du denn im Bild gehabt?
Nur so als Hausnummer, damit man weiß ab wann es nicht mehr praktikabel ist.

Hast du auch noch mal probiert ob es einen Unterschied macht, wenn du Pfeile gruppierst und dann nur die Gruppe sichtbar schaltest?
 
Mit der Gruppierung hatte ich ein Versuch gestartet und hatte ein Großteil der Pfeil in 3 Gruppen aufgeteilt und hatte diese dann Ein- & Ausgeblendet. Dies hat aber keinen Unterschied gebracht.

Auf einen UHD Fernseher (ein Bildaufruf) hatte ich über 3300 Pfeile (Schön dass das Skript das Zählen für mich übernommen hat), wobei nicht alle angezeigt werden. Es kommt natürlich drauf an, welche Leitung gerade verwendet wird und diese sind dann ja noch in 3 Bits aufgeteilt. Dementsprechend würde ich schätzen, dass so ab 200 – 250 Pfeilen WinCC merkbar langsamer wird. Aber das ist natürlich auch nicht das ein zigste was angezeigt wird (EA-Felder, Rührwerke, Motoren, Ventile und Farbumschläge usw).
 
Zurück
Oben