ADS Remote Procedure Call (RPC)

Der Block ADS RPC kann verwendet werden, um TwinCAT 3 Methoden aufzurufen. Die Methoden müssen dafür entsprechend deklariert werden und werden bei einem Aufruf in der TwinCAT Runtime ausgeführt. Nach der Ausführung werden die Rückgabewerte der Funktion und/oder Funktionsparameter an LabVIEW™ zurückgegeben.

VORSICHT

Zugriff auf die Steuerung

Die Methoden werden in der Runtime ausgeführt. Bei Verwendung der Echtzeit Runtime muss die Zykluszeit ausreichend gewählt werden.

ADS Remote Procedure Call (RPC) 1:

Eingang/Ausgang

Bedeutung

Handle

Handle auf den ADS-Client

Method

Beschreibt eine ADS-Methode bestehend aus AMS-Adresse, Namen des Funktionsbausteins und dessen Methode:

  • AMS-Adresse: Ist eine Zusammenstellung von AMS NetId und AMS-Port.
  • Name des Funktionsbausteins
  • Name der Methode

z. B: 127.0.0.1.1.1:851::MAIN.fbTest#Method1

In or In/Out Params

LabVIEW™ Variant-Array mit allen Parametern der Methode, die mit dem Attribut TcRpcDirection := 'in' oder TcRpcDirection := 'inout' versehen sind.

Out or In/Out Params

LabVIEW™ Variant-Array mit allen Paramtern dern Methode, die mit dem Attribut TcRpcDirection := ‘out’ oder TcRpcDirection := 'inout' versehen sind.

Return Value

LabVIEW™ Variant als Rückgabewert von der Methode, falls vorhanden. Bleibt leer für Methoden ohne Rückgabewert (void).

In TwinCAT 3 gibt es viele Möglichkeiten, eine Methode zu instanziieren/definieren, wie zum Beispiel in Funktionsblöcken innerhalb der SPS, in einem Interface oder in einem C++-Modul. 

Im Folgenden betrachten wir den Aufruf einer TwinCAT 3 SPS-Methode AddNumbers, die zwei positive Ganzzahlen addiert und das Ergebnis in einen Ausgabeparameter schreibt. Falls negative Zahlen übergeben werden, gibt die Funktion einen HRESULT-Fehler zurück.

Eine mögliche Implementierung der Methode unter einem Funktionsblock kann so aussehen:


{attribute 'TcRpcEnable'}
METHOD AddNumbers : HRESULT
VAR_INPUT
{attribute 'TcRpcDirection' := 'in'}
Param1: INT;
{attribute 'TcRpcDirection' := 'in'}
Param2: INT;
END_VAR
VAR_OUTPUT
{attribute 'TcRpcDirection' := 'out'}
Result: INT;
END_VAR

IF Param1 < 0 OR Param2 < 0 THEN
AddNumbers := E_INVALIDARG; // HRESULT error code
Result := 0;
ELSE
Result := Param1 + Param2;
AddNumbers := S_OK; // Success
END_IF

Eine mögliche Implementierung als C/C++ Funktionssignatur kann wie folgt aussehen:

HRESULT AddNumbers(int16 Param1, int16 Param2, int16& Result);

In diesem Fall erwartet der ADS RPC Block exakt zwei Parameter vom Typ int16, da ausschließlich Param1 und Param2 mit dem Attribut 'TcRpcDirection=in' versehen wurden.

Methoden-Auswahl im Symbol Interface

Methoden, die in Funktionsblöcken (FB) oder Interfaces definiert sind, werden nicht direkt im Symbol Interface angezeigt. Nur der Funktionsblock bzw. das Interface ist sichtbar (z. B. FB_Test).

Falls der Funktionsblock oder das Interface Methoden enthält, können diese mit Hilfe des TwinCAT Symbol Interface Configurators ausgewählt werden:

  1. Symbol verschieben: Den Funktionsblock oder das Interface in das Read-/Write Fenster ziehen.
  2. Pop-up-Dialog: Ein Dialogfenster erscheint mit der Meldung: "Dieses Symbol enthält öffentliche Methoden. Möchten Sie diese auswählen?"
  3. Bestätigung: Bei Ja öffnet sich ein zweites Fenster zur Methodenauswahl.
  4. Auswahl treffen: Die gewünschten Methoden markieren und mit OK bestätigen.

Die ausgewählten Methoden erscheinen nun im Read-Fenster.

Hinweis

Verwendung von String-Parametern

Die direkte Verwendung von String-Parametern kann zu Initialisierungsfehlern in TwinCAT 3 C++-Modulen führen. Als Best Practice sollten Strings in strukturierte Datentypen, z. B Structs, gekapselt werden.