private static async void OnNotification(MonitoredItem item, MonitoredItemNotificationEventArgs e) { try { foreach (var value in item.DequeueValues()) { _logger.Info("{0}: {1}, {2}, {3}, {4}", item.DisplayName, item.ResolvedNodeId, value.Value, value.SourceTimestamp, value.StatusCode); Console.WriteLine("{0}: {1}, {2}, {3}, {4}", item.DisplayName, item.ResolvedNodeId, value.Value, value.SourceTimestamp, value.StatusCode); if (value.WrappedValue.TypeInfo.BuiltInType == BuiltInType.Boolean) { if ((bool)value.Value == true) { var _currentoperationData = _operationTriggers.FirstOrDefault(x => x.Value.nodeId == item.ResolvedNodeId); if (_currentoperationData.Key is null) { break; } var _id = _session.ReadValue(_currentoperationData.Value.nodeIdNumSet); var _operation = _currentoperationData.Key; var _operationId = Int32.Parse(_id.ToString()); if (_operationId < 1) { _logger.Info("Operation: {0}; Id: {1}", _operation, _id); _logger.Info("Id was less than 1"); return; } var _operationService = new OperationService(_connectionString); var _schema = new InformationSchemaDA(_connectionString); var _fields = await _schema.GetAllFieldFromTableAsync(_operation, new CancellationToken(), false); var _result = await _operationService.GetDataByOpertaionTableNameAndId(_operation, _operationId, _fields.ToList(), _databaseName); if (_result == null) { return; } _logger.Info("======================================//--//======================================"); Console.WriteLine("{0}: {1}, {2}, {3}, {4}", item.DisplayName, item.ResolvedNodeId, value.Value, value.SourceTimestamp, value.StatusCode); _logger.Info("Operation: {0}; Id: {1}", _operation, _id); _logger.Info("{0}: {1}, {2}, {3}, {4}", item.DisplayName, item.ResolvedNodeId, value.Value, value.SourceTimestamp, value.StatusCode); var _selectedOperation = _operationTriggers.FirstOrDefault(x => 0 == string.Compare(x.Key, _operation, true)); foreach (var s in _selectedOperation.Value.items) { if (s.nodeId == null || s.nodeId == 0) { continue; } var _node = _result.FirstOrDefault(x => 0 == string.Compare("recipe_" + _operation + "_" + x.Key, s.item, true)); if (_node.Key != null) { var _value = OpcConverter.Convert(s.typeInfo.ToString(), _node.Value); Console.WriteLine("{0}: was updated, value:{1}", _node.Key, _value); OpcWriter.SetExpectedType(_session, s.nodeId); OpcWriter.WriteValue(_session, s.nodeId, TypeConverter.Convert(s.typeInfo.ToString(), _node.Value), TypeConverter.Convert(s.typeInfo.ToString())); _logger.Info("{0}: was updated, value:{1}", _node.Key, _value); } } OpcWriter.SetExpectedType(_session, (_currentoperationData.Value.nodeIdNumGet)); OpcWriter.WriteValue(_session, _currentoperationData.Value.nodeIdNumGet, OpcConverter.Convert("long", _id.ToString()), OpcConverter.Convert("long")); Console.WriteLine("Id InumGet: was updated on {0}.", _id); _logger.Info("Id InumGet: was updated on {0}.", _id); } } } } catch (Exception ex) { _logger.Error(ex, "Error OnNotification method: {0}", ex.Message); } }