/// <summary> /// 开启设备调度服务,重复调用时将动态更新设备和相关的点表 /// </summary> /// <returns></returns> private async Task <bool> StartDispatchingService() { try { LogHelper.Logger.Info("慧远调度服务开始启动"); foreach (var opcServer in dbContext.OpcServerDb.GetList(a => a.IsEnable == true && a.OpcType == Models.OpcType.OpcUa)) { //已经有此ua服务器,那么更新节点 if (OpcUaClientHelperList.Any(a => a.Name == opcServer.Name)) { var opcUaClientHelper = OpcUaClientHelperList.FirstOrDefault(a => a.Name == opcServer.Name); var nodes = dbContext.DeviceNodeDb.GetList(a => a.IsEnable == true && a.OpcServerId == opcServer.Id); var nd = from a in nodes select new OpcUaHelper.OpcUaDataItem { Name = a.Name.StartsWith("ns=2;s=") ? a.Name : "ns=2;s=" + a.Name, UpdateRate = a.UpdateRate, ValueType = ((TypeCode)a.DataType).ToType(), OpcUaStatusCodes = OpcUaStatusCodes.Bad }; var result = await opcUaClientHelper.RegisterNodes(nd.ToList()); LogHelper.Logger.Info($"更新节点结果:{result},{opcServer.Name },{opcServer.Uri}"); } else//没有此ua服务器,那么新增 { var nodes = dbContext.DeviceNodeDb.GetList(a => a.IsEnable == true && a.OpcServerId == opcServer.Id); OpcUaHelper.OpcUaClientHelper opcUaClientHelper = new OpcUaHelper.OpcUaClientHelper(); OpcUaClientHelperList.Add(opcUaClientHelper); opcUaClientHelper.Name = opcServer.Name; opcUaClientHelper.ServerUri = opcServer.Uri; opcUaClientHelper.OnLogHappened += OpcUaClientHelper_OnLogHappened; opcUaClientHelper.OnErrorHappened += OpcUaClientHelper_OnErrorHappened; opcUaClientHelper.OnDataChanged += OpcUaClientHelper_OnDataChanged; DispatchingHandler = new dispatchingDelegate(dispatchingExecute); OpcUaHelper.OpcUaStatusCodes opcUaStatusCodes = await opcUaClientHelper.ConnectAsync(); LogHelper.Logger.Info($"慧远调度服务启动结果:{opcUaStatusCodes},{opcServer.Name },{opcServer.Uri}"); var nd = from a in nodes select new OpcUaHelper.OpcUaDataItem { Name = a.Name.StartsWith("ns=2;s=") ? a.Name : "ns=2;s=" + a.Name, UpdateRate = a.UpdateRate, ValueType = ((TypeCode)a.DataType).ToType(), OpcUaStatusCodes = OpcUaStatusCodes.Bad }; await opcUaClientHelper.RegisterNodes(nd.ToList()); } } LogHelper.Logger.Info("慧远调度服务启动成功"); return(true); } catch (Exception ex) { LogHelper.Logger.Error("", ex); return(false); } }
private async void btnUpdateDataItems_Click(object sender, RoutedEventArgs e) { string message; if (!opcUaClientHelper.IsConnected) { message = DateTime.Now.ToString(dateString) + "请先连接服务器" + System.Environment.NewLine; asyncUpMessage(message); return; } //var strList = txtOpcDataItems.Text.Split('\r', '\n'); //List<OpcUaDataItem> opcUaDataItems = new List<OpcUaDataItem>(strList.Count()); ////txtOpcDataItems .Text.Split (System.Environment.NewLine ): //foreach (var strOpcDataItem in strList) //{ // var strOpcDataItemTmp = strOpcDataItem.Split(';'); // if (strOpcDataItemTmp.Count() < 2) // { // continue; // } // OpcDataItem opcDataItem = // new OpcDataItem(strOpcDataItemTmp[0], int.Parse(strOpcDataItemTmp[1]), strOpcDataItemTmp[2], strOpcDataItemTmp[3], (OpcResult)Enum.Parse(typeof(OpcResult), strOpcDataItemTmp[4])); // opcDataItems.Add(opcDataItem); //} //opcClienthelper.RegisterOpcDataItemsAsync(opcDataItems); //dataGridDataSource = new ObservableCollection<OpcDataItem>(opcDataItems); //gvOpcUaDataItems.ItemsSource = dataGridDataSource; //this.txtb.Text = "(" + dataGridDataSource.Count(a => a.Quality == OpcResult.S_OK) + "/" + dataGridDataSource.Count() + ")"; var opcUaStatusCodes = await opcUaClientHelper.RegisterNodes(opcUaDataItems.ToList()); string msg = $"{ DateTime.Now.ToString(dateString)}订阅数据结果:{opcUaStatusCodes}{System.Environment.NewLine}"; asyncUpMessage(msg); gvOpcUaDataItems.ItemsSource = opcUaDataItems; }