ValueSymbolExtensions.WhenValueChanged Method (IValueSymbol)
Gets an observable sequence when the value of the IValueSymbol has changed.
Namespace: TwinCAT.Ads.Reactive
Assembly: TwinCAT.Ads.Reactive (in
TwinCAT.Ads.Reactive.dll) Version: 4.3.0.0 (4.3.7.0)
Syntax
C#
public static IObservable<Object> WhenValueChanged(
this IValueSymbol symbol
)
VB
<ExtensionAttribute>
Public Shared Function WhenValueChanged (
symbol As IValueSymbol
) As IObservable(Of Object)
Return Value
Type: IObservable.Object.
IObservable<System.Object>.
Usage Note
In Visual Basic and C#, you can call this method as an instance method on any object of type IValueSymbol. When you use instance method syntax to call this method, omit the first parameter. For more information, see Extension Methods (Visual Basic) or Extension Methods (C# Programming Guide).
Examples
The following sample shows how to observe Value changed Notifications with the reactive ValueSymbolExtensions from an IValueSymbol.
Observe a single changing ADS Symbols (ADS Notifications)
// To Test the Observer run a project on the local PLC System (Port 851)
using (TcAdsClient client = new TcAdsClient())
{
// Connect to target
client.Connect(new AmsAddress(AmsNetId.Local, 851));
// Create Symbol information
var symbolLoader = SymbolLoaderFactory.Create(client, SymbolLoaderSettings.Default);
IValueSymbol cycleCount = (IValueSymbol)symbolLoader.Symbols["TwinCAT_SystemInfoVarList._TaskInfo[1].CycleCount"];
// Reactive Notification Handler
var valueObserver = Observer.Create<object>(val =>
{
Console.WriteLine(string.Format("Instance: {0}, Value: {1}", cycleCount.InstancePath, val.ToString()));
}
);
cycleCount.NotificationSettings = new NotificationSettings(AdsTransMode.OnChange, 500, 5000); // optional: Change NotificationSettings on Symbol
// Turning ADS Notifications into sequences of Value Objects (Taking 20 Values)
// and subscribe to them.
IDisposable subscription = cycleCount.WhenValueChanged().Take(20).Subscribe(valueObserver);
Console.ReadKey(); // Wait for Key press
subscription.Dispose(); // Dispose the Subscription
}