/////////////////////////////////////////////////////////////////////// #region OPC Sample Functionality void DoOPCCalls() { try { const string serverUrl = "opcda://localhost/Technosoftware.DaSample"; Console.WriteLine(); Console.WriteLine("Simple OPC DA Client based on the OPC DA/AE/HDA Client SDK .NET"); Console.WriteLine("---------------------------------------------------------------"); Console.Write(" Press <Enter> to connect to "); Console.WriteLine(serverUrl); Console.ReadLine(); Console.WriteLine(" Please wait..."); //OpcBase.ValidateLicense("License Key"); TsCDaServer myDaServer = new TsCDaServer(); // Connect to the server myDaServer.Connect(serverUrl); // Get the status from the server OpcServerStatus status = myDaServer.GetServerStatus(); Console.WriteLine(" Connected, press <Enter> to create an active group object and add several items."); Console.ReadLine(); // Add a group with default values Active = true and UpdateRate = 500ms TsCDaSubscription group; TsCDaSubscriptionState groupState = new TsCDaSubscriptionState { Name = "MyGroup" /* Group Name*/ }; group = (TsCDaSubscription)myDaServer.CreateSubscription(groupState); // Add Items TsCDaItem[] items = new TsCDaItem[4]; TsCDaItemResult[] itemResults; items[0] = new TsCDaItem(); items[0].ItemName = "SimulatedData.Ramp"; // Item Name items[0].ClientHandle = 100; // Client Handle items[0].MaxAgeSpecified = true; items[0].MaxAge = 0; // Read from Cache items[0].Active = true; items[0].ActiveSpecified = true; items[1] = new TsCDaItem(); items[1].ItemName = "CTT.SimpleTypes.InOut.Integer"; // Item Name items[1].ClientHandle = 150; // Client Handle items[1].Active = true; items[1].ActiveSpecified = true; items[2] = new TsCDaItem(); items[2].ItemName = "CTT.SimpleTypes.InOut.Short"; // Item Name items[2].ClientHandle = 200; // Client Handle items[2].Active = false; items[2].ActiveSpecified = true; items[3] = new TsCDaItem(); items[3].ItemName = "CTT.Arrays.InOut.Word[]"; // Item Name items[3].ClientHandle = 250; // Client Handle items[3].Active = false; items[3].ActiveSpecified = true; // Synchronous Read with server read funtion (DA 3.0) without a group TsCDaItemValueResult[] itemValues = myDaServer.Read(items); TsCDaItem[] arAddedItems; itemResults = group.AddItems(items); for (int i = 0; i < itemResults.GetLength(0); i++) { if (itemResults[i].Result.IsError()) { Console.WriteLine(String.Format(" Item {0} could not be added to the group", itemResults[i].ItemName)); } } arAddedItems = itemResults; Console.WriteLine(""); Console.WriteLine(" Group and items added, press <Enter> to create a data change subscription"); Console.WriteLine(" and press <Enter> again to deactivate the data change subscription."); Console.WriteLine(" This stops the reception of data change notifications."); Console.ReadLine(); group.DataChangedEvent += OnDataChangeEvent; Console.ReadLine(); // Set group inactive groupState.Active = false; group.ModifyState((int)TsCDaStateMask.Active, groupState); Console.WriteLine(" Data change subscription deactivated, press <Enter> to remove all"); Console.WriteLine(" and disconnect from the server."); group.Dispose(); myDaServer.Disconnect(); myDaServer.Dispose(); Console.ReadLine(); Console.WriteLine(" Disconnected from the server."); Console.WriteLine(); } catch (OpcResultException e) { Console.WriteLine(" " + e.Message); Console.ReadLine(); return; } catch (Exception e) { Console.WriteLine(" " + e.Message); Console.ReadLine(); return; } }
public static OpcServerStatus GetServerStatus(OpcDaServer server) { var opcServer = _Servers.FirstOrDefault(x => x.Item1.ServerName == server.ServerName); if (opcServer == null) { var srv = GetOpcDaServers().FirstOrDefault(s => s.ServerName == server.ServerName); if (srv != null) { var url = new OpcUrl(OpcSpecification.OPC_DA_20, OpcUrlScheme.DA, server.Url); var opcSrv = new TsCDaServer(); try { opcSrv.Connect(url, null); var result = opcSrv.GetServerStatus(); opcSrv.Disconnect(); return result; } catch { return null; } } else return null; } else { return opcServer.Item1.IsConnected ? opcServer.Item1.GetServerStatus() : null; } }
/////////////////////////////////////////////////////////////////////// #region OPC Sample Functionality void DoOPCCalls() { try { const string serverUrl = "opcda://localhost/Technosoftware.DaSample"; Console.WriteLine(); Console.WriteLine("Simple OPC DA Client based on the OPC DA/AE/HDA Client SDK .NET Standard"); Console.WriteLine("--------------------------------------------------------------"); Console.Write(" Press <Enter> to connect to "); Console.WriteLine(serverUrl); Console.ReadLine(); Console.WriteLine(" Please wait..."); //OpcBase.ValidateLicense("License Key"); TsCDaServer myDaServer = new TsCDaServer(); // Connect to the server myDaServer.Connect(serverUrl); OpcServerStatus status = myDaServer.GetServerStatus(); Console.WriteLine(" Connected, press <Enter> to create an active group object and add several items."); Console.ReadLine(); // Add a group with default values Active = true and UpdateRate = 500ms TsCDaSubscription group; TsCDaSubscriptionState groupState = new TsCDaSubscriptionState { Name = "MyGroup" /* Group Name*/ }; group = (TsCDaSubscription)myDaServer.CreateSubscription(groupState); // Add Items TsCDaItem[] items = new TsCDaItem[2]; TsCDaItemResult[] itemResults; items[0] = new TsCDaItem(); items[0].ItemName = "SimpleTypes.InOut.Integer"; // Item Name items[0].ClientHandle = 100; // Client Handle items[0].Active = true; items[0].ActiveSpecified = true; items[1] = new TsCDaItem(); items[1].ItemName = "SimpleTypes.InOut.Short"; // Item Name items[1].ClientHandle = 200; // Client Handle items[1].Active = false; items[1].ActiveSpecified = true; TsCDaItem[] arAddedItems; itemResults = group.AddItems(items); for (int i = 0; i < itemResults.GetLength(0); i++) { if (itemResults[i].Result.IsError()) { Console.WriteLine(String.Format(" Item {0} could not be added to the group", itemResults[i].ItemName)); } } arAddedItems = itemResults; OpcItemResult[] res; IOpcRequest m_ITRequest; TsCDaItemValue[] arItemValues = new TsCDaItemValue[1]; arItemValues[0] = new TsCDaItemValue(); arItemValues[0].ClientHandle = 100; arItemValues[0].ItemName = "SimpleTypes.InOut.Short"; int val = 0; do { arItemValues[0].Value = val; res = group.Write(arItemValues, 321, new TsCDaWriteCompleteEventHandler(OnWriteCompleteEvent), out m_ITRequest); val++; } while (val < 1000); Console.ReadLine(); group.Dispose(); // optionally, it's not required myDaServer.Disconnect(); // optionally, it's not required Console.ReadLine(); Console.WriteLine(" Disconnected from the server."); Console.WriteLine(); } catch (OpcResultException e) { Console.WriteLine(" " + e.Message); Console.ReadLine(); return; } catch (Exception e) { Console.WriteLine(" " + e.Message); Console.ReadLine(); return; } }