Sonstiges TcHMI TE2000 und bestätigungsfenster

msauerpb

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

ist es möglich, dass ich auf der Tc HMI ein Bestätigungsdialogfeld auf plocken lassen kann? Konkretes Beispiel: Ich habe ein Optionsfeld und wenn ich das anklicke soll erst ein Dialogfeld mit einem Hinweis auf poppen, das ich mit Ok oder Abbrechen bestätigen muss. Erst wenn ich das DIalogfeld mit Ok bestätigt habe, soll das Optionsfeld aktiviert (also Haken gesetzt) werden.

Danke für Eure Hilfe
gruss
martin
 
Du könntest dir das per Funktion selbst machen.
Am besten per Kontext-Object für das Ergebnis: einmal success() und einmal error()

In der Funktion ginge das per browser API confirm, aber damit hälst du den ganzen Browser an. Das ist nicht so elegant:
Better wäre hier ein kleines HTML im TopMostLayer:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zuse,

ok die Sache mit Funktion/Context habe ich noch nicht so ganz überissen. Da fehlt mir irgendwie ne vernünftige Erklärung dafür.

Wenn ich die Sache mit dem TopMostLayer richtig verstanden habe, heist das, dass eine HMTL DIV Box erzeugt wird, die erstmal im Hintergrund liegt und bei Bedarf eingeblendet wird? Wie funktioniert denn das im TcHMI? Ich kann mit dieser Beschreibung in der Framework Hilfe nicht so sonderlich viel anfangen.

gruss
martin
 
Mach eine neue Typescript Funktion asyncConfirm . In die Datei asyncConfirm.ts schreibst du dies:

module TcHmi { export module Functions { export function asyncConfirm(ctx: TcHmi.Context<boolean>, message: any) { const okButton = document.createElement('button'); okButton.textContent = 'Ok'; const okFnc = () => { TcHmi.TopMostLayer.removeEx($(questionDiv)); ctx.success?.(true); }; okButton.addEventListener('click', okFnc); const cancelButton = document.createElement('button'); cancelButton.textContent = 'Cancel'; const cancelFnc = () => { TcHmi.TopMostLayer.removeEx($(questionDiv)); ctx.success?.(false); }; cancelButton.addEventListener('click', cancelFnc); const questionDiv = document.createElement('div'); questionDiv.style.cssText = 'background-color: white;padding:20px; margin:20px;' questionDiv.append( message, document.createElement('br'), okButton, ' ', cancelButton ); TcHmi.TopMostLayer.addEx($(questionDiv), { centerHorizontal: true, centerVertical: true, removeCb: (data) => { if (data.canceled) { cancelFnc(); } } }); } registerFunctionEx('asyncConfirm', 'TcHmi.Functions', asyncConfirm); } }

asyncConfirm.funtion.json dies:
{ "function": { "name": "asyncConfirm", "namespace": "TcHmi.Functions", "displayName": "asyncConfirm", "description": "", "waitMode": "Asynchronous", "category": "", "returnValue": { "type": "tchmi:general#/definitions/Boolean" }, "visible": true, "injectContextObject": true, "arguments": [ { "name": "ctx", "displayName": "ctx", "type": "tchmi:framework#/definitions/ContextReference", "description": "Context Reference", "defaultValue": "", "required": true, "bindable": false, "restParameter": false, "asReference": false, "allowControlAttributeBindingOptions": false }, { "name": "message", "displayName": "message", "type": "tchmi:general#/definitions/String", "description": "Message to show", "defaultValue": "", "required": true, "bindable": true, "restParameter": false, "asReference": false, "allowControlAttributeBindingOptions": false } ] }, "$schema": "./../Packages/Beckhoff.TwinCAT.HMI.Framework.12.750.1/runtimes/native1.12-tchmi/Schema/FunctionDescription.Schema.json", "apiVersion": 1, "version": { "full": "0.0.0.0", "major": 0, "minor": 0, "revision": 0, "build": 0 }, "dependencyFiles": [ { "name": "asyncConfirm.js", "type": "JavaScript", "description": "" } ] }

Dann kannst du im Actions und condition Fenster eine neue condition reinziehen.
In das Feld rechts kommt true rein (ohne Anführungszeichen).
links schreibst du:
TcHmi.Functions.asyncConfirm('Ask whatever you like')
Achtung, per Drag und drop kommt da manchmal noch ein <ctx> mit rein, dass muss weg.

Damit führt ein die Sachen bei "Then" aus, wenn du OK drückst, und die Sachen bei "Else", wenn du Cancel drückst.
 
@zuse:
Danke für das Sample. Brauche ich für das TypeScript den TcHMI 1.12? Ich habe bei mir nur die Version 1.10 und da bekomme ich im Browser den Fehler "unexpected token: identifier" bei module {}
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ach so.
Ja, das Beispiel ist Typescript was erst mit 1.12 funktioniert.
In dem Bereich hat sich aber in den Funktionen nicht soo viel getan und ich hab ja auch keine Typen innerhalb der Funktion definiert.
Da müsstest du den Inhalt auch in eine JS Funktion übertragen können.
 
Zurück
Oben