WinCC Kurvenanpassung per Maus in Runtime

Wyndulf

Level-2
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
WINCC V7.5

ich möchte Kurven als Polygonzug darstellen. Diese Kurven sollen per Drag and Drop veränderbar sein an ihren jeweiligen Punkten während der Runtime.

Daher erstmal wie kann ich Objekte per Drag und Drop verschieben bei aktiver Runtime?
bzw. wie frage ich die Mausposition ab?
 
Die Mausposition kann man im WinCC V7.5 mit einem Skript abragen
Mit der Funktion GetCursorPos(LPPOINT lpPoint) können Sie die aktuelle Mausposition ermitteln.
Siehe
Wie kann die Mausposition in einer C-Aktion abgefragt werden?
Link: http://support.automation.siemens.com/WW/view/de/2028968

Um im WinCC V7.5 Kurven (Werte) als Polygonzug darzustellen must Du das WinCC Online Trend Control verwenden.

Wie lassen sich die Kurvenwerte am Lineal des WinCC OnlineTrendControl auslesen?
https://support.industry.siemens.com/cs/de/de/view/50353471

Wie kann in WinCC der Zeitbereich vom OnlineTrendControl zur Runtime geändert werden?
https://support.industry.siemens.com/cs/de/de/view/34344393

Wie können über ein C- oder ein VBS-Skript die einzelnen Kurven des WinCC Online Trend Control mit neuen Variablen versorgt werden?
http://support.automation.siemens.com/WW/view/de/23416667
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Mausposition kann man im WinCC V7.5 mit einem Skript abragen
Mit der Funktion GetCursorPos(LPPOINT lpPoint) können Sie die aktuelle Mausposition ermitteln.
Siehe
Wie kann die Mausposition in einer C-Aktion abgefragt werden?
Link: http://support.automation.siemens.com/WW/view/de/2028968

Um im WinCC V7.5 Kurven (Werte) als Polygonzug darzustellen must Du das WinCC Online Trend Control verwenden.

Wie lassen sich die Kurvenwerte am Lineal des WinCC OnlineTrendControl auslesen?
https://support.industry.siemens.com/cs/de/de/view/50353471

Wie kann in WinCC der Zeitbereich vom OnlineTrendControl zur Runtime geändert werden?
https://support.industry.siemens.com/cs/de/de/view/34344393

