/// <summary> /// Creates a subscription with the specified parameters. /// </summary> private void DoCreate() { try { // assign a globally unique handle to the subscription. TsCDaSubscriptionState state = (TsCDaSubscriptionState)SubscriptionCTRL.Get(); state.ClientHandle = Guid.NewGuid().ToString(); // create the subscription. m_subscription = (TsCDaSubscription)m_server.CreateSubscription(state); // move to add items panel. BackBTN.Enabled = true; NextBTN.Enabled = true; CancelBTN.Visible = false; DoneBTN.Visible = true; OptionsBTN.Visible = true; SubscriptionCTRL.Visible = false; BrowseCTRL.Visible = true; ItemsCTRL.Visible = true; ResultsCTRL.Visible = false; } catch (Exception e) { MessageBox.Show(e.Message); } }
/// <summary> /// Creates a subscription with the specified parameters. /// </summary> private void DoCreate() { try { // assign a globally unique handle to the subscription. TsCDaSubscriptionState state = (TsCDaSubscriptionState)subscriptionCtrl_.Get(); state.ClientHandle = Guid.NewGuid().ToString(); // create the subscription. mSubscription_ = (TsCDaSubscription)mServer_.CreateSubscription(state); // move to add items panel. backBtn_.Enabled = true; nextBtn_.Enabled = true; cancelBtn_.Visible = false; doneBtn_.Visible = true; optionsBtn_.Visible = true; subscriptionCtrl_.Visible = false; browseCtrl_.Visible = true; itemsCtrl_.Visible = true; resultsCtrl_.Visible = false; } catch (Exception e) { MessageBox.Show(e.Message); } }
/// <summary> /// Set things in motion so your service can do its work. /// </summary> protected override void OnStart(string[] args) { const string serverName = "opcda://localhost/Technosoftware.DaSample"; try { myDaServer = new TsCDaServer(); myDaServer.Connect(serverName); OpcServerStatus status = myDaServer.GetServerStatus(); // Add a group with default values Active = true and UpdateRate = 500ms TsCDaSubscriptionState groupState = new TsCDaSubscriptionState(); groupState.Name = "MyGroup"; // Group Name group = (TsCDaSubscription)myDaServer.CreateSubscription(groupState); // Add Items TsCDaItem[] items = new TsCDaItem[3]; 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 = Int32.MaxValue; items[1] = new TsCDaItem(); items[1].ItemName = "SimulatedData.Random"; // Item Name items[1].ClientHandle = 150; // Client Handle items[2] = new TsCDaItem(); items[2].ItemName = "InOut_I4"; // Item Name items[2].ClientHandle = 200; // Client Handle TsCDaItem[] arAddedItems; itemResults = group.AddItems(items); for (int i = 0; i < itemResults.GetLength(0); i++) { if (itemResults[i].Result.IsError()) { Console.WriteLine(" Item " + itemResults[i].ItemName + "could not be added to the group"); } } arAddedItems = itemResults; group.DataChangedEvent += new TsCDaDataChangedEventHandler(DataChangeHandler); Console.WriteLine("Wait 5 seconds ..."); //System.Threading.Thread.Sleep(5000); } catch (OpcResultException e) { Console.WriteLine(" " + e.Message); return; } catch (Exception e) { Console.WriteLine(" " + e.Message); return; } }
//---------------------------------------------------------------------------------------------------------------------- // btnAddItem_Click //-------------------- // This method tries to add the specified item to the preceding added group object. //---------------------------------------------------------------------------------------------------------------------- private void btnAddItem_Click(object sender, System.EventArgs e) { try { TsCDaSubscriptionState groupState = new TsCDaSubscriptionState(); groupState.Name = "MyGroup"; // Group Name m_pOpcGroup = (TsCDaSubscription)m_OpcDaServer.CreateSubscription(groupState); TsCDaItemResult[] res; TsCDaItem[] items = new TsCDaItem[1]; items[0] = new TsCDaItem(); items[0].ItemName = txtboxOpcItem.Text; // Item Name items[0].ClientHandle = 100; // Client Handle res = m_pOpcGroup.AddItems(items); if (res[0].Result.IsSuccess()) { if (!(res[0].Result.IsOk())) // Note: Since this sample adds only one item it's required that AddItems() { return; // succeeds for all specified items (in this case only one). } else { m_arAddedItems = res; } } else { MessageBox.Show("AddItems() method failed: " + res[0].Result.Description(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } /// All succeeded, update buttons and text fields txtboxOpcItem.Enabled = false; btnAddItem.Enabled = false; btnRead.Enabled = true; btnWrite.Enabled = true; txtboxWrite.Enabled = true; } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } }
//---------------------------------------------------------------------------------------------------------------------- // btnAddItem_Click //-------------------- // This method tries to add the specified item to the preceding added group object. //---------------------------------------------------------------------------------------------------------------------- private void btnAddItem_Click(object sender, System.EventArgs e) { try { TsCDaSubscriptionState groupState = new TsCDaSubscriptionState(); groupState.Name = "MyGroup"; // Group Name groupState.ClientHandle = "test"; groupState.Deadband = 0; groupState.UpdateRate = 1000; groupState.KeepAlive = 10000; m_pOpcGroup = (TsCDaSubscription)m_OpcDaServer.CreateSubscription(groupState); TsCDaItemResult[] itemResults; TsCDaItem[] items = new TsCDaItem[1]; items[0] = new TsCDaItem(); items[0].ItemName = txtboxOpcItem.Text; // Item Name items[0].ClientHandle = 100; // Client Handle itemResults = m_pOpcGroup.AddItems(items); m_arAddedItems = itemResults; /// Activate data change subscription m_pOpcGroup.DataChangedEvent += new TsCDaDataChangedEventHandler(DataChangeHandler); /// All succeeded, update buttons and text fields txtboxOpcItem.Enabled = false; btnAddItem.Enabled = false; btnRead.Enabled = true; btnRefresh.Enabled = true; btnCancel.Enabled = true; btnWrite.Enabled = true; txtboxWrite.Enabled = true; chboxNotifications.Enabled = true; } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); } }
private void TestMI_Click(object sender, System.EventArgs e) { try { TsCDaServer server = (TsCDaServer)m_server; TsCDaItem[] items = new TsCDaItem[100]; for (int ii = 0; ii < items.Length; ii++) { items[ii] = new TsCDaItem(); items[ii].ItemName = "Static/ArrayTypes/Object[]"; items[ii].ItemPath = "DA30"; items[ii].ClientHandle = ii; } TsCDaSubscriptionState state = new TsCDaSubscriptionState(); state.Active = true; state.UpdateRate = 1000; ITsCDaSubscription subscription = server.CreateSubscription(state); Thread.Sleep(100); TsCDaItemResult[] results = subscription.AddItems(items); Thread.Sleep(100); subscription.RemoveItems(results); Thread.Sleep(100); server.CancelSubscription(subscription); Thread.Sleep(100); } catch (Exception exception) { MessageBox.Show(exception.Message); } }
public void Run() { 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..."); TsCDaServer myDaServer = new TsCDaServer(); // Connect to the server myDaServer.Connect(serverUrl); // Get the status from the server OpcServerStatus status = myDaServer.GetServerStatus(); Console.WriteLine($" Status of Server is {status.ServerState}"); 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 TsCDaSubscriptionState groupState = new TsCDaSubscriptionState { Name = "MyGroup" /* Group Name*/ }; var group = (TsCDaSubscription)myDaServer.CreateSubscription(groupState); // Add Items TsCDaItem[] items = new TsCDaItem[4]; items[0] = new TsCDaItem { ItemName = "SimulatedData.Ramp", ClientHandle = 100, MaxAgeSpecified = true, MaxAge = 0, Active = true, ActiveSpecified = true }; // Item Name // Client Handle // Read from Cache items[1] = new TsCDaItem { ItemName = "CTT.SimpleTypes.InOut.Integer", ClientHandle = 150, Active = true, ActiveSpecified = true }; // Item Name // Client Handle items[2] = new TsCDaItem { ItemName = "CTT.SimpleTypes.InOut.Short", ClientHandle = 200, Active = false, ActiveSpecified = true }; // Item Name // Client Handle items[3] = new TsCDaItem { ItemName = "CTT.Arrays.InOut.Word[]", ClientHandle = 250, Active = false, ActiveSpecified = true }; // Item Name // Client Handle // Synchronous Read with server read function (DA 3.0) without a group TsCDaItemValueResult[] itemValues = myDaServer.Read(items); for (int i = 0; i < itemValues.GetLength(0); i++) { if (itemValues[i].Result.IsError()) { Console.WriteLine($" Item {itemValues[i].ItemName} could not be read"); } } var itemResults = group.AddItems(items); for (int i = 0; i < itemResults.GetLength(0); i++) { if (itemResults[i].Result.IsError()) { Console.WriteLine($" Item {itemResults[i].ItemName} could not be added to the group"); } } 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(); } catch (Exception e) { Console.WriteLine(" " + e.Message); Console.ReadLine(); } }
/////////////////////////////////////////////////////////////////////// #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); 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; } }
public static void Start() { var servers = GetOpcDaServers(); OpcDaServers = ConfigurationCashHelper.SystemConfiguration.AutomationConfiguration.OpcDaTsServers.ToArray(); foreach (var server in OpcDaServers) { if (!servers.Any(x => x.Url == server.Url)) { Notifier.UILog(string.Format("Не удалось запусть OPC DA сервер {0}. Сервер не найден", server.Url), true); //MainViewModel.SetReportAddress("<Ошибка>"); continue; } var url = new OpcUrl(OpcSpecification.OPC_DA_20, OpcUrlScheme.DA, server.Url); var opcServer = new TsCDaServer(); try { opcServer.Connect(url, null); opcServer.ServerShutdownEvent += reason => { var srv = _Servers.FirstOrDefault(x => x.Item1.ServerName == opcServer.ServerName); if (srv != null) { try { srv.Item1.CancelSubscription(srv.Item2); } catch { } // Ищем все теги для данного сервера у удаляем их var tags = _tags.Where(t => t.ServerName == opcServer.ServerName); foreach (var tag in tags) { _tags.Remove(tag); } _Servers.Remove(srv); } }; // Создаём объект подписки var id = Guid.NewGuid().ToString(); var subscriptionState = new TsCDaSubscriptionState { Name = id, ClientHandle = id, Deadband = 0, UpdateRate = 1000, KeepAlive = 10000 }; var subscription = (TsCDaSubscription)opcServer.CreateSubscription(subscriptionState); _Servers.Add(Tuple.Create<TsCDaServer, TsCDaSubscription>(opcServer, subscription)); // Добавляем в объект подписки выбранные теги List<TsCDaItem> list = server.Tags.Select(tag => new TsCDaItem { ItemName = tag.ElementName, ClientHandle = tag.ElementName // Уникальный Id определяемый пользователем }).ToList(); // Добавляем теги и проверяем результат данной операции var results = subscription.AddItems(list.ToArray()); var errors = results.Where(result => result.Result.IsError()); if (errors.Count() > 0) { StringBuilder msg = new StringBuilder(); msg.Append("Не удалось добавить теги для подписки. Возникли ошибки в тегах:"); foreach (var error in errors) { msg.Append(String.Format("ItemName={0} ClientHandle={1} Description={2}; ", error.ItemName, error.ClientHandle, error.Result.Description())); } //throw new InvalidOperationException(msg.ToString()); } subscription.DataChangedEvent += EventHandler_Subscription_DataChangedEvent; _tags.AddRange(server.Tags.Select(tag => new OpcDaTagValue { ElementName = tag.ElementName, TagId = tag.TagId, Uid = tag.Uid, Path = tag.Path, TypeNameOfValue = tag.TypeNameOfValue, AccessRights = tag.AccessRights, ScanRate = tag.ScanRate, ServerId = server.Uid, ServerName = server.ServerName })); } catch (Exception ex) { Notifier.UILog(ex.Message, true); } } }