internal AdsSymbolLoader(IAdsConnection connection, SymbolLoaderSettings settings, IAccessorRawValue accessor, ISession session, SymbolUploadInfo symbolsInfo) { if (settings == null) { throw new ArgumentNullException("settings"); } if (accessor == null) { throw new ArgumentNullException("accessor"); } if (symbolsInfo == null) { throw new ArgumentNullException("symbolsInfo"); } ISymbolFactory symbolFactory = null; this._connection = connection; this._symbolUploadInfo = symbolsInfo; symbolFactory = (settings.SymbolsLoadMode != SymbolsLoadMode.DynamicTree) ? ((ISymbolFactory) new TwinCAT.Ads.TypeSystem.SymbolFactory(settings.NonCachedArrayElements)) : ((ISymbolFactory) new DynamicSymbolFactory(new TwinCAT.Ads.TypeSystem.SymbolFactory(settings.NonCachedArrayElements), settings.NonCachedArrayElements)); this._settings = settings; AdsBinder binder = new AdsBinder(this._connection.Address, this, symbolFactory, this.UseVirtualInstances); this._symbolFactorServices = new SymbolFactoryServices(binder, symbolFactory, accessor, session); symbolFactory.Initialize(this._symbolFactorServices); this._rootNamespace = this._connection.Address.ToString(); this._namespaces = new NamespaceCollection(); }
private static void PrintSymbols(AdsClient client) { SymbolLoaderSettings settings = new SymbolLoaderSettings(TwinCAT.SymbolsLoadMode.VirtualTree); ISymbolLoader loader = SymbolLoaderFactory.Create(client, settings); var symbols = loader.Symbols; PrintSymbols(symbols); }
public void CopyPasteTestStatic() { Console.WriteLine(string.Empty); Console.WriteLine("Press [Enter] for start:"); // logger.Active = false; Stopwatch stopper = new Stopwatch(); stopper.Start(); using (AdsSession session = new AdsSession(new AmsNetId("164.4.4.112.1.1"), 853)) { // client.Synchronize = false; // Connect the AdsClient to the device target. var connection = session.Connect(); // Creates the Symbol Objects as hierarchical tree SymbolLoaderSettings settings = new SymbolLoaderSettings(SymbolsLoadMode.VirtualTree, ValueAccessMode.IndexGroupOffsetPreferred); var symbolLoader = session.SymbolServer.Symbols; // SymbolLoaderFactory.Create(client, settings); //// Dump Datatypes from Target Device // Console.WriteLine(string.Format("Dumping '{0}' DataTypes:", symbolLoader.DataTypes.Count)); // foreach (IDataType type in symbolLoader.DataTypes) // { // Console.WriteLine(type); // } // Console.WriteLine(""); // Dump Symbols from target device Console.WriteLine("Dumping '{0}' Symbols:", symbolLoader.Count); WriteSymbolTree(symbolLoader, (AdsConnection)connection); } stopper.Stop(); TimeSpan elapsed = stopper.Elapsed; Console.WriteLine(string.Empty); }
internal static IAccessorValue createValueAccessor(IAdsConnection connection, SymbolLoaderSettings settings) { IAccessorValue value2 = null; AdsValueAccessor inner = null; IAccessorValueFactory valueFactory = null; if (settings.SymbolsLoadMode == SymbolsLoadMode.DynamicTree) { valueFactory = new DynamicValueFactory(settings.ValueCreation); inner = new AdsValueAccessor(connection, settings.ValueAccessMode, valueFactory, NotificationSettings.Default); value2 = new DynamicValueAccessor(inner, valueFactory, settings.ValueCreation); } else { valueFactory = new ValueFactory(settings.ValueCreation); inner = new AdsValueAccessor(connection, settings.ValueAccessMode, valueFactory, NotificationSettings.Default); value2 = inner; } IAccessorValueFactory2 factory2 = valueFactory as IAccessorValueFactory2; if (valueFactory != null) { factory2.SetValueAccessor(value2); } inner.AutomaticReconnection = settings.AutomaticReconnection; return(value2); }
public void CopyPasteTestDynamic() { using (TcAdsClient client = new TcAdsClient()) { client.Synchronize = false; // Connect to the target device client.Connect("164.4.4.112.1.1", 853); // Usage of "dynamic" Type and Symbols (>= .NET4 only) SymbolLoaderSettings settings = new SymbolLoaderSettings(SymbolsLoadMode.DynamicTree); IAdsSymbolLoader dynLoader = (IAdsSymbolLoader)SymbolLoaderFactory.Create(client, settings); // Set the Default setting for Notifications dynLoader.DefaultNotificationSettings = new AdsNotificationSettings(AdsTransMode.OnChange, 200, 2000); // Get the Symbols (Dynamic Symbols) dynamic dynamicSymbols = ((IDynamicSymbolLoader)dynLoader).SymbolsDynamic; dynamic adsPort = dynamicSymbols.TwinCAT_SystemInfoVarList._AppInfo.AdsPort; // Access Main Symbol with Dynamic Language Runtime support (DLR) // Dynamically created property "Main" // dynamic symMain = dynamicSymbols.Main; // Main is an 'VirtualSymbol' / Organizational unit that doesn't have a value // Calling ReadValue is not allowed // bool test = symMain.HasValue; // dynamic invalid = symMain.ReadValue(); // Reading TaskInfo Value // With calling ReadValue() a 'snapshot' of the Symbols Instance is taken dynamic vTaskInfoArray = dynamicSymbols.TwinCAT_SystemInfoVarList._TaskInfo.ReadValue(); // Getting the Snapshot time in UTC format DateTime timeStamp1 = vTaskInfoArray.UtcTimeStamp; // Getting TaskInfo Symbol for Task 1 dynamic symTaskInfo1 = dynamicSymbols.TwinCAT_SystemInfoVarList._TaskInfo[1]; // Getting CycleCount Symbol dynamic symCycleCount = symTaskInfo1.CycleCount; // Take Snapshot value of the ApplicationInfo struct dynamic vAppInfo = dynamicSymbols.TwinCAT_SystemInfoVarList._AppInfo.ReadValue(); // Get the UTC Timestamp of the snapshot DateTime timeStamp2 = vAppInfo.UtcTimeStamp; // Access the ProjectName of the ApplicationInfo Snapshot (type-safe!) string projectNameValue = vAppInfo.ProjectName; // Reading the CycleCount Value uint cycleCountValue = symTaskInfo1.CycleCount.ReadValue(); // Taking a Value Snapshot // Registering for dynamic "ValueChanged" events for the Values // Using Default Notification settings symCycleCount.ValueChanged += new EventHandler <ValueChangedArgs>(CycleCountValueChanged); // Override default notification settings symTaskInfo1.NotificationSettings = new AdsNotificationSettings(AdsTransMode.Cyclic, 500, 0); // Register for ValueChanged event. symTaskInfo1.ValueChanged += new EventHandler <ValueChangedArgs>(TaskInfo1ValueValueChanged); // Struct Type Thread.Sleep(10000); // Sleep main thread for 10 Seconds } Console.WriteLine("CycleCount Changed events received: {0}", cycleCountEvents); Console.WriteLine("taskInfo1 Changed events received: {0}", taskInfo1Events); }