Wie können über ein C- oder ein VBS-Skript die einzelnen Kurven des WinCC Online Trend Control mit neuen Variablen versorgt werden?
http://support.automation.siemens.com/WW/view/de/23416667
Bezügl. der Polygonzugs soll jeder Punkt(X,Y) mit einer Variable Verknüpft sein und so dargestellt werden(diese Werte werden ebenfalls an die PLC geleitet.
Ist dies ebenfalls umsetzbar mit Online TrendControl? wenn ja wie?
 
Es gibt im WinCC V7.5 zwei Controls mit denen Du Werte grafisch darstellen kannst.
Das WinCC Online Trend Control und das WinCC Function Trend Control.
Mit dem WinCC Online Trend Control werden archivierte oder online Werte über die Zeit dargestellt
Mit dem WinCC Function Trend Control kann man Werte von Variablen als Funktion einer anderen Variablen darzustellen.

WinCC V7.5: Arbeiten mit WinCC
https://support.industry.siemens.com/cs/de/de/view/109760739
6.5.4.4 Vor WinCC V7: Prozesswerte als Funktion einer anderen Variablen ausgeben

Man kann jedoch mit keinem der beiden Controls Werte so darstellen das jeder Punkt(X,Y) mit einer Variable Verknüpft ist und dann an die PLC gesendet wird.
Für Deine Anforderung müsstest Du ein einiges .net Control oder in WinCC V8.1 auch CWC (Customer Web Control erstellen)

WinCC V7.5: Arbeiten mit WinCC
https://support.industry.siemens.com/cs/de/de/view/109760739
3.8.7.15 So fügen Sie ein .NET-Control ein
3.8.7.16 So fügen Sie ein WPF-Control ein
 
Zu dem Thema ist mir doch noch was eingefallen:
Es gibt auch die Möglichkeit in einem WinCc Function Trend Control Werte aus einem Variablenarray darzustellen. Möglicherweis hilft dir das weiter.
Siehe
WinCC Scripting: VBS, ANSI-C, VBA
1.15.2.13 Dynamisieren der Controls
Beispiel 2: WinCC FunctionTrendControl mit Werteversorgung über Array
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zu dem Thema ist mir doch noch was eingefallen:
Es gibt auch die Möglichkeit in einem WinCc Function Trend Control Werte aus einem Variablenarray darzustellen. Möglicherweis hilft dir das weiter.
Siehe
WinCC Scripting: VBS, ANSI-C, VBA
1.15.2.13 Dynamisieren der Controls
Beispiel 2: WinCC FunctionTrendControl mit Werteversorgung über Array
Wie lese ich dann jeweils die Tag Variablen ein?
habe aktuell als VBScript folgendes aber es funktioniert nicht.

Function Left_Trigger(ByVal Item)
Dim lngIndex
Dim dblAxisX(10)
Dim dblAxisY(10)
Dim objTrendControl
Dim objTrend

Set objTrendControl = ScreenItems("Control1")
Set objTrend = objTrendControl.GetTrend("Kurve 1")


For lngIndex = 0 To 10
dblAxisX(lngIndex) = CDbl(HMIRuntime.Tags("KurvenwertX" & (IngIndex + 1)))
dblAxisY(lngIndex) = CDbl(HMIRuntime.Tags("KurvenwertY" & (IngIndex + 1)))
Next

objTrend.InsertData dblAxisX, dblAxisY

End Function

Bin neu in der ganzen Thematik kann daher auch sein das der ganze Code mies ist.
 

Anhänge

  • Screenshot 2026-04-09 105253.png
    Screenshot 2026-04-09 105253.png
    68,7 KB · Aufrufe: 1
Du hast die Read Funktion vergessen !
Es mus heißen:
dblAxisX(lngIndex) = CDbl(HMIRuntime.Tags("KurvenwertX" & (lngIndex + 1)).Read)
dblAxisY(lngIndex) = CDbl(HMIRuntime.Tags("KurvenwertY" & (lngIndex + 1)).Read)

Wie man Variablen mit VBS liest siehe Handbuch
1.14.2.21 Tag-Objekt
1.14.2.23 TagSet-Objekt (Auflistung)
z.B. HMIRuntime.Tags("NeueVariable_3").Read

Um Fehler zu finden kannst Du das Tool apdiag verwenden unter
C:\Program Files\Siemens\WinCC\uTools
Wenn das Tool offen ist Diagnosefenster unter Output Window – Open öffnen und Meldung prüfen
 
Du hast die Read Funktion vergessen !
Es mus heißen:
dblAxisX(lngIndex) = CDbl(HMIRuntime.Tags("KurvenwertX" & (lngIndex + 1)).Read)
dblAxisY(lngIndex) = CDbl(HMIRuntime.Tags("KurvenwertY" & (lngIndex + 1)).Read)

Wie man Variablen mit VBS liest siehe Handbuch
1.14.2.21 Tag-Objekt
1.14.2.23 TagSet-Objekt (Auflistung)
z.B. HMIRuntime.Tags("NeueVariable_3").Read

Um Fehler zu finden kannst Du das Tool apdiag verwenden unter
C:\Program Files\Siemens\WinCC\uTools
Wenn das Tool offen ist Diagnosefenster unter Output Window – Open öffnen und Meldung prüfen
ich habe es inzwischen hinbekommen den Graphen darzustellen.
Wie schaffe ich es das der Graph nur die Verbindungen zwischen den Punkten anzeigt und nicht auf 0 springt bzw. zurückspringt siehe anhang.
ich habe es mit min max begrenzung versucht aber so ganz will es nicht.
1 Punkt (100,1700)
letzter Punkt(2100,1000)

Code:


Function Left_Trigger(Byval Item)
Dim lngIndex
Dim dblAxisX(50)
Dim dblAxisY(50)
Dim objTrendControl
Dim objTrend
Dim xMin, xMax, yMin, yMax

xMin = 1E+20
xMax = -1E+20
yMin = 1E+20
yMax = -1E+20



Set objTrendControl = ScreenItems("Control1")
Set objTrend = objTrendControl.GetTrend("Kurve 1")


For lngIndex = 0 To 49

dblAxisX(lngIndex) = CDbl(HMIRuntime.Tags("KurvenwertX" & (lngIndex + 1)).Read)
dblAxisY(lngIndex) = CDbl(HMIRuntime.Tags("KurvenwertY" & (lngIndex + 1)).Read)

If dblAxisX(lngIndex) < xMin Then xMin = dblAxisX(lngIndex)
If dblAxisX(lngIndex) > xMax Then xMax = dblAxisX(lngIndex)

If dblAxisY(lngIndex) < yMin Then yMin = dblAxisY(lngIndex)
If dblAxisY(lngIndex) > yMax Then yMax = dblAxisY(lngIndex)


Next

objTrendControl.XAxisBeginValue = xMin
objTrendControl.YAxisBeginValue = yMin
objTrendControl.XAxisEndValue = xMax
objTrendControl.YAxisEndValue = yMax
objTrend.InsertData dblAxisX, dblAxisY

End Function
 

Anhänge

  • Screenshot 2026-04-09 150934.png
    Screenshot 2026-04-09 150934.png
    44,5 KB · Aufrufe: 6
Zuviel Werbung?
-> Hier kostenlos registrieren
So wie ich das sehe must Du die Null-Werte ausblenden wenn diese nicht angezeigt werden sollen.
D.h. in der Schleife mit if (wert = 0) dann nicht anzeigen. Else wert anzeigen
Du kannst mit HMIRuntime.Trace() die Variablenwerte auch ausgeben und im Tool Apdiag wie bereits beschrieben überprüfen.
 
Habe mal kurz einen Test auf meinem System gemacht. Die Kurve fängt auch bei mir mit 0 an, die lange Linie auf 0 gibt es jedoch nicht. D.h ein Werte Paar ist vermutlich 0 bei Dir

Noch ein Hinweis: Wenn Du die angezeigten Werte auch bearbeiten und an die SPS senden möchtest kannst Du dies entweder über E/A-Felder machen oder Du kannst Die Werte von der SPS in das Anwenderarchiv (User Archive) schreiben hier über das WinCC User Archive Control bearbeiten an die SPS senden und auch in dem WinCC Function Trend Control anzeigen.

In dem WinCC Function Trend Control gibt es auch die Möglichkeit Werte aus dem WinCC User Archive (z.b. Rezepturwerte) anzuzeigen. Unter Eigenschaften -> Datenanbindung -> Datenversorgung -> Anwenderarchiv auswählen. Ein Anwenderarchiv mus angelegt sein.

Für das WinCC User Archive brauchst Du eine extra Lizenz !
 
Zurück
Oben