WinCC Unified txt file per Javascript in die PLC lesen

Zuviel Werbung?
-> Hier kostenlos registrieren
@Botimperator meint, daß Du Deinen Befehl mit großem Anfangsbuchstaben schreiben mußt. Der Trace gibt aus "tags" nicht gefunden, also Dein klein geschriebener Befehl. Laut Botimerator ist der aber groß geschrieben.

Was ich meine: Erstmal probiere folgende Zeile aus:
Javascript:
const text = await HMIRuntime.FileSystem.ReadFile(filePath, "utf8");

Und dann mal schauen, was weiter passiert.
Wenn er Dir dann in Zeile 17 immer noch ein [Object] anstatt Deines Textes ausgibt, änderst Du die Zeile 17 so:
Javascript:
HMIRuntime.Trace("ERFOLG! Inhalt: " + JSON.stringify(text));
 
In beiden Fällen bin ich aber überfordert . Was kann ich tun um mehr Infos zu liefern damit das noch klappen kann .
RTFM

Du musst quasi warten bis das Promise von ReadFile() resolved wird & dann erst die Auswertung der gelesenen Daten machen.
In der F1-Hilfe von FileSystem.ReadFile() findest du ein Code-Beispiel.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok ich versuche zu schreiben ehe das lesen abgeschlossen ist. leider kann ich in Unified das await nicht nutzen (syntax wird rot markiert )

1771250082900.png
ich habe im script manual von Siemens das .then hinter dem ReadFile gefunden . Ich hoffe das es "warten bis fertig gelesen" bedeuted. Compilieren kann ich und es läuft wohl auch . Im Tracer kommt die ERFOLG nicht mehr und auch sonst passiert nichts . Ich habe das suck.txt auf ca 12 Zeichen "11111111111" eingekürzt .
 
Bezüglich des await:
Es könnte daran liegen, daß Du das "async" in Deiner Funktionsdeklaration nicht mehr drin hast:
Javascript:
export async function Schaltfläche_10_OnTapped(item, x, y, modifiers, trigger) {
Das hatte die KI mal mit drin und das scheint für TIA essentiell zu sein.
 
Bezüglich der "then"-Funktion:
Du erstellst eine Funktion ohne Funktionsparameter. Dadurch kann Deiner Funktion der asynchrone Rückgabewert nicht übergeben werden.
Korrekt müßte es so aussehen:
Javascript:
HMIRuntime.FileSystem.ReadFile(filePath, "utf8").then(function(inhalt) {
    // 'inhalt' ist jetzt der tatsächliche Text der Datei
    HMIRuntime.Trace("ERFOLG! Inhalt: " + inhalt);
    
    let tag1 = Tags("BM_Text");
    tag1.Write(inhalt);
}).catch(function(err) {
    HMIRuntime.Trace("Fehler beim Lesen: " + err);
});

Die Variable "text" kennt Deine Callback-Funktion garnicht.
 
Wir hatten gestern ein Telefonat und mit diesem Code hat es funktioniert:

Javascript:
export function Schaltfläche_10_OnTapped(item, x, y, modifiers, trigger){
HMIRuntime.Tags.SysFct.SetTagValue("TimeProgNo", 1);

const filePath = "C:\\ProgramData\\SCADAProjects\\scriptdata\\bm\\miniring\\fill\\a\\suck.txt";

HMIRuntime.Trace ("Leseversuch gestartet für " + filepath);

HMIRuntime.FileSystem.ReadFile(filePath, "utf8").then(function (text) {         // hier kreieren wir eine anonyme Callback-Funktion,
                                                                                // die von THEN aufgerufen wird.
                                                                                // THEN übergibt dieser Funktion den ausgelesenen Text,
                                                                                // daher müssen wir hier einen Parameter angeben, den wir "text"  nennen.
        HMIRuntime.Trace("Leseoperation erfolgreich abgeschlossen, wir befinden uns in der Callback-Funktion von THEN");
        
        HMIRuntime.Trace("ERFOLG! Inhalt: " + text);    //text ist hier jetzt der Parameter aus der anonymen Callbackfunktion im THEN
        let tag1 = Tags("BM_Text");
        tag1.Write(text);
        HMIRuntime.Trace ("Tag write wurde ausgeführt mit text=" + text) ;

    }) //end of THEN

    .catch(function (errorCode){        //Alternativzweig, falls die Leseoperation fehlschlägt
            HMIRuntime.Trace("Leseoperation fehlgeschlagen, wir befinden uns in der Callback-Funktion von CATCH");
            
            HMIRuntime.Trace("FEHLER! Dateinhalt konnte nicht gelesen werden: " + errorCode);
    }); //end of CATCH

Das Problem lag am Ende an der Berechtigung im Verzeichnis der zu lesenden Datei.
@Quickmik hat dann ein Verzeichnis mit der Leseberechtigung für "Jeder" angelegt.

Kann hier jemand sagen, welchem Benutzer genau für das HMI Leseberechtigung gegeben werden muß?
 
Zurück
Oben