Parametrisierung eines Radial Gauges in User Control

XMG

Level-2
Beiträge
15
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo und guten Tag!

Ich arbeite zur Zeit an der Programmierung (TC3) einer Vorrichtung zur Dichtigkeitsprüfung von Ventilen mittels eines Differenzdruckmessgerätes.

Um die Messergebnisse übersichtlich darzustellen wollte ich ein Radial Gauge benutzen. Da mehrere Ventile auf einmal getestet werden wollte ich ein User Control erstellen, an welches ich die Testergebnisse, Tolleranzen etc. übergebe.
Bei der Parametriesierung der Range (farbiger Ring außen zum Anzeigen des Tolleranz-Schemas) stürzt TwinCAT3 jedoch jedes Mal ab.

Vorgegangen bin ich wie folgt:
- Parameter im User Control hinzugefüht
- Data Binding in der Range hinzugefügt (rot von minValue bis toleranceLB, grün von ... bis ..., usw.)

Das ganze funktioniert für den Wert auch ganz wunderbar, wenn ich jedoch die Range parametrisiert habe und das User Control entweder neu lade oder instanziiere friert TwinCAT ein und stürzt nach einiger Zeit ab. Ohne Fehlermedung oder sonsiges. Zuerst dachte ich, dass die Range vielleicht nicht mit DOUBLEs zurecht kommt und bin auf INTs umgestiegen, aber auch das brachte keine Verbesserung.

Hat jemand von euch vielleicht schonmal ein ähnliches Problem gehabt und kann mir weiterhelfen?

Vielen Dank im Vorraus!

/Update:
Das Problem tritt ebenfalls auf, wenn ich kein User Control verwende und einfach in einem View/Content die Range des Radial Gauges parametrisiere. Scheint so als würde der Designer beim Laden der Eigenschaften des Objektes nicht mit der Parametrisierung klarkommen.
 
Zuletzt bearbeitet:
Lad Dir mal von der Beckhoff-Homepage die aktuelle Version der TwinCAT HMI runter. Es gab in der Vergangenheit diverse Updates, evtl löst das Dein Problem.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kannst du mal ein bißchen mehr zu deinem UserControl schreiben ? Vielleicht auch ein bißchen Code veröffentlichen, der zeigt, wie du die Zuweisungen umgesetzt hast ...

Gruß
Larry
 
@bstr
Habe TwinCAT 3 erst Mitte letzter Woche von der Beckhoff-Seite runtergeladen, ich denke daran kann es in meinem Fall nicht liegen. Aber Danke!

@Larry Laffer
Im Prinzip macht das nichts wildes. Ist einfach ein Radial Gauge, dem ich ein paar Parameter zuweise.

Hier mal die entscheidenden Code-Schnipsel.
Zuerst die json-Datein mit den Parametern:
Code:
{
  "parameters": [
    {
      "name": "data-tchmi-testresult",
      "displayName": "TestResult",
      "visible": true,
      "type": "tchmi:general#/definitions/DOUBLE",
      "category": "",
      "description": "",
      "defaultValue": 10.0,
      "defaultValueInternal": 10.0,
      "requiredOnCompile": false,
      "readOnly": false,
      "bindable": true,
      "heritable": true,
      "propertyName": "TestResult",
      "propertySetterName": "setTestResult",
      "propertyGetterName": "getTestResult"
    },
    {
      "name": "data-tchmi-tolerance_ug",
      "displayName": "Tolerance_UG",
      "visible": true,
      "type": "tchmi:general#/definitions/INT",
      "category": "",
      "description": "",
      "defaultValue": 7,
      "defaultValueInternal": 7,
      "requiredOnCompile": false,
      "readOnly": false,
      "bindable": true,
      "heritable": true,
      "propertyName": "Tolerance_UG",
      "propertySetterName": "setTolerance_UG",
      "propertyGetterName": "getTolerance_UG"
    },
    {
      "name": "data-tchmi-tolerance_og",
      "displayName": "Tolerance_OG",
      "visible": true,
      "type": "tchmi:general#/definitions/INT",
      "category": "",
      "description": "",
      "defaultValue": 13,
      "defaultValueInternal": 13,
      "requiredOnCompile": false,
      "readOnly": false,
      "bindable": true,
      "heritable": true,
      "propertyName": "Tolerance_OG",
      "propertySetterName": "setTolerance_OG",
      "propertyGetterName": "getTolerance_OG"
    },
    {
      "name": "data-tchmi-minvalue",
      "displayName": "MinValue",
      "visible": true,
      "type": "tchmi:general#/definitions/INT",
      "category": "",
      "description": "",
      "defaultValue": 0,
      "defaultValueInternal": 0,
      "requiredOnCompile": false,
      "readOnly": false,
      "bindable": true,
      "heritable": true,
      "propertyName": "MinValue",
      "propertySetterName": "setMinValue",
      "propertyGetterName": "getMinValue"
    },
    {
      "name": "data-tchmi-maxvalue",
      "displayName": "MaxValue",
      "visible": true,
      "type": "tchmi:general#/definitions/INT",
      "category": "",
      "description": "",
      "defaultValue": 20,
      "defaultValueInternal": 20,
      "requiredOnCompile": false,
      "readOnly": false,
      "bindable": true,
      "heritable": true,
      "propertyName": "MaxValue",
      "propertySetterName": "setMaxValue",
      "propertyGetterName": "getMaxValue"
    }
  ],
  "virtualRights": [],
  "$schema": "C:/TwinCAT/Functions/TE2000-HMI-Engineering/Infrastructure/TcHmiFramework/Latest/Schema/UserControlConfig.Schema.json",
  "description": ""
}
Und dann die usercontrol-Datei:

Code:
<div id="ValveTestResults" data-tchmi-type="tchmi-user-control" 
     data-tchmi-top="0" data-tchmi-left="0" 
     data-tchmi-width="100" data-tchmi-height="100" data-tchmi-width-unit="%" data-tchmi-height-unit="%"
     data-tchmi-creator-viewport-width="500" data-tchmi-creator-viewport-height="500">

<div id="TcHmiRadialGauge" data-tchmi-type="tchmi-radial-gauge" data-tchmi-base-animation-time="1000" data-tchmi-height="100" data-tchmi-height-unit="%" data-tchmi-label-range="20" data-tchmi-left="0" data-tchmi-left-unit="px" data-tchmi-show-labels="True" data-tchmi-show-ticks="True" data-tchmi-show-value-text="True" data-tchmi-start-from-zero="True" data-tchmi-top="0" data-tchmi-top-unit="px" data-tchmi-width="100" data-tchmi-width-unit="%" data-tchmi-value="%pp%TestResult%/pp%" data-tchmi-min-value="%pp%MinValue%/pp%" data-tchmi-max-value="%pp%MaxValue%/pp%">
<script data-tchmi-target-attribute="data-tchmi-range" type="application/json">
[
  {
    "color": {
      "color": "rgba(255, 0, 0, 1)"
    },
   [B] "start": "%pp%MinValue%/pp%",
    "end": "%pp%Tolerance_UG%/pp%"[/B]
  },
  {
    "color": {
      "color": "rgba(0, 128, 0, 1)"
    },
    [B]"start": "%pp%Tolerance_UG%/pp%",
    "end": "%pp%Tolerance_OG%/pp%"[/B]
  },
  {
    "color": {
      "color": "rgba(255, 0, 0, 1)"
    },[B]
    "start": "%pp%Tolerance_OG%/pp%",
    "end": "%pp%MaxValue%/pp%"[/B]
  }
]
</script>
<script data-tchmi-target-attribute="data-tchmi-value-format" type="application/json">
{
  "objectType": "Function",
  "fn": "GaugeValueFormatter",
  "fnParams": []
}
</script>
<script data-tchmi-target-attribute="data-tchmi-tick-definition" type="application/json">
{
  "mainTickRange": 20,
  "subTickRange": 5
}
</script>

</div>

Die Zeilen, an denen es mieiner meinung nach scheitert (also die Parametrierung der Range) habe ich mal fett markiert.

Danke und beste Grüße!
 
... mich hätte jetzt an dieser Stelle mehr der dahinter liegende VB.Net oder C#.Net-Code interessiert. Möglicherweise vom/im Designer-Script ...

Gruß
Larry
 
Naja ... irgend etwas wird es schon geben. Der Designer "schmiert" ja durch irgendetwas, das mit dem instanzieren des Controls oder unterlagerter Objekte zusammenhängt, ab ...

Gruß
Larry
 
Da muss ich zuse zustimmen, mehr Code gibt es leider nicht. Zumindest wüsste ich gerade nicht wie ich daran kommen sollte.

Morgen kommt aber soweiso ein Beckhoff-Vertreter vorbei, ich glaube nicht, dass der da weiterhelfen kann, aber versuchen kann man es mal.

Danke euch!
 
@Hack, habe gerade nochmal nachgeschaut, beide Programme sind defintiv auf dem neusten Stand.

Das Problem lässt sich auch in anderen Projekten reproduzieren.

Trotzdem danke.
 
Hi, also wenn ich als internes Symbol eine GaugeRangeDefinitionsList anlege und die drauf verlinke stürzt nichts ab, versuch das mal und schau dir die Daten an.

Ich denke das Problem liegt an einem falschen Datentyp (int statt number) oder einer falschen Struktur deines Arrays...weiß nicht wie es bei dir genau aufgebaut ist, aber mit User Controls hatte ich auch schon so meine Probleme.

Leider kann man bei diesem Control nicht so einfach manuell per Javascript und CSS Einfluss nehmen, oft geht es eben auch so auf Umwegen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Mathias,

danke für deine Antwort.
Wenn ich das GaugeRangeDefinitionsList-Element als Parameter anlege stürzt TwinCAT bei mir auch nicht direkt ab, wenn ich das User Control anlege. Das passiert bei mir dann erst, wenn ich das User Control instanziiert habe und dem Parameter GaugeRangeDefinitionsList Werte aus der PLC zugewiesen habe.. Dann verabschiedet es sich beim nächsten Klick auf das Element. Schade.

Vielleicht lohnt es sich mehr direkt in die HMI-Programmierung mit C# einzusteigen..

/edit: Ach ja, deinen Tipp mit den Datentypen habe ich auch ausgetestet. Leider mit gleichem Ergebnis.
 
Also ich bin jetzt auch kein Experte, hab eigentlich erst eine etwas aufwändigere HMI gemacht und schnell festgestellt das man mit den Beckhoff eigenen Mitteln schnell an Grenzen stößt.

Was aber teilweise an der Dokumentation und fehlenden Beispielen liegt, ich hab dann alles manuell mit HTML, JS und CSS gemacht, da man dazu im Netz halt auch richtig viel findet.

C# muss nicht unbedingt sein...es gibt halt auch so schöne und kostenlose Sachen wie ChartJS...also wenn du in Zukunft viel in der Richtung und auch aufwändigere Sachen machen willst würde ich eher diesen Weg gehen, ist einfach flexibler und Performance spielt auch eine Rolle.
 
Bisher habe ich realtiv wenig mit Webentwicklung zu tun gehabt, deswegen dachte ich zuerst an C#. Komme eher aus der Richtung C, C++ und Java, da sollte C# dann kein so großer Unterschied mehr sein.
JavaScript hat mich allerdings schon immer gereizt, ist vielleicht ein guter Zeitpunkt sich das mal anzugucken.

Darf ich mir die Entwicklung mit HTML, JS und co so vorstellen, dass ich dann einfach eine Webanwendung programmiere und die Kommunikation zur SPS über das ADS-Protokoll läuft?
Und kann ich die Anwendungen später auch auf einem Panel-PC von Beckhhoff laufen lassen oder müsste ich dann Überredungsarbeit leisten, um auf was anderes umzusteigen? :D
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also ich hab in dem Sinne nicht auf die Twincat HMI verzichtet, obwohl ich es auch schon überlegt hatte um die Lizenzkosten zu sparen, Problem ist aber wirklich die ADS Kommunikation mit der SPS über Javascript, das sah sehr umständlich aus, wobei es für dich interessant sein könnte wenn du C# kannst, damit hat man mehr Möglichkeiten.

Ich hab halt komplett auf die vorhandenen Controls verzichtet und die ganzen Events und Verknüpfungen mit Javascript gemacht. Mir ging es vorallem darum beim Design volle Kontrolle zu haben und ich wollte für Messwerte eine Trendanzeige einbauen (ChartJS).

Aber ich musste mich auch erst in das Thema HTML, CSS und JS einarbeiten, ist schon recht umfangreich.
 
Zurück
Oben