AdsClient.TryInvokeRpcMethod Method (String, String, .Object., .AnyTypeSpecifier., AnyTypeSpecifier, .Object.., Object.)

Invokes the RPC Method

Namespace:  TwinCAT.Ads
Assembly:  TwinCAT.Ads (in TwinCAT.Ads.dll) Version: 6.0.328+39e3229

Syntax

C#

public AdsErrorCode TryInvokeRpcMethod(
    string symbolPath,
    string methodName,
    Object[]? inParameters,
    AnyTypeSpecifier[]? outSpecifiers,
    AnyTypeSpecifier? retSpecifier,
    out Object[]? outParameters,
    out Object?? retValue
)

Parameters

symbolPath

Type: System.String
The symbol.

methodName

Type: System.String
Name of the method.

inParameters

Type: .System.Object.
The parameters.

outSpecifiers

Type: .TwinCAT.TypeSystem.AnyTypeSpecifier.
The out specifiers (specifying the out types) or NULL.

retSpecifier

Type: TwinCAT.TypeSystem.AnyTypeSpecifier
The ret specifier (specifying the return value) or NULL.

outParameters

Type: .System.Object..
The out parameters.

retValue

Type: System.Object.
The return value of the RPC method./>

Return Value

Type: AdsErrorCode
AdsErrorCode.

Implements

IAdsRpcInvoke.TryInvokeRpcMethod(String, String, .Object., .AnyTypeSpecifier., AnyTypeSpecifier, .Object.., Object.)

Remarks

The RpcMethod optionally support In-Parameters, Out-Parameters and Return values. Therefore the parameters inParameters, outParameters, outSpecifiers, retSpecifier are allowed to be empty or NULL. In case of using primitive datatypes, the type specifier parameters (outSpecifiers and retSpecifier) are not necessary and should not be set.

Examples

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

TryInvokeRpcMethod Overload

TwinCAT.Ads Namespace