AdsClientInvokeRpcMethodAsync(String, String, Object, CancellationToken) Method

Invokes the specified RPC Method asynchronously


Namespace: TwinCAT.Ads
Assembly: TwinCAT.Ads (in TwinCAT.Ads.dll) Version: 7.0.0+e56d35ccc4675faac24789a4aab60071fc61d470

Syntax

C#

public Task<ResultRpcMethod> InvokeRpcMethodAsync(
    string symbolPath,
    string methodName,
    Object[]? inParameters,
    CancellationToken cancel
)

Parameters

symbolPath  String

The symbol/Instance path of the symbol.

methodName  String

The method name.

inParameters  Object

The parameters.

cancel  CancellationToken

The cancellation token

Return Value

Task ResultRpcMethod
A task that represents the asynchronous 'InvokeRpcMethod' operation. The ResultRpcMethod results contains the return value together with the output parameters.

Implements

IAdsRpcInvokeInvokeRpcMethodAsync(String, String, Object, CancellationToken)

Remarks

Because this overload doesn't provide any AnyTypeSpecifier specifications, only primitive datatypes will be correctly marshalled by this method. Complex types will fall back to byte[] arrays.

Example

The following sample shows how to call (Remote Procedures / Methods) within the PLC.

Dynamic Tree Mode

class RpcCallVirtualProgram
{
    /// <summary>
    /// Defines the entry point of the application.
    /// </summary>
    /// <param name="args">The arguments.</param>
    static void Main(string[] args)
    {
    // Get the AdsAddress from command-line arguments
    AmsAddress address = ArgParser.Parse(args);

    using (AdsClient client = new AdsClient())
    {
        //client.Synchronize = false;

        // Connect to the target device
        client.Connect(address);

        SymbolLoaderSettings settings = new SymbolLoaderSettings(SymbolsLoadMode.VirtualTree);
        ISymbolLoader loader = SymbolLoaderFactory.Create(client, settings);

        // Get the Symbols (Dynamic Symbols)

        IStructInstance main = (IStructInstance)loader.Symbols["MAIN"]; // Gets the MAIN Instance of the PLC Program

        // Call a Method that has the following signature (within MAIN Program)
        /*  {attribute 'TcRpcEnable'}
        METHOD PUBLIC M_Add : INT
        VAR_INPUT
            i1 : INT := 0;
            i2 : INT := 0;
        END_VAR 
        */

        short result = (short)main.InvokeRpcMethod("M_Add", new object[] {(short) 3, (short) 4});

        // Call a Method that has no parameter and returns VOID
        main.InvokeRpcMethod("M_Method1", new object[] {});

        //Browsing RpcMethods
        foreach(IRpcMethod method in main.RpcMethods)
        {
        string methodName = method.Name;

        foreach(IRpcMethodParameter parameter in method.Parameters)
        {
            string parameterName = parameter.Name;
            string parameterType = parameter.TypeName;
        }
        }
    }
    }
}

Reference

AdsClient Class InvokeRpcMethodAsync Overload TwinCAT.Ads Namespace

Beckhoff Automation GmbH & Co. KG 2001-2026