예제 #1
0
        public override bool Uninitialize()
        {
            if (Activated && server != null)
            {
                try
                {
                    logger.Logged("Info", "Отключаемся от сервера #" + PollerId + "...", "", "");
                    Activated = false;
                    TagListBackup.Clear();
                    server.Disconnect();
                    server = null;
                }
                catch (Exception ex)
                {
                    logger.Logged("Error", "Не удалось корректно отключиться от OPC DA сервера #" + PollerId + ": " + ex.Message, "", "");
                }
            }

            return(true);
        }
예제 #2
0
 /// <summary>
 /// Закрытие соединения с сервером
 /// </summary>
 public override bool Uninitialize()
 {
     if (Activated & session != null)
     {
         try
         {
             logger.Logged("Info", "Отключаемся от сервера #" + PollerId + "...", "OpcUaPoller", "Uninitialize");
             Activated = false;
             TagListBackup.Clear();
             session.CloseSession(null, true);
             session = null;
         }
         catch (Exception ex)
         {
             logger.Logged("Error",
                           "Не удалось корректно отключиться от OPC UA сервера #" + PollerId + ": " + ex.Message,
                           "OpcUaPoller", "Uninitialize");
         }
     }
     return(true);
 }
예제 #3
0
        /// <summary>
        /// Обработчик обновления тегов по подписке
        /// </summary>
        private void OnNotification(object group, object hReq, Opc.Da.ItemValueResult[] items)
        {
            LastPoll = DateTime.Now;
            for (int i = 0; i < items.GetLength(0); i++)
            {
                var tag = new TagId();
                //Найдем тег с списке
                tag = TagListBackup.FirstOrDefault(x => x.TagName == items[i].ItemName) ??
                      new TagId {
                    TagName = items[i].ItemName, PollerId = PollerId
                };

                if (items[i].Quality.GetCode() >= 192)
                {
                    string value = items[i].Value.ToString();

                    OnUpdate(tag, value, items[i].Timestamp, items[i].Quality.GetCode());
                }
                // проверка на то, что качество у нас Good или его производные
                //    if (items[i].Quality.GetCode() >= 192)
                //    {
                //      if (items[i].Value.IsDiscreteType())
                //      {
                //          bool value = items[i].Value.ToString() == "True";
                //          OnUpdateDiscrete(tag, value, items[i].Timestamp, items[i].Quality.GetCode());
                //      }
                //      else
                //          if (items[i].Value.IsAnalogType())
                //          {
                //              // я дичайше извиняюсь за этот и вышестоящий костыли, но более приличного способа кастануть ЭТО я не нашел
                //              float value = float.Parse(items[i].Value.ToString());
                //              OnUpdateAnalog(tag, value, items[i].Timestamp, items[i].Quality.GetCode());
                //          }
                //    }
                else
                {
                    OnUpdate(tag, null, items[i].Timestamp, items[i].Quality.GetCode());
                }
            }
        }