Binding von einem Data Grid zu mehreren Arrays dynamisch errzeugen

O'Gigis

Level-2
Beiträge
97
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

ich hätte da mal eine Frage zur TwinCAT HMI TE2000 ;) Möchte unterschiedlich große Arrays die dieselbe Struktur [Name,Wert] besitzen innerhalb eines
Datagrid darstellen können, umschaltbar Über Buttons.

Wie ich ein Binding zu einem Array erzeuge so dass ich dieses in einem Data-Grid anzeigen lassen kann weiss ich. Nun stellt sich mir die Frage wie ich das
Attribut SrcData in der Kategorie Data des Data- Grid dynamisch verbinden kann. Also je nach dem welcher Button gedrückt wird soll ein Binding zu einem
anderen Array erfolgen. Die Definition der Spaltenoptionen des Atrtributs Columns müsste ich doch ebenfalls dynamisch Ändern können?

Damit könnte ich unterschiedlich lange Arrays und deren Inhalte darstellen, sonst viele mir nur der Weg ein jedes Array in einem eigenen Data-Grid darzustellen,
das kann es doch aber irgendwie nicht sein :confused:

Ind der InfoSys finde ich zu Bindings dieses:

https://infosys.beckhoff.com/index....eering/4707467019.html&id=7867756814466146122

var myControl = TcHmi.Controls.get('TcHmiTextbox_1');
if(myControl){
TcHmi.Binding.create('%i%MyInternalSymbol_1%/i%',myControl.setText, myControl);
}

mit dem Beispiel kann ich aber (noch) nicht soviel anfangen. Wo und wie genau füge ich den den JavaScript ein, erzeuge ich hier eine Kopie der Textbox_1 und setze in der Kopie den Text zu "MyInternalSymbol" ?
 
Zuletzt bearbeitet:
Wenn die Arrays immer die gleiche Struktur als Datentyp haben, brauchst du die Spaltenattribute nicht unbedingt anpassen. Du musst dann eigentlich nur die Daten-Bindung auf SrcData ändern.
Das geht z.B. im Click-Event deiner Buttons. Dort ziehst du die CreateBinding Funktion (Functions -> Binding -> CreateBinding) in das "Steps" Feld. In der Funktion wählst du dein Datagrid control als Ziel-Control, srcData als Property und das Array als Symbol an.

CreateBinding.JPG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn die Arrays immer die gleiche Struktur als Datentyp haben, brauchst du die Spaltenattribute nicht unbedingt anpassen. Du musst dann eigentlich nur die Daten-Bindung auf SrcData ändern.
Das geht z.B. im Click-Event deiner Buttons. Dort ziehst du die CreateBinding Funktion (Functions -> Binding -> CreateBinding) in das "Steps" Feld. In der Funktion wählst du dein Datagrid control als Ziel-Control, srcData als Property und das Array als Symbol an.

Manchmal sieht man den Wald vor lauter Bäume nicht :ROFLMAO::s13::s12: Natürlich kann ich mit dem Click Event das Binding einfach ändern :cool:

Die Funktionen Create/RemoveBinding liegen bei mir aber nicht unter Functions und im "Steps" Feld sieht es auch etwas anders aus :confused:

Binding.jpg

Ich bekomme nicht auf dieselbe Art Zugriff auf das Property SrcData wie du. Kann ich den Namen/Label und die Spaltenzahl der Property Columns ebenfalls in einem Click-Event änderen?
 
Dann hast du eine ältere Version vom TE2000 als ich. Beckhoff ändert da gerne mal was am Design. Ich verwende derzeit die aktuelle Version 1.10.1336.203.
Solltest du mit dem Gedanken spielen deine Version zu updaten, achte darauf das du auch auf deiner SPS den Server TF2000 auf die gleiche Version bringst. Sonst gibt es Probleme beim Publishen.

EDIT

Du kannst das Spalten Layout eines Datagrids über die Columns Eigenschaft zur Laufzeit ändern. Dazu musst du aber wissen was für ein Datenschema eingehalten werden muss. Die Schemadefinition findest du du im Infosys https://infosys.beckhoff.com/content/1033/te2000_tc3_hmi_engineering/9007203103406347.html

Das ganze ist nicht ganz einfach zu durchblicken. Hast du schon mit Javascript und JSON Arrays gearbeitet?

Die Spaltendefinition von einem Datagrid mit einer Image-Spalte und 3 Text-Spalten sieht z.B. so aus:

Code:
[{
		"name": "img",
		"label": "Bild",
		"control": "Image",
		"width": 5,
		"widthUnit": "%",
		"resize": true,
		"sortable": false,
		"minWidth": 40,
		"minWidthUnit": "px",
		"cellBackground": null,
		"textColor": null,
		"editable": false,
		"horizontalAlignment": "Center",
		"verticalAlignment": "Center",
		"format": null,
		"dataDefinitions": [{
				"text": "error",
				"value": 1,
				"height": 30,
				"width": 30,
				"source": "Images/Icons/Icon-Error.svg"
			}, {
				"text": "warning",
				"value": 2,
				"height": 30,
				"width": 30,
				"source": "Images/Icons/Icon-Warning.svg"
			}, {
				"text": "info",
				"value": 3,
				"height": 30,
				"width": 30,
				"source": "Images/Icons/Icon-Info.svg"
			}
		]
	}, {
		"name": "timestamp",
		"label": "Time",
		"control": "TextBlock",
		"width": 15,
		"widthUnit": "%",
		"resize": false,
		"sortable": false,
		"minWidth": 70,
		"minWidthUnit": "px",
		"cellBackground": null,
		"textColor": null,
		"editable": false,
		"horizontalAlignment": "Center",
		"verticalAlignment": "Center",
		"format": null
	}, {
		"name": "category",
		"label": "Column 1",
		"control": "TextBlock",
		"width": 30,
		"widthUnit": "%",
		"resize": true,
		"sortable": false,
		"minWidth": 70,
		"minWidthUnit": "px",
		"cellBackground": null,
		"textColor": null,
		"editable": false,
		"horizontalAlignment": "Center",
		"verticalAlignment": "Center",
		"format": null
	}, {
		"name": "msg",
		"label": "Column 4",
		"control": "TextBlock",
		"width": 50,
		"widthUnit": "%",
		"resize": true,
		"sortable": false,
		"minWidth": 70,
		"minWidthUnit": "px",
		"cellBackground": null,
		"textColor": null,
		"editable": false,
		"horizontalAlignment": "Center",
		"verticalAlignment": "Center",
		"format": null
	}
]
 
Zuletzt bearbeitet:
Oha, also ganz so trivial ist dass dann doch nicht. Ich habe einfache Javascript Funktionen geschrieben aber noch keine JSON Arrays bearbeitet, schon garnicht die Schemadefinition verwendet. Da muss ich mich erstmal einarbeiten ;)

Mal ganz Naiv gefragt, wie ich Javascript- Funktionen erstelle und ausführe weiss ich. Wo füge ich denn den Javascript wie oben beschrieben ein, muss ich bei einem Event den Editor benutzen

Unbenannt.jpg

oder kann ich auch aus der PLC heraus einen Javascript "anstossen"?
 
Zurück
Oben