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.
![]() | 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.
![]() | 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 | Ein Array von ICommand Objekten. | |
interval | Die Zeit nach der der TwinCAT HMI Server frühestens Änderungen überträgt. | |
requestOptions | 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 |
---|---|
Die Request-ID als number oder null im Falle eines Fehlers. |
![]() | 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
}
});