DynamicRpcStructInstance.InvokeRpcMethodAsync Method (String, .Object., .AnyTypeSpecifier., AnyTypeSpecifier, CancellationToken)
Invokes the specified RPC Method asynchronously
Namespace: TwinCAT.TypeSystem
Assembly: TwinCAT.Ads (in TwinCAT.Ads.dll)
Version:
5.0.294+Branch.releases-5.0.Sha.90bb9a1b43b6095934fddca3e72bc0ea15da1c14
Syntax
C#
public Task<ResultRpcMethodAccess> InvokeRpcMethodAsync(
string methodName,
Object[] inParameters,
AnyTypeSpecifier[] outSpecifiers,
AnyTypeSpecifier retSpecifier,
CancellationToken cancel
)
Parameters
methodName |
Type: System.String |
inParameters |
Type: .System.Object. |
outSpecifiers |
Type: .TwinCAT.TypeSystem.AnyTypeSpecifier. |
retSpecifier |
Type: TwinCAT.TypeSystem.AnyTypeSpecifier |
cancel |
Type: System.Threading.CancellationToken |
Return Value
Type: Task.ResultRpcMethodAccess.
A task that represents the asynchronous 'InvokeRpcMethod'
operation. The ResultRpcMethodAccess
results contains the return value (ReturnValue)
together with the output parameters. The succeeded communication is
indicated by the ErrorCode property (ErrorCode) after the
communication.
Implements
Remarks
The RpcMethod optionally support In-Parameters, Out-Parameters and Return values. Therefore the parameters inParameters, 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)
IRpcStructInstance main = (IRpcStructInstance)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;
}
}
}
}
}