Aufbau

Eine Funktion wird innerhalb des Namensraumes „TcHmi“ implementiert. Eine Implementierung außerhalb des Namensraumes ist nicht möglich, da die Funktion sonst nicht im Framework des TwinCAT HMIs zur Verfügung steht. Die Funktion wird über die Framework-API-Funktion „registerFunctionEx“ (ab Version 1.12) bzw. „registerFunction“ im Framework registriert, damit sie im zur Laufzeit zur Verfügung steht.

Im folgenden Beispiel wird die Konvertierung einer Temperatur von Fahrenheit nach Celsius implementiert und die aufrufende Stelle zurückgegeben.

Grundaufbau einer TypeScript-Function

module TcHmi {
   export module Functions {
      export module TcHmiProject40 {
         export function FahrToCels(TempInFahr: number | string) {
            // variable for the return value
            var value = TempInFahr;

            // check the type of the parameter
            if (typeof TempInFahr === 'number') {
               // parameter is already a number

               // convert the parameter value to Celsius
               value = ((TempInFahr - 32) * (5 / 9));
            } else if (typeof TempInFahr === 'string') {
               // parameter is a string

               // convert the parameter type and the parameter value
               value = ((parseFloat(TempInFahr) - 32) * (5 / 9));
            }

            // return the converted parameter
            return value;
         }
      }
      registerFunctionEx('FahrToCels', 'TcHmi.Functions.TcHmiProject40', TcHmiProject40.FahrToCels);
   }
}

Grundaufbau einer JavaScript-Function (ab Version 1.12)

(function (/** @type {globalThis.TcHmi} */ TcHmi) {
   var Functions;
    (function (/** @type {globalThis.TcHmi.Functions} */ Functions) {
      var TcHmiProject40;
      (function (TcHmiProject40) {
         function FahrToCels(TempInFahr) {
            // variable for the return value
            var value = TempInFahr;

            // check the type of the parameter
            if (typeof TempInFahr === 'number') {

               // parameter is already a number

               // convert the parameter value to celsius
               value = ((TempInFahr - 32) * (5 / 9));
            }else if (typeof TempInFahr === 'string') {
               // parameter is a string

               // convert the parameter type and the parameter value
               value = ((parseFloat(TempInFahr) - 32) * (5 / 9));
            }

            // return the converted parameter
            return value;
         }
         TcHmiProject40.FahrToCels = FahrToCels;
      })(TcHmiProject40 = Functions.TcHmiProject40 || (Functions.TcHmiProject40 = {}));
      Functions.registerFunctionEx('FahrToCels', 'TcHmi.Functions.TcHmiProject40', TcHmiProject40.FahrToCels);
   })(Functions = TcHmi.Functions || (TcHmi.Functions = {}));
})(TcHmi);

Grundaufbau einer JavaScript-Function (ab Version 1.8)

// required namespace TcHmi
(function (/** @type {globalThis.TcHmi} */ TcHmi) {
   // name and parameters of the function defined in json
   var FahrToCels = function (TempInFahr) {
      // variable for the return value
      var value = TempInFahr;

      // check the type of the parameter
      if (typeof TempInFahr === 'number') {
         // parameter is already a number

         // convert the parameter value to celsius
         value = ((TempInFahr - 32) * (5 / 9));
      }
      else if (typeof TempInFahr === 'string') {
         // parameter is a string

         // convert the parameter type and the parameter value
         value = ((parseFloat(TempInFahr) - 32) * (5 / 9));
      }

      // return the converted parameter
      return value;
   };

   // register the function in the framework
   TcHmi.Functions.registerFunction('FahrToCels', FahrToCels);
})(TcHmi);

Für einen besseren Support von IntelliSense werden Referenzen auf das Framework und jQuery innerhalb der JavaScript-Datei der Funktion erstellt. Dies ist bei TypeScript nicht nötig.

// TcHmi Version 1.12
/// <reference path="../Packages/Beckhoff.TwinCAT.HMI.Framework.12.742.1/runtimes/native1.12-tchmi/TcHmi.d.ts" />

// TcHmi Version 1.8
// Provider for a best effort Intellisense of Visual Studio 2017/2019.
/// <reference path="C:\TwinCAT\Functions\TE2000-HMI-Engineering\Infrastructure\TcHmiFramework\Latest\Lib\jquery.d.ts" />
/// <reference path="C:\TwinCAT\Functions\TE2000-HMI-Engineering\Infrastructure\TcHmiFramework\Latest\TcHmi.d.ts" />
/// <reference path="C:\TwinCAT\Functions\TE2000-HMI-Engineering\Infrastructure\TcHmiFramework\Latest\Controls\System\TcHmiControl\Source.d.ts" />

// Provider for a best effort Intellisense of Visual Studio 2013/2015.
/// <reference path="C:\TwinCAT\Functions\TE2000-HMI-Engineering\Infrastructure\TcHmiFramework\Latest\Lib\jquery\jquery.js" />
/// <reference path="C:\TwinCAT\Functions\TE2000-HMI-Engineering\Infrastructure\TcHmiFramework\Latest\TcHmi.js" />