SumSymbolWrite Class

Class for ADS Sum symbolic Write Access.

Inheritance Hierarchy

System.Object
  SumCommandWrapper.SumWrite.
    SumSymbolCommand.SumWrite.
      TwinCAT.Ads.SumCommand.SumSymbolWrite
Namespace:  TwinCAT.Ads.SumCommand
Assembly:  TwinCAT.Ads (in TwinCAT.Ads.dll) Version: 6.0.328+39e3229

Syntax

C#

public class SumSymbolWrite : SumSymbolCommand<SumWrite>

The SumSymbolWrite type exposes the following members.

Methods

 

Name

Description

SumSymbolWrite Class 1:

Equals

Determines whether the specified object is equal to the current object. (Inherited from Object.)

SumSymbolWrite Class 2:

Finalize

Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)

SumSymbolWrite Class 3:

GetHashCode

Serves as the default hash function. (Inherited from Object.)

SumSymbolWrite Class 4:

GetType

Gets the Type of the current instance. (Inherited from Object.)

SumSymbolWrite Class 5:

MemberwiseClone

Creates a shallow copy of the current Object. (Inherited from Object.)

SumSymbolWrite Class 6:

ToString

Returns a string that represents the current object. (Inherited from Object.)

SumSymbolWrite Class 7:

TryWrite

Writes the specified values.

SumSymbolWrite Class 8:

Write

Writes the specified values.

SumSymbolWrite Class 9:

WriteAsync

Reads the symbol values asynchronously.

Remarks

The SumSymbolWrite implements symbolic write access with automatic (dynamic) value marshalling. The advantage of the symbolic access is (in contrast to the handle access classes SumHandleRead,SumHandleWrite) that all type information is available when using this ADS Sum Command. The disadvantage is, that the Symbolic information must be loaded beforehand, see examples. The SumSymbolWrite defaults to an IndexGroup/IndexOffset read (IndexGroupIndexOffset), because the the write access by InstancePath/SymbolName is not supported. The disadvantage of this mode is, that dereferencing References/Pointers don't work and their values cannot be resolved. An option is to use the ValueByHandle, but that means to use more ADS roundtrips because the handles have to be requested first!

Examples

Usage of SumRead/SumSymbolWrite with AdsSession

/// <summary>
/// Defines the entry point of the application.
/// </summary>
/// <param name="args">The arguments.</param>
static async void Main(string[] args)
{
    Console.WriteLine("");
    Console.WriteLine("Press [Enter] for start:");
    Console.ReadLine();

    // Parse the command-line arguments
    AmsAddress address = ArgParser.Parse(args);

    CancellationTokenSource cancelSource = new CancellationTokenSource();
    CancellationToken cancel = cancelSource.Token;

    using (AdsSession session = new AdsSession(address))
    {
    // Connect to the device target.
    AdsConnection connection = (AdsConnection)session.Connect();

    // Load symbolic information
    var resultSymbols = await session.SymbolServer.GetSymbolsAsync(cancel);
    resultSymbols.ThrowOnError();

    ISymbolCollection<ISymbol> symbols = resultSymbols.Symbols;

    ISymbol bVar1 = symbols["GVL.bVar1"];
    ISymbol bVar2 = symbols["GVL.bVar2"];
    ISymbol projectName = symbols["TwinCAT_SystemInfoVarList._AppInfo.ProjectName"];

    SymbolCollection coll = new SymbolCollection() {bVar1, bVar2, projectName};

    // Sum Command Read
    SumSymbolRead readCommand = new SumSymbolRead(connection,coll);
    var resultReadValues = await readCommand.ReadAsync(cancel);

    if (resultReadValues.Succeeded)
    {
        object[] values = resultReadValues.Values;

        for (int i = 0; i < coll.Count; i++)
        {
        Console.WriteLine("Symbol: {0} (Value: {1}, Type: {2})", coll[i].InstancePath, values[i].ToString(), values[i].GetType().Name);
        }
    }
    // Sum Command Write

    SumSymbolWrite writeCommand = new SumSymbolWrite(connection,coll);
    object[] writeValues = new object[] {true, (short) 42, "MyNewProjectName"};

    var resultWrite = await writeCommand.WriteAsync(writeValues,cancel);
    }

    Console.WriteLine("");
    Console.WriteLine("Press [Enter] for leave:");
    Console.ReadLine();
}

Examples

Usage of SumRead/SumSymbolWrite with AdsClient

/// <summary>
/// Defines the entry point of the application.
/// </summary>
/// <param name="args">The arguments.</param>
static async void Main(string[] args)
{
    Console.WriteLine("");
    Console.WriteLine("Press [Enter] for start:");
    Console.ReadLine();

    CancellationTokenSource cancelSource = new CancellationTokenSource();
    CancellationToken cancel = cancelSource.Token;

    // Parse the command-line arguments
    AmsAddress address = ArgParser.Parse(args);

    using (AdsClient client = new AdsClient())
    {
    // Connect the AdsClient to the device target.
    client.Connect(address);

    // Load symbolic information
    ISymbolLoader loader = SymbolLoaderFactory.Create(client, SymbolLoaderSettings.Default);
    var resultReadSymbols = await loader.GetSymbolsAsync(cancel);

    resultReadSymbols.ThrowOnError();

    ISymbolCollection<ISymbol> allSymbols = resultReadSymbols.Symbols;

    ISymbol bVar1 = allSymbols["GVL.bVar1"];
    ISymbol bVar2 = allSymbols["GVL.iCount"];
    ISymbol projectName = allSymbols["TwinCAT_SystemInfoVarList._AppInfo.ProjectName"];

    SymbolCollection symbols = new SymbolCollection() {bVar1, bVar2, projectName};

    // Sum Command Read
    SumSymbolRead readCommand = new SumSymbolRead(client,symbols);
    var resultSumRead = await readCommand.ReadAsync(cancel);

    if (resultSumRead.Succeeded)
    {
        object[] values = resultSumRead.Values;

        for (int i = 0; i < symbols.Count; i++)
        {
        Console.WriteLine("Symbol: {0} (Value: {1}, Type: {2})", symbols[i].InstancePath, values[i].ToString(), values[i].GetType().Name);
        }

        // Sum Command Write
        SumSymbolWrite writeCommand = new SumSymbolWrite(client, symbols);
        object[] writeValues = new object[] { true, (short)42, "MyNewProjectName" };

        var resultSumWrite = await writeCommand.WriteAsync(writeValues, cancel);
    }
    }

    Console.WriteLine("");
    Console.WriteLine("Press [Enter] for leave:");
    Console.ReadLine();
}

Reference

TwinCAT.Ads.SumCommand Namespace

TwinCAT.Ads.SumCommand.ISumCommand

TwinCAT.Ads.SumCommand.SumSymbolWrite