subscribeEx

[ Funktion ]

Version 1.10

public static subscribeEx(
    commands: TcHmi.Server.ICommand[],
    interval: number,
    requestOptions: Server.IRequestOptions,
    callback?: null | (
         (data: TcHmi.Server.IResultObject) => void
    )
): number | null;

Version 1.12

public static subscribeEx<R = any>(
    commands: TcHmi.Server.ICommand[],
    interval: number,
    requestOptions: Server.IRequestOptions,
    callback?: null | (
         (data: TcHmi.Server.IResultObject<unknown, R>) => void
    )
): number | null;

Meldet eine Subscription auf eine Liste von Kommandos an.

subscribeEx 1:

Version 1.12

Wird die API in TypeScript-Code benutzt, so kann dem TypeScript-Compiler mitgeteilt werden, welchen Typ das Server-Symbol hat. Ein späterer Zugriff auf readValue in der Callback-Funktion hat dann automatisch den richtigen Typ.

Greift man auf mehrere Symbole mit unterschiedlichen Typen, so kann man den Typen händisch auf any setzen.

subscribeEx 2:

Dies ist eine reine Hilfe für die Programmierung. Der Browser kennt diese „Typeannotation“ nicht. Es findet keine Prüfung oder Konvertierung zur Laufzeit statt.

Parameter

Name

Typ

Beschreibung

commands

TcHmi.Server.ICommand[]

Ein Array von ICommand Objekten.

interval

number

Die Zeit nach der der TwinCAT HMI Server frühestens Änderungen überträgt.

requestOptions

Server.IRequestOptions

Optionen

callback [ Optional ]

null, (data: TcHmi.Server.IResultObject) => void

Asynchrone Callback Funktion, die ausgelöst wird, wenn die Operation beendet wurde.

Rückgabewert

Typ

Beschreibung

number, null

Die Request-ID als number oder null im Falle eines Fehlers.

subscribeEx 3:

Verfügbar ab Version 1.10

Beispiel - JavaScript

var commands = [
    {
        'symbol': 'PLC1.MAIN.bTest'
    },
    {
        'symbol': 'PLC1.MAIN.nTest'
    }
];

TcHmi.Server.subscribeEx(commands, 500, { timeout: 2000 }, function (data) {
    if (data.error !== TcHmi.Errors.NONE) {
        // Handle TcHmi.Server class level error here.
        return;
    }

    var response = data.response;
    if (!response || response.error !== undefined) {
        // Handle TwinCAT HMI Server response level error here.
        return;
    }

    var commands = response.commands;
    if (commands === undefined) {
        return;
    }

    for (var i = 0, ii = commands.length; i < ii; i++) {
        var command = commands[i];
        if (command === undefined) {
            return;
        }
        if (command.error !== undefined) {
            // Handle TwinCAT HMI Server command level error here.
            return;
        }

        // Handle result...
        TcHmi.Log.debugEx(command.symbol, ':', command.readValue);
    }
});

Beispiel - TypeScript

// subscription with type annotation
var commands = [
    {
        'symbol': 'PLC1.MAIN.bTest'
    },
    {
        'symbol': 'PLC1.MAIN.bTest1'
    }
];

TcHmi.Server.subscribeEx<boolean>(commands, 500, { timeout: 2000 }, function (data) {
    if (data.error !== TcHmi.Errors.NONE) {
        // Handle TcHmi.Server class level error here.
        return;
    }
    var response = data.response;
    if (!response || response.error !== undefined) {
        // Handle TwinCAT HMI Server response level error here.
        return;
    }

    var commands = response.commands;
    if (commands === undefined) {
        return;
    }

    for (var i = 0, ii = commands.length; i < ii; i++) {
        var command = commands[i];
        if (command === undefined) {
            return;
        }
        if (command.error !== undefined) {
            // Handle TwinCAT HMI Server command level error here.
            return;
        }

        // Handle result...
        TcHmi.Log.debugEx(command.symbol, ':', command.readValue); // TS knows this is a boolean
    }
});