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); }
/// <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); }
/// <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()); } } }