AdsConnection.TryInvokeRpcMethod Method (IRpcCallableInstance, IRpcMethod, .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(
    IRpcCallableInstance symbol,
    IRpcMethod method,
    Object[]? inParameters,
    AnyTypeSpecifier[]? outSpecifiers,
    AnyTypeSpecifier? retSpecifier,
    out Object[]? outParameters,
    out Object?? retValue
)

Parameters

symbol

Type: TwinCAT.TypeSystem.IRpcCallableInstance
The RPC callable symbol

method

Type: TwinCAT.TypeSystem.IRpcMethod
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(IRpcCallableInstance, IRpcMethod, .Object., .AnyTypeSpecifier., AnyTypeSpecifier, .Object.., Object.)

Exceptions

Exception

Condition

ObjectDisposedException

this.Name

ClientNotConnectedException

Remarks

The RpcMethod optionally support In-Parameters, Out-Parameters and Return values. Therefore the parameters inParameters, outParameters, are allowed to be empty or NULL.

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

AdsConnection Class

TryInvokeRpcMethod Overload

TwinCAT.Ads Namespace