コード例 #1
0
        /// <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);
            }
        }
コード例 #2
0
        /// <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;
            }
        }
コード例 #3
0
ファイル: EditorData.cs プロジェクト: lzbgt/scada-1
 /// <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);
     }
 }
コード例 #4
0
        /// <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);
                    }
                }
            }
        }
コード例 #5
0
ファイル: FrmImageDialog.cs プロジェクト: iyus/scada
        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;
            }
        }
コード例 #6
0
        /// <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);
            }
        }
コード例 #7
0
ファイル: FrmCnlsFilterDialog.cs プロジェクト: lzbgt/scada-1
        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);
            }
        }
コード例 #8
0
ファイル: SchemeApp.cs プロジェクト: lzbgt/scada-1
        private static SchemeApp schemeAppObj; // объект для хранения данных уровня приложения


        /// <summary>
        /// Статический конструктор
        /// </summary>
        static SchemeApp()
        {
            schemeAppObj = null;
        }
コード例 #9
0
ファイル: SchemeApp.cs プロジェクト: lzbgt/scada-1
        /// <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);
        }
コード例 #10
0
ファイル: SchemeApp.cs プロジェクト: raydtang/scada
        private static SchemeApp schemeAppObj; // объект для хранения данных уровня приложения


        /// <summary>
        /// Статический конструктор
        /// </summary>
        static SchemeApp()
        {
            schemeAppObj = null;
        }
コード例 #11
0
ファイル: SchemeApp.cs プロジェクト: raydtang/scada
        /// <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;
        }
コード例 #12
0
        /// <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);
        }
コード例 #13
0
 /// <summary>
 /// Получить настройки приложения
 /// </summary>
 public SchemeSettings GetSettings()
 {
     return(SchemeApp.GetSchemeApp().SchemeSettings);
 }
コード例 #14
0
 /// <summary>
 /// Записать исключение в журнал приложения
 /// </summary>
 public void WriteException(string message)
 {
     SchemeApp.GetSchemeApp().Log.WriteAction(message, Log.ActTypes.Exception);
 }