private void RegisterLoadedNodes() { var nodeIds = ArchiveVariables.Where(x => x.Archive != ArchiveInterval.None).Select(x => x.Name).ToList(); try { var registeredNodes = _uaClientApi.RegisterNodes(nodeIds); _registeredNodesForRead = ArchiveVariables.Where(x => x.Archive != ArchiveInterval.None) .Zip(registeredNodes, (entity, regNode) => new ArchiveReadVariableModel() { VariableId = entity.Id, RegisteredNodeId = regNode, Type = entity.DataType, Interval = entity.Archive }).ToList(); } catch (Exception e) { Utils.Trace(Utils.TraceMasks.Error, $"{e.Message}"); IoC.AppManager.ShowExceptionErrorMessage(e); } foreach (var variable in ArchiveVariables.Where(x => x.Archive == ArchiveInterval.None)) { var item = _uaClientApi.CreateMonitoredItem($"{variable.Name} [{ArchiveInterval.None}]", variable.Name, 100, null, 2, MonitoringMode.Disabled); item.Notification += Notification_MonitoredItem; _uaClientApi.AddMonitoredItem(item, _subscription); } }
private void AddVariableToArchive(object parameter) { var nodeId = _selectedNode.NodeId.ToString(); var type = _uaClientApi.GetBuiltInTypeOfVariableNodeId(nodeId); var interval = SelectedArchiveInfo.ArchiveInterval; var tmp = new VariableEntity() { Archive = interval, Name = nodeId, DataType = type, ProjectId = IoC.AppManager.ProjectId }; _unitOfWork.Variables.Add(tmp); var variableModel = Mapper.VariableEntityToVariableModel(tmp); _messenger.Send(new SendManageArchivedValue(false, variableModel)); ArchiveVariables.Add(variableModel); try { if (interval != ArchiveInterval.None) { var registeredNode = _uaClientApi.RegisterNode(nodeId); _registeredNodesForRead.Add(new ArchiveReadVariableModel() { Interval = interval, RegisteredNodeId = registeredNode, Type = type, VariableId = tmp.Id }); } else { var item = _uaClientApi.CreateMonitoredItem($"{nodeId} [{ArchiveInterval.None}]", nodeId, 100, null, 2, MonitoringMode.Disabled); item.Notification += Notification_MonitoredItem; _uaClientApi.AddMonitoredItem(item, _subscription); } } catch (Exception e) { Utils.Trace(Utils.TraceMasks.Error, $"{e.Message}"); IoC.AppManager.ShowExceptionErrorMessage(e); } SelectedArchiveInfo.VariablesCount++; }
private void InitializeArchiveTable() { var archiveIntervals = Enum.GetValues(typeof(ArchiveInterval)).Cast <ArchiveInterval>(); ArchiveInfo = new ObservableCollection <ArchiveListModel>(); foreach (var interval in archiveIntervals) { ArchiveInfo.Add(new ArchiveListModel() { ArchiveInterval = interval, VariablesCount = ArchiveVariables.Count(x => x.Archive == interval), Running = false }); } }
private void DeleteVariableFromArchive(object parameter) { var interval = SelectedArchiveVariable.Archive; foreach (var archive in ArchiveInfo) { if (archive.ArchiveInterval == interval) { archive.VariablesCount--; } } // Vymazanie z databaze _unitOfWork.Variables.DeleteById(SelectedArchiveVariable.Id); //_unitOfWork.Variables.Remove(Mapper.VariableModelToVariableEntity(SelectedArchiveVariable)); _messenger.Send(new SendManageArchivedValue(true, SelectedArchiveVariable)); try { if (interval == ArchiveInterval.None) { _uaClientApi.RemoveMonitoredItem(_subscription, SelectedArchiveVariable.Name); } else { // Odregistrovanie var var = _registeredNodesForRead.FirstOrDefault(x => x.VariableId == SelectedArchiveVariable.Id); _uaClientApi.UnRegisterNode(var?.RegisteredNodeId); // Vymazanie z nodes for read _registeredNodesForRead.Remove(var); } // Vymazanie z tabulky ArchiveVariables.Remove(SelectedArchiveVariable); } catch (Exception e) { Utils.Trace(Utils.TraceMasks.Error, $"{e.Message}"); IoC.AppManager.ShowExceptionErrorMessage(e); } }
/// <summary> /// Callback method for updating values of subscibed nodes /// </summary> /// <param name="monitoredItem"></param> /// <param name="e"></param> private void Notification_MonitoredItem(MonitoredItem monitoredItem, MonitoredItemNotificationEventArgs e) { if (!(e.NotificationValue is MonitoredItemNotification notification)) { return; } var value = notification.Value; var variable = ArchiveVariables.FirstOrDefault(x => x.Name == monitoredItem.StartNodeId && monitoredItem.DisplayName == $"{x.Name} [{ArchiveInterval.None}]"); if (variable == null) { return; } _unitOfWork.Records.Add(new RecordEntity() { ArchiveTime = value.SourceTimestamp, VariableId = variable.Id, Value = value.Value.ToString() }); }