requestEx

[ Funktion ]

Version 1.10

public static requestEx(
    request: TcHmi.Server.IMessage,
    requestOptions: Server.IRequestOptions,
    callback?: null | (
     (data: Server.IResultObject) => void
    )
): number | null;

Version 1.12

public static requestEx<W = any, R = any>(
    request: TcHmi.Server.IMessage,
    requestOptions: Server.IRequestOptions,
    callback?: null | (
     (data: Server.IResultObject<W, R>) => void
    )
): number | null;

Schickt eine beliebige Anfrage an den TwinCAT HMI Server.

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. Hierbei wird zuerst der Typ des Wertes beim Schreiben (Write) angegeben und danach optional der Typ des zu lesenden Wertes (Read).

Beim Zugriff auf mehrere Symbole mit unterschiedlichen Typen kann der Typ händisch auf any gesetzt werden.

requestEx 1:

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

request

TcHmi.Server.IMessage

TwinCAT HMI Server Websocket Request Objekt.

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.

requestEx 2:

Verfügbar ab Version 1.10

Beispiel - JavaScript

// Request object.
/** @type {TcHmi.Server.IMessage} */
var request = {
    'requestType': 'ReadWrite',
    'commands': [
        {
            'symbol': 'PLC1.MAIN.bTest'
        },
        {
            'symbol': 'PLC1.MAIN.nTest'
        }
    ]
};

// Send request to TwinCAT HMI Server.
TcHmi.Server.requestEx(request, { timeout: 2000 }, function(data){
    // Callback handling.
    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

// Request with type annotations

// Request object.
var request: TcHmi.Server.IMessage = {
    'requestType': 'ReadWrite',
    'commands': [
        {
            'symbol': 'PLC1.MAIN.bTest'
        },
        {
            'symbol': 'PLC1.MAIN.bTest2'
        }
    ]
};

// Send request to TwinCAT HMI Server.
TcHmi.Server.requestEx<boolean>(request, { timeout: 2000 }, function(data){
    // Callback handling.
    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
    }
});