/// <summary> /// Загрузить данные входных каналов, которые используются в схеме /// </summary> public bool LoadCnlData(string clientID, List <int> cnlList, out List <SchemeView.CnlData> cnlDataList) { // проверка режима работы приложения SchemeApp schemeApp = SchemeApp.GetSchemeApp(); if (schemeApp.WorkMode != SchemeApp.WorkModes.Monitor) { cnlDataList = null; return(false); } // получение списка входных каналов, если он неопределён HttpContext context = HttpContext.Current; if (cnlList == null && context != null) { HttpSessionState session = context.Session; Dictionary <string, object> schemeClients = session == null ? null : session["ScadaSchemeClients"] as Dictionary <string, object>; if (schemeClients != null && clientID != null) { cnlList = schemeClients[clientID] as List <int>; } } if (cnlList == null) { HttpRequest request = context == null ? null : context.Request; string host = request == null ? "" : (Localization.UseRussian ? ". Хост: " : ". Host: ") + request.UserHostAddress; schemeApp.Log.WriteAction((Localization.UseRussian ? "Не удалось получить список входных каналов" : "Unable to get input channels list") + host, Log.ActTypes.Error); cnlDataList = null; return(false); } else { // получение данных входных каналов MainData mainData = schemeApp.MainData; mainData.RefreshData(); cnlDataList = new List <SchemeView.CnlData>(); foreach (int cnlNum in cnlList) { double val; int stat; string color; SchemeView.CnlData cnlData = new SchemeView.CnlData(); mainData.GetCurData(cnlNum, out val, out stat); cnlData.Val = val; cnlData.ValStr = mainData.GetCnlVal(cnlNum, false, out color); cnlData.ValStrWithUnit = mainData.GetCnlVal(cnlNum, true, out color); cnlData.Stat = stat; cnlData.Color = color; cnlDataList.Add(cnlData); } return(true); } }
/// <summary> /// Очистить информацию об изменении схемы после её обработки /// </summary> public void ClearChange(string clientID) { SchemeApp schemeApp = SchemeApp.GetSchemeApp(); if (schemeApp.WorkMode == SchemeApp.WorkModes.Edit && schemeApp.EditorData.ClientID == clientID) { schemeApp.EditorData.SchemeChange = null; } }
/// <summary> /// Попытаться установить изменение схемы, выдав сообщение в случае ошибки /// </summary> public void TrySetSchemeChange(SchemeView.SchemeChange change) { try { SchemeChange = change; } catch (Exception ex) { SchemeApp.GetSchemeApp().Log.WriteAction(ex.Message, Log.ActTypes.Exception); ScadaUiUtils.ShowError(ex.Message); } }
/// <summary> /// Выбрать элемент схемы /// </summary> public void SelectElement(string clientID, int elementID, int clickX, int clickY) { SchemeApp schemeApp = SchemeApp.GetSchemeApp(); EditorData editorData = schemeApp.EditorData; if (schemeApp.WorkMode == SchemeApp.WorkModes.Edit && editorData.ClientID == clientID) { // выбор элемента или схемы в режиме редактирования SchemeView schemeView = editorData.SchemeView; SchemeView.Element addedElement = editorData.AddedElement; if (addedElement == null) { SchemeView.Element elem; if (elementID <= 0) { editorData.SelectElement(schemeView.SchemeParams); } else if (schemeView.ElementDict.TryGetValue(elementID, out elem)) { editorData.SelectElement(elem); } } else { // добавление элемента в заданную позицию в режиме редактирования addedElement.Location = new SchemeView.Point(clickX, clickY); schemeView.ElementList.Add(addedElement); schemeView.ElementDict[addedElement.ID] = addedElement; // создание объекта для передачи изменений SchemeView.SchemeChange change = new SchemeView.SchemeChange(SchemeView.ChangeType.ElementAdded); change.ElementData = new SchemeView.ElementData(addedElement); try { // установка изменения, которая может вызвать исключение editorData.SchemeChange = change; // выбор добавленного элемента editorData.SelectElement(addedElement); editorData.AddedElement = null; } catch (Exception ex) { WriteException(ex.Message); } } } }
private void FrmImageDialog_Load(object sender, EventArgs e) { // перевод формы Localization.TranslateForm(this, "Scada.Scheme.FrmImageDialog"); // установка видимости кнопок выбора изображения if (!CanSelectImage) { btnClear.Visible = false; btnSelect.Visible = false; } // вывод словаря изображений схемы SchemeApp schemeApp = SchemeApp.GetSchemeApp(); editorData = schemeApp.EditorData; if (editorData != null && editorData.SchemeView != null) { imageDict = schemeApp.EditorData.SchemeView.ImageDict; } if (imageDict != null) { lbImages.BeginUpdate(); string selName = SelectedImage == null ? "" : SelectedImage.Name; SchemeView.Image selImage = null; foreach (SchemeView.Image image in imageDict.Values) { if (image.Name == selName) { selImage = image; } else { lbImages.Items.Add(new ImageInfo(image, ImageNameIsUnique)); } } if (selImage != null) { lbImages.SelectedIndex = lbImages.Items.Add(new ImageInfo(selImage, ImageNameIsUnique)); } lbImages.EndUpdate(); btnOpen.Enabled = true; } }
/// <summary> /// Получить изменение схемы, которое необходимо отобразить, передав позицию указателя мыши /// </summary> public bool GetChange(string clientID, Point cursorPosition, out SchemeView.SchemeChange schemeChange) { SchemeApp schemeApp = SchemeApp.GetSchemeApp(); if (schemeApp.WorkMode == SchemeApp.WorkModes.Edit && schemeApp.EditorData.ClientID == clientID) { schemeApp.EditorData.CursorPosition = cursorPosition; schemeChange = schemeApp.EditorData.SchemeChange; return(schemeChange != null && schemeChange.ChangeType != SchemeView.ChangeType.Unchanged); } else { schemeChange = null; return(false); } }
private void FrmCnlsFilterDialog_Load(object sender, EventArgs e) { // перевод формы Translator.TranslateForm(this, "Scada.Scheme.FrmCnlsFilterDialog"); // вывод фильтра по входным каналам SchemeApp schemeApp = SchemeApp.GetSchemeApp(); editorData = schemeApp.EditorData; if (editorData != null && editorData.SchemeView != null) { cnlsFilter = schemeApp.EditorData.SchemeView.CnlsFilter; } if (cnlsFilter != null) { txtCnlNums.Text = string.Join <int>(" ", cnlsFilter); } }
private static SchemeApp schemeAppObj; // объект для хранения данных уровня приложения /// <summary> /// Статический конструктор /// </summary> static SchemeApp() { schemeAppObj = null; }
/// <summary> /// Инициализировать данные уровня приложения /// </summary> public static SchemeApp InitSchemeApp(WorkModes workMode) { SchemeApp schemeApp; if (schemeAppObj == null) { schemeApp = new SchemeApp(); schemeAppObj = schemeApp; schemeApp.WorkMode = workMode; if (workMode == WorkModes.Monitor) { // инициализация общих данных приложения SCADA-Web AppData.InitAppData(); schemeApp.MainData = AppData.MainData; // настройка журнала приложения schemeApp.Log.FileName = AppData.LogDir + "ScadaScheme.log"; schemeApp.Log.Encoding = Encoding.UTF8; schemeApp.Log.WriteBreak(); schemeApp.Log.WriteAction(Localization.UseRussian ? "Запуск SCADA-Схемы" : "Start SCADA-Scheme", Log.ActTypes.Action); } else // WorkModes.Edit { // инициализация данных редактора схем schemeApp.EditorData = new EditorData(); // настройка журнала приложения schemeApp.Log.FileName = ScadaUtils.NormalDir(Path.GetDirectoryName(Application.ExecutablePath)) + "log\\ScadaSchemeEditor.log"; schemeApp.Log.Encoding = Encoding.UTF8; schemeApp.Log.WriteBreak(); schemeApp.Log.WriteAction(Localization.UseRussian ? "Запуск SCADA-Редактора схем" : "Start SCADA-Scheme Editor", Log.ActTypes.Action); } } else if (schemeAppObj.WorkMode != workMode) { throw new ArgumentException(Localization.UseRussian ? "Ошибка при инициализации данных приложения SCADA-Схема: некорректный режим работы." : "Error initializing SCADA-Scheme application data: incorrect work mode.", "workMode"); } else { schemeApp = schemeAppObj; } if (workMode == WorkModes.Monitor) { // получение настроек Silverlight-приложения из настроек SCADA-Web schemeApp.SchemeSettings.RefrFreq = AppData.WebSettings.SrezRefrFreq; schemeApp.SchemeSettings.CmdEnabled = AppData.WebSettings.CmdEnabled; } // инициализировать используемые фразы schemeApp.SchemeSettings.SchemePhrases.Init(); SchemePhrases.InitStatic(); return(schemeApp); }
/// <summary> /// Инициализировать данные уровня приложения /// </summary> public static SchemeApp InitSchemeApp(WorkModes workMode) { SchemeApp schemeApp; if (schemeAppObj == null) { schemeApp = new SchemeApp(); schemeAppObj = schemeApp; schemeApp.WorkMode = workMode; if (workMode == WorkModes.Monitor) { // инициализация общих данных приложения SCADA-Web AppData.InitAppData(); schemeApp.MainData = AppData.MainData; // настройка журнала приложения schemeApp.Log.FileName = AppData.LogDir + "ScadaScheme.log"; schemeApp.Log.Encoding = Encoding.UTF8; schemeApp.Log.WriteBreak(); schemeApp.Log.WriteAction(Localization.UseRussian ? "Запуск SCADA-Схемы" : "Start SCADA-Scheme", Log.ActTypes.Action); } else // WorkModes.Edit { // инициализация данных редактора схем schemeApp.EditorData = new EditorData(); // настройка журнала приложения schemeApp.Log.FileName = ScadaUtils.NormalDir(Path.GetDirectoryName(Application.ExecutablePath)) + "log\\ScadaSchemeEditor.log"; schemeApp.Log.Encoding = Encoding.UTF8; schemeApp.Log.WriteBreak(); schemeApp.Log.WriteAction(Localization.UseRussian ? "Запуск SCADA-Редактора схем" : "Start SCADA-Scheme Editor", Log.ActTypes.Action); } } else if (schemeAppObj.WorkMode != workMode) { throw new ArgumentException(Localization.UseRussian ? "Ошибка при инициализации данных приложения SCADA-Схема: некорректный режим работы." : "Error initializing SCADA-Scheme application data: incorrect work mode.", "workMode"); } else { schemeApp = schemeAppObj; } if (workMode == WorkModes.Monitor) { // получение настроек Silverlight-приложения из настроек SCADA-Web schemeApp.SchemeSettings.RefrFreq = AppData.WebSettings.SrezRefrFreq; schemeApp.SchemeSettings.CmdEnabled = AppData.WebSettings.CmdEnabled; } // инициализировать используемые фразы schemeApp.SchemeSettings.SchemePhrases.Init(); SchemePhrases.InitStatic(); return schemeApp; }
/// <summary> /// Загрузить схему /// </summary> public bool LoadScheme(string clientID, int viewSetIndex, int viewIndex, out SchemeView.SchemeData schemeData) { bool result = false; schemeData = null; SchemeApp schemeApp = SchemeApp.GetSchemeApp(); if (schemeApp.WorkMode == SchemeApp.WorkModes.Edit) { // загрузка схемы для SCADA-Редактора схем EditorData editorData = schemeApp.EditorData; SchemeView schemeView = null; if (editorData.ClientID == clientID) { schemeView = editorData.SchemeView; } else { editorData.ClientID = clientID; } if (schemeView == null) { string errMsg; if (editorData.LoadSchemeFromFile(out errMsg)) { schemeView = editorData.SchemeView; } else { schemeApp.Log.WriteAction(errMsg, Log.ActTypes.Exception); } } if (schemeView != null) { schemeData = new SchemeView.SchemeData(schemeView); schemeData.CnlList = null; result = true; } } else { // загрузка схемы для SCADA-Web UserData userData = UserData.GetUserData(); HttpContext context = HttpContext.Current; if (userData.LoggedOn) { BaseView baseView; MainData.Right right; bool ok = userData.GetView(typeof(SchemeView), viewSetIndex, viewIndex, out baseView, out right); SchemeView schemeView = baseView as SchemeView; if (ok && schemeView != null && right.ViewRight) { schemeApp.Log.WriteAction(string.Format(Localization.UseRussian ? "Загружена схема {0} пользователем {1}" : "Scheme {0} has been loaded by user {1}", schemeView.Path, userData.UserLogin), Log.ActTypes.Action); // сохранение списка входных каналов схемы в сессии HttpSessionState session = context == null ? null : context.Session; if (session != null && clientID != null) { Dictionary <string, object> schemeClients = session["ScadaSchemeClients"] as Dictionary <string, object>; if (schemeClients == null) { schemeClients = new Dictionary <string, object>(); session.Add("ScadaSchemeClients", schemeClients); } schemeClients[clientID] = schemeView.CnlList; } // получение данных схемы schemeData = new SchemeView.SchemeData(schemeView); schemeData.CtrlRight = right.CtrlRight; result = true; } else { string itfObjName = schemeView == null || string.IsNullOrEmpty(schemeView.Path) ? "" : " " + schemeView.Path; schemeApp.Log.WriteAction(string.Format(Localization.UseRussian ? "Не удалось загрузить схему{0} пользователем {1}" : "Unable to load scheme{0} by user {1}", itfObjName, userData.UserLogin), Log.ActTypes.Error); } } else { HttpRequest request = context == null ? null : context.Request; string host = request == null ? "" : (Localization.UseRussian ? ". Хост: " : ". Host: ") + request.UserHostAddress; schemeApp.Log.WriteAction((Localization.UseRussian ? "Невозможно загрузить схему, т.к. пользователь не вошёл в систему" : "Unable to load scheme because user is not logged on") + host, Log.ActTypes.Error); } } return(result); }
/// <summary> /// Получить настройки приложения /// </summary> public SchemeSettings GetSettings() { return(SchemeApp.GetSchemeApp().SchemeSettings); }
/// <summary> /// Записать исключение в журнал приложения /// </summary> public void WriteException(string message) { SchemeApp.GetSchemeApp().Log.WriteAction(message, Log.ActTypes.Exception); }