Пример #1
0
        public static void GetConfigFromDb()
        {
            //logger.Info(" =================================================================== ");
            logger.Logged("Info", "Запуск ", "PollerWatchdog", "GetConfigFromDb");
            //dbSaver = new DbSaver();
            bool result = false;

            while (result == false // && must_break == false
                   )
            {
                try
                {
                    var opcs = (from ti in context.Objects
                                join to in context.Properties on ti.Id equals to.ObjectId
                                where ti.Type == 1 && to.PropId == 0
                                select new { Id = ti.Id, Name = ti.Name, Props = to.Value }).ToList();
                    //  var z1 = opcs.Where(x => x.Props.Contains(Environment.MachineName)).FirstOrDefault();
                    //   if (z1==null )
                    //      opcs.Add(new { Id = 0, Name = Environment.MachineName, Props = "{\"Id\":0,\"Name\":\"COPCUA\",\"Type\":\"UA\",\"Connection\":\"opc.tcp:\\\\\\\\"+ Environment.MachineName + ":51212\",\"Connect\":true}" });
                    // opclist.Add("{\"Id\":\"1\",\"Type\":\"UA\",\"Connection\":\"opc.tcp://Q3DM6:51212/\"}");


                    foreach (var opc in opcs)
                    {
                        dynamic    dict      = json.DeserializeObj(opc.Props);
                        DataPoller opcPoller = null;
                        string     z         = "";
                        try { z = dict.Type; }
                        catch (Exception) { }  // if (json.IsPropertyExist(dict, "Name"))
                        //string z = Convert.ToString(dict.Type);
                        switch (z)
                        {
                        case "DA":
                            logger.Logged("Info",
                                          "Создаем поллер для DA сервера:  " + Convert.ToString(dict.Connection),
                                          "PollerWatchdog", "GetConfigFromDb");
                            opcPoller = new OpcDaPoller();
                            break;

                        case "UA":
                            logger.Logged("Info",
                                          "Создаем поллер для UA сервера:   " + Convert.ToString(dict.Connection),
                                          "PollerWatchdog", "GetConfigFromDb");
                            opcPoller = new UaPoller();
                            break;

                        default:
                            logger.Logged("Info", "Неподдерживаемый тип OPC: " + opc.Id + ",  " + opc.Name,
                                          "PollerWatchdog", "GetConfigFromDb");
                            break;
                        }

                        if (opcPoller != null)
                        {
                            if (Convert.ToBoolean(dict.Connect))
                            {
                                opcPoller.Connect = true;
                                logger.Logged("Info", "Инициализируем #" + Convert.ToString(dict.Id) + "...", "PollerWatchdog", "GetConfigFromDb");
                                opcPoller.Initialize(dict.Connection.ToString(), Convert.ToInt32(dict.Id));
                            }
                            opcPoller.SubAll            = Convert.ToBoolean(dict.SubAll);
                            opcPoller.LastPoll          = DateTime.Now;
                            opcPoller.OnUpdateAnalog   += OnUpdateAnalog;
                            opcPoller.OnUpdateDiscrete += OnUpdateDiscrete;
                            opcPoller.OnUpdateEmpty    += OnUpdateEmpty;
                            opcPoller.OnUpdate         += OnUpdate;
                            opcPoller.AddTags(readTags(Convert.ToInt32(dict.Id)));
                            _pollers.Add(opcPoller);
                        }
                    }

                    result = true;
                }
                catch
                (Exception ex)
                {
                    logger.Logged("Error", "Не удалось считать список OPC-серверов из БД: " + ex.Message,
                                  "PollerWatchdog", "GetConfigFromDb");
                    return;
                }
            }
        }
Пример #2
0
        public static void GetConfigFromDb()
        {
            //logger.Info(" =================================================================== ");
            logger.Logged("Info", "Запуск ", "PollerWatchdog", "GetConfigFromDb");
            //dbSaver = new DbSaver();
            bool result = false;

            while (result == false // && must_break == false
                   )
            {
                try
                {
                    var opcs = (from ti in context.Objects
                                join to in context.Properties on ti.Id equals to.ObjectId
                                where ti.Type == 1 && to.PropId == 0
                                select to.Value);
                    var opclist = opcs.ToList();
                    //opclist.Add("{\"Id\":\"1\",\"Type\":\"UA\",\"Connection\":\"opc.tcp://Q3DM6:51212/\"}");


                    foreach (var opc in opclist)
                    {
                        dynamic    dict      = JsonConvert.DeserializeObject(opc);
                        DataPoller opcPoller = null;
                        string     z         = Convert.ToString(dict.Type);
                        switch (z)
                        {
                        case "DA":
                            logger.Logged("Info",
                                          "Создаем поллер для DA сервера:  " + Convert.ToString(dict.Connection),
                                          "PollerWatchdog", "GetConfigFromDb");
                            opcPoller = new OpcDaPoller();
                            break;

                        case "UA":
                            logger.Logged("Info",
                                          "Создаем поллер для UA сервера:   " + Convert.ToString(dict.Connection),
                                          "PollerWatchdog", "GetConfigFromDb");
                            opcPoller = new UaPoller();
                            break;

                        default:
                            //logger.Error("Неподдерживаемый тип OPC: {0}, строка подключения '{1}'", opc.type_id, opc.connect);
                            break;
                        }

                        if (opcPoller != null && Convert.ToBoolean(dict.Connect))
                        {
                            logger.Logged("Info", "Инициализируем #" + Convert.ToString(dict.Id) + "...",
                                          "PollerWatchdog", "GetConfigFromDb");
                            opcPoller.Initialize(dict.Connection.ToString(), Convert.ToInt32(dict.Id));
                            opcPoller.LastPoll          = DateTime.Now;
                            opcPoller.OnUpdateAnalog   += OnUpdateAnalog;
                            opcPoller.OnUpdateDiscrete += OnUpdateDiscrete;
                            opcPoller.OnUpdateEmpty    += OnUpdateEmpty;
                            opcPoller.OnUpdate         += OnUpdate;
                            opcPoller.AddTags(readTags(Convert.ToInt32(dict.Id)));
                            _pollers.Add(opcPoller);
                        }
                    }

                    result = true;
                }
                catch
                (Exception ex)
                {
                    logger.Logged("Error", "Не удалось считать список OPC-серверов из БД: " + ex.Message,
                                  "PollerWatchdog", "GetConfigFromDb");
                    //logger.Warn("Повтрим попытку через 5 секунд...");
                    Thread.Sleep(5000);
                }
            }
        }