Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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++;
        }
Beispiel #3
0
        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
                });
            }
        }
Beispiel #4
0
        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);
            }
        }
Beispiel #5
0
        /// <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()
            });
        }