Beispiel. WinCC Flex PC RT. X-Y Kurven mittels ActiveX.

Beiträge
8.300
Reaktionspunkte
1.888
Zuviel Werbung?
-> Hier kostenlos registrieren
(Dies ist für Larry Laffer).

Ich verwende der Csxgraph ActiveX Komponent von chestysoft.

Damit kann ich Kurven frei programmieren, wo jeden Kurven-Punkt mit X-Achse und Y-Achse Werte gegeben wird.

Es gibt einige Einschränkungen.
Man kann nicht Punkte und Linien misschen. Es heisst entweder Punkte oder Linien.
Man kann nicht zwei Kurve-Linien mit dieselbe Farbe starten.
Man kan nur ganz-Zahligen Werte darstellen.
Der ActiveX funktioniert nicht bei Win CE.

Code:
Dim chart, i, Xm, Co
 
On Error Resume Next
 
Set chart=HmiRuntime.Screens("F07a_XmCo_points").ScreenItems("XmCoPlot")
chart.Password = "xxxxxxxxxxxxx" ' Der Paswort bekommt man von Chestysoft.
chart.ClearData
chart.GraphType = 3
chart.PointStyle = 1
chart.ShowLine = False 
chart.OriginX = 36
chart.OriginY = 462
chart.MaxX = 560
chart.MaxY = 462
chart.XTop = 650
chart.YTop = 500
chart.YOffset = -100
chart.XGrad = 50
chart.YGrad = 100
chart.LegendX = 400
chart.LegendY = 20
 
If Err.Number <> 0 Then
 ShowSystemAlarm "XmCoPlot error #1" & Err.Number & " " & Err.Description
 Err.Clear 
 Exit Sub
End If
 
chart.AddExtraLine 36, 385, 580, 385 , 1, 0, &hE0E0E0E0 
 
chart.PointSize = 1
For i = 0 To 64
 If SmartTags("plot_debug_on") Then
  SmartTags("plot_debug_i") = i
 End If
 Co = i * 10
 Xm = Int((SmartTags("KURV_VISU")(i)) * 100 )
 If SmartTags("plot_debug_on") Then
  SmartTags("plot_debug_co") = Co
  SmartTags("plot_debug_xm") = Xm
 End If

 If Co <> 0 Then 
       chart.AddPoint Co , Xm, &hFFFF77, "WD/CO Adapted [%/%]" '&hFFFF77=light blue. Wont be more light blue than that.
    End If
 
    If Err.Number <> 0 Then
     ShowSystemAlarm "XmCoPlot error # 2" & Err.Number & " " & Err.Description
     Err.Clear 
     Exit Sub
    End If

Next
 
chart.PointSize = 2
For i = 0 To 64
 If SmartTags("plot_debug_on") Then
  SmartTags("plot_debug_i") = i
 End If
 Xm = Int((SmartTags("XmCO_ST1_Xm")(i)) * 100 )
 Co = Int((SmartTags("XmCO_ST1_Co")(i)) * 10 )
 If SmartTags("plot_debug_on") Then
  SmartTags("plot_debug_co") = Co
  SmartTags("plot_debug_xm") = Xm
 End If

 If Co <> 0 Then 
       chart.AddPoint Co , Xm, vbBlack, "WD/CO Meas [%/%]"
    End If
 
    If Err.Number <> 0 Then
     ShowSystemAlarm "XmCoPlot error # 3" & Err.Number & " " & Err.Description
     Err.Clear 
     Exit Sub
    End If

Next
 
chart.DrawGraph
 
If Err.Number <> 0 Then
 ShowSystemAlarm "XmCoPlot error #4" & Err.Number & " " & Err.Description
 Err.Clear 
    Set chart=Nothing
 Exit Sub
End If
 
Set chart=Nothing

Angehängt sind zwei Beispiele. Ein Beispiel mit Linien. Ein Besipiel mit ein Streufeld (Punkte).

Viel Glück damit !
 

Anhänge

  • Beispiel_linien.jpg
    Beispiel_linien.jpg
    76,8 KB · Aufrufe: 274
  • Beispiel_punkte.jpg
    Beispiel_punkte.jpg
    63,8 KB · Aufrufe: 238
hallo leute!

ich bin selber eigentlich kein java programmierer ( eher code-schnipsler)...
aber mit java hat man echt mal ne alternative zu den sehr beschränkten wincc Kurven tools.

mit java ist theoretisch alles frei programmierbar, einfache mehrlinige/punktierte kurven, histogramme, verschiedenste diagramme und und und...
per SQL query denk ich mal, ist das keine grosse sache.
der vorteil: kostet nix

EDIT: ich glaub bei dem programm:
http://www.eltima.com/de/products/java-chart/
braucht man nicht wirklich viel Java erfahrung

oder eben selber bissl rumschnipseln
http://java-source.net/open-source/charting-and-reporting

grüsse
 
Zuletzt bearbeitet:
über die webbrowser einbindung.
eine selbstgebastelte html seite anzeigen, wo du dein java applet drin startest/ausführst.

es lässt sich das eingebettete fenster pixelgenau einstellen von der grösse her...
der einzige nachteil ist der abgestufte 3d rahmen des embedded browser in wincc flex.
hab leider noch keine möglichkeit gefunden den zu umgehen, so dass man gar nix merkt das das ein browser ist und glaubt das gehört direkt zur visu.

EDIT: funktioniert aber eben nur auf pc's und panels mit winCE, win2000/XP, win vista/7, winmobil...
auf allen anderen panels und terminals mit einer linux distribution als OS funktioniert es nicht, da hier kein MS internet explorer vorhanden ist.
hab mich aber für die linux geschichte noch nicht wirklich auseinandergesetzt.

grüsse
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
du musst den MySQL server vom winccflex produkt installieren (der glaub ich beim advanced produkt automatisch dabei ist).

mit dem SQL server die benötigten DBs der steuerung austauschen.
im java applet eine SQL query programmieren (gibts schon alles fix und fertig gecodet)

daten per java visualisieren.

grüsse
 
Ähhhh ... ohne mich damit jetzt tiefer auseinander setzen zu wollen ... Bis du wirklich sicher, dass das einfacher in der Handhabung und im Machen ist als die von Jesper vorgestellte Geschichte ...?!
 
Wenn ich es richtig verstanden habe:
Variabel-Daten zyklisch mit ein SQL Datenbank austauschen (per VBS vermute ich).
Java Program selbst erstellen.
Java Program in ein Webseite einbetten.
Webseite aufrufen.

Das scheint ziemlich einfach zu sein. :icon_wink:
Hast du ein Beispiel ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
tut mir leid, ein konkretes beispiel hab ich jetzt nicht parat.
in meiner alten firma hat das einer gemacht. ich war erstaunt vom funktionsumfang dieses diagramms.
eventuell kann ich diesen kollegen wiedermal besuchen, dann seh ich mir noch mal den code an und poste den hier.

ich persönlich arbeite bei meinem wincc flex projekt auch mit Java und javascript im Browser. ich verwende es eher für banale sachen, wie etwa das bild einer netzwerkkamera in die winccflex runtime zu holen.

einen nachteil hat natürlich java schon... werden die operationen komplexer, benötigt man mehr rechenleistung, wo man eventuell bei panels schnell mal an die grenzen stösst.

grtz
 
@JesperMP:
Ich muss diesen Thread aus aktuellem Anlass noch einmal hervorholen.
Ich habe da noch ein paar Fragen, nach Möglichkeit an den TE :

- hast du das schon öfter ohne Probleme zu bekommen so eingesetzt ?
- hast du auch schon einmal versucht, das Ganze mit dem MsChart von Microsoft zu machen ? Einbinden läßt sich der auch.
- gehen auch mehrere Profilkurven in einer Anzeige ?
- wenn mehrere unterschiedliche Kurven mit unterschiedlichem Verlauf gehen - wie werden die bei AddPoint identifiziert ? Nur über die Kurvenfarbe ?
- wie triggerst du das Anzeigen ? Mit dem Statuswechsel des Kurvenbits 1 -> 0 ? Oder anders ?

Zu meiner Aufgabenstellung :
Ich habe ein Werte-Array mit Kraftwerten und eins mit dazu passenden Positionswerten, jeweils Real, die ich mir aus der Steuerung lade. Die Anzahl der Werte ist unbestimmt (irgend etwas zwischn 100 und 200) aber das sollte auch nicht die Rolle spielen. Zu dem Werten möchte ich außerdem noch gerne den Grenzwert-Rahmen einblenden. Der ist ein Parallelogramm und besteht aus 7 x- und y-Werten.
Würde das so gehen ?
Wie lange würde Flex2008 PC-Runtime schätzungsweise brauchen, um diese Anzahl von Werten an den ActiveX zu übertragen ?

Danke schon einmal im Vorraus.
 
- hast du das schon öfter ohne Probleme zu bekommen so eingesetzt ?
Ja. Ich verwende es in unser Standard Programme.

- hast du auch schon einmal versucht, das Ganze mit dem MsChart von Microsoft zu machen ? Einbinden läßt sich der auch.
Habe ich nicht probiert. Obwohl einbinden geht, bezweifle ich das es lauft innerhalb von WinCC Flex RT. Und, ist MsChart Lizenz-Frei ? (vermute nicht).

- gehen auch mehrere Profilkurven in einer Anzeige ?
Ja. Jeder Kurve muss eine eigene Farbe haben.

- wenn mehrere unterschiedliche Kurven mit unterschiedlichem Verlauf gehen - wie werden die bei AddPoint identifiziert ? Nur über die Kurvenfarbe ?
Ja (so weit meiner Erfahrung).

- wie triggerst du das Anzeigen ? Mit dem Statuswechsel des Kurvenbits 1 -> 0 ? Oder anders ?
Per Button und Maus-Klick. Es Ruft den VBS Skript auf.
Ich habe auch ein Tip um die Tags zu aktualisieren. Sonnst sind sie mit Nullen befüllt weil das Skript aktualisiert bevor die Tags.
Muss es zuerst finden.


Zu meiner Aufgabenstellung :
Ich habe ein Werte-Array mit Kraftwerten und eins mit dazu passenden Positionswerten, jeweils Real, die ich mir aus der Steuerung lade. Die Anzahl der Werte ist unbestimmt (irgend etwas zwischn 100 und 200) aber das sollte auch nicht die Rolle spielen. Zu dem Werten möchte ich außerdem noch gerne den Grenzwert-Rahmen einblenden. Der ist ein Parallelogramm und besteht aus 7 x- und y-Werten.
Würde das so gehen ?
Ja. Das ActiveX "malt" einfach Linien von Punkt zu Punkt
Wie lange würde Flex2008 PC-Runtime schätzungsweise brauchen, um diese Anzahl von Werten an den ActiveX zu übertragen ?
So etwas aktualisiert ohne Visuelle Verzögerung in meiner Anwendung.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
NB: In WinCC v11 soll es angeblich auch X/Y Kurven geben.
Aber blöd ist das die Kurven werden als Splines dargestellt (?!).
Also, weiche Kurven, auch wenn es kein Sinn dafür gibt !
Bin nicht sicher ob die Splines nicht ausschaltbar sind. Wenn nicht, ist es für meine Anwendung völlig unanwendbar.
 
Hallo Jesper,
Danke für das Feedback.
Ich habe mich gestern sehr intensiv mit der Sache auseinandergesetzt. Mein Fazit ist allerdings niederschmetternd :
- das Demo-ActiveX von Chestysoft läßt sich zwar als Control einbinden aber nicht auf den Bildschirm bekommen.
- der MsChart läßt sich einbinden und auf den Bildschirm bekommen, wird aber nicht in der Runtime angezeigt und steht dort als Objekt auch nicht zur Verfügung - es wird einfach abgeschaltet oder ignoriert. Ich habe es auf dem Runtime-Rechner selbstverständlich auch registriert.

Kommen wir also zu dem Chestysoft-OCX :
- Wie stellst du es an das Flex2008 bereit ist es zu verwenden ?
- Welche Version hast du davon ?

Zum TIA-Portal :
Ja, ich habe auch damit schon mal geliebäugelt - aber die aktuelle Situation läßt mich, wie auch viele andere, davon Abstand nehmen. Ist müßte an meinen Programmen zu große Modifikationen machen um es nutzen zu können (wegen der TIA-Bugs).
Dennoch hatte ich mir das f(x)-Diagramm schon mal angesehen, bin mir aber nicht sicher, ob es tatsächlich das macht, was ich damit machen möchte - also einfach bit-getriggerte in der SPS vorliegende Profilkurven darzustellen, im Grunde wie es die Standard-Darstellung macht nur eben als 2D ... :rolleyes:

Ich würde mich freuen, wenn du zu dem Chestysoft-Thema noch etwas mehr schreiben könntest.
Dafür schon einmal Danke !
 
Kommen wir also zu dem Chestysoft-OCX :
- Wie stellst du es an das Flex2008 bereit ist es zu verwenden ?
- Welche Version hast du davon ?
Demoversion lauft, nur mit ein CopyRight Warnung in die Ecke.
Habe es am laufen unter WinCC Flex RT 2005 SP1 HF7, 2007 HF4, 2008, 2008 SP1, 2008 SP2.

ActiveX muss installiert und registriert sein auf den Ziel PC (Einfach den Installationsprogram fahren).
Verwendest du mein Skript als Vorlage ?
Aktivierst du den Skript ?
Probier ein Button mit den Skript.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei dem Script bin ich noch gar nicht.
Ich bekomme das OCX zwar in Flex2008-SP2 als Control registriert. Ich bekomme es aber nicht auf der Anzeigeseite plaziert - im Entwicklungssystem - es ist kurz da und wird dann sofort wieder entfernt.
 
Hallo Jesper,
das hat nicht mit meinem Projekt zu tun. Wenn ich das ActiveX "Draw" aus dem bereich "Eigene Controls" auf den Bildschirm ziehen möchte und irgendwo loslasse bekomme ich im Ausgabefenster die Meldung "Error : ActiveX Control vom Typ Draw konnte nicht erstellt werden. Keine Lizenz vorhanden."
Deshalb meine Frage nach der von dir verwendeten Version. Vielleicht ist meine gerade erst heruntergeladene Version neuer als deine und da ist eine "neue Funktion" hineinentwickelt worden.

Gruß und schon einmal Danke bis hierhin.
 
Zurück
Oben