WinCC Unified Javascript - zeigt her eure Snippets

Beiträge
1.119
Reaktionspunkte
571
Zuviel Werbung?
-> Hier kostenlos registrieren
Werte Lords, werte Ladies, werter Pöbel,

ich hab vor einiger Zeit mal meine Vorlagen aus meiner Spickzettel-Textdatei in den SnippetCreator (Beitrags-ID 109813399) gepackt.
Dabei ist mir aufgefallen, dass ich gar nicht mal so viele "Standard"-Codeblöcke verwende.
Daher dachte ich mir ich lade meine Ideen mal hier hoch und würde mich um weitere Beiträge zur Sammlung oder Kommentare zur Brauchbarkeit der Snippets (oder deren Fehlen) freuen.
Folgendes habe ich mir im Moment bereit gelegt (die .xml-Datei am Post ist fertig für den SnippetCreator):

Ein Grundgerüst für Dokumentation & Struktur, angelehnt an die PLCOpen-Bausteine aus SCL.
So wirklich abschließend schlüssig bin ich mir dabei aber noch nicht, da die übermäßige Verwendung von Regions in vollwertigen JS-Editoren nicht grade die Übersichtlichkeit fördert.
Javascript:
//#region Scriptname Description
/*
==============================================================================
Firmenname / (c)Copyright 2026
------------------------------------------------------------------------------
Title:            GlobalesModul.Scriptname
Comment/Function: FunktionKurzbeschreibung
Library/Family:   ---
Author:           ---
Tested with:      Siemens WinCC Unified Runtime V21.#.#
Engineering:      TIA Portal V21
Restrictions:     ---
Requirements:     ---
------------------------------------------------------------------------------
Change log table:
Version  | Date       | Expert in charge       | Changes applied
---------|------------|------------------------|------------------------------
01.00.00 | YYYY-MM-DD | Botimperator           | Erstellt
==============================================================================


Beschreibungstext hier einfügen

 */
//#endregion
//====================================================================================================
//#region Deklaration
;
//#endregion
//====================================================================================================
//#region Initialisierung
;
//#endregion
//====================================================================================================
//#region Logic
;
//#endregion
//====================================================================================================
//#region Outputs
;
//#endregion

Doku-Header ohne Regions.
Beil lokalen Scripten verzichte ich meist darauf, aber in globalen Modulen ist dieser Block am Anfang des Scripts bei mir inzwischen mindest Standard.
Javascript:
/*
==============================================================================
Firmenname / (c)Copyright 2026
------------------------------------------------------------------------------
Title:            GlobalesModul.Scriptname
Comment/Function: FunktionKurzbeschreibung
Library/Family:   ---
Author:           ---
Tested with:      Siemens WinCC Unified Runtime V21.#.#
Engineering:      TIA Portal V21
Restrictions:     ---
Requirements:     ---
------------------------------------------------------------------------------
Change log table:
Version  | Date       | Expert in charge       | Changes applied
---------|------------|------------------------|------------------------------
01.00.00 | YYYY-MM-DD | Botimperator           | Erstellt
==============================================================================


Beschreibungstext hier einfügen

*/

Ein TryCatcTrace-Block für lokale Scripte in Faceplates.
Hinweis: den Severity-Parameter von Trace gibt es erst ab V19 (wenn ich es grade richtig im Kopf habe)
Javascript:
try {
    //Code hier einfügen
;
} catch (ex) {
    HMIRuntime.Trace("\n" +
        "Bildobjekt: " + item.Name + "\n" +
        "Faceplate: " + Faceplate.Name + "\n" +
        "DisplayName: " + Faceplate.DisplayName + "\n" +
        "FaceplateContainer Name: " + Faceplate.Parent.Name + "\n" +
        "Global Window Path: " + Faceplate.Parent.Parent.Path + "\n" +
        "Beschreibungstext für das Script bzw. die auslösende Stelle.\n" +
        "Fehler: " + ex, HMIRuntime.Trace.Enums.hmiSeverity.Error);
};

Das sinngemäß Gleiche nochmal für lokale Scripte an normalen Bildobjekten.
Javascript:
try {
    //Code hier einfügen
;
} catch (ex) {
    HMIRuntime.Trace("\n" +
        "Bildobjekt: " + item.Name + "\n" +
        "Screen Name: " + Screen.Name + "\n" +
        "Screen Window Name: " + Screen.Parent.Name + "\n" +
        "Screen Window Path: " + Screen.Parent.Path + "\n" +
        "Beschreibungstext für das Script bzw. die auslösende Stelle.\n" +
        "Fehler: " + ex, HMIRuntime.Trace.Enums.hmiSeverity.Error);
};

Verschiedene Separatoren für die Abteilung von Code-Bereichen:
Javascript:
//=========================
//==================================================
//====================================================================================================

Verschieden Symbole:
Javascript:
//               @@
//              @@@@
//             @@  @@
//            @@    @@
//           @@      @@
//          @@   @@   @@
//         @@    @@    @@
//        @@     @@     @@
//       @@      @@      @@
//      @@       @@       @@
//     @@                  @@
//    @@         @@         @@
//   @@                      @@
//  @@@@@@@@@@@@@@@@@@@@@@@@@@@@

//         *@@@@@*                   
//      *@@@@@@@@@@@*               
//    *@@@@%     =@@@@+             
//   *@@@@:       :@@@@*             
//                :@@@@*             
//               *@@@@#             
//            @@@@@@@               
//           @@@@@@                 
//         @@@@@                 
//         @@@@@                     
//             
//             
//         @@@@@
//         @@@@@

Und der wichtigste Mitarbeiter meiner Script-Pfuscherei:

Javascript:
/*
       ,'``.._   ,'``.
      :,--._:)\,:,._,.:       All Glory to
      :`--,''   :`...';\      the HYPNO TOAD!
       `,'       `---'  `.
       /                 :
      /                   \
    ,'                     :\.___,-.
   `...,---'``````-..._    |:       \
     (                 )   ;:    )   \  _,-.
      `.              (   //          `'    \
       :               `.//  )      )     , ;
     ,-|`.            _,'/       )    ) ,' ,'
    (  :`.`-..____..=:.-':     .     _,' ,'
     `,'\ ``--....-)='    `._,  \  ,') _ '``._
  _.-/ _ `.       (_)      /     )' ; / \ \`-.'
 `--(   `-:`.     `' ___..'  _,-'   |/   `.)
     `-. `.`.``-----``--,  .'
       |/`.\`'        ,',');
           `         (/  (/
*/
 

Anhänge

Die Angabe der Lizenz fehlt.
Die freiste Lizenz, die ich kenne, ist 0BSD.

MIT- und BSD-Lizenzen erheben keinen Anspruch auf die Weitergabe des Quelltextes. Im Vergleich zur GPL ist die BSD/MIT-Lizenz sehr offen.
0BSD deswegen, weil der Lizenztext am kürzesten ist und durch Juristen anerkannt ist.

Es wird z.B. Code von FreeBSD bei der PlayStation 4/5 verwendet.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zum Auslesen der geänderten Parametersatz-Nummer (ID) einer Parametersatz-Anzeige

1771338976376.png

Code:
try {
    let recipieObject = Screen.FindItem("MyRecipe");
    let tag = Tags("MyIntTag");
    let ID = recipieObject.CurrentParameterSetID;
    tag.Write(ID);
}
  catch (ex) {
    HMIRuntime.Trace(ex);
}
 
Zurück
Oben