コード例 #1
0
        public string SendCommand(int ctrlCnlNum, double cmdVal, int viewID, int componentID)
        {
            try
            {
                AppData.UserMonitor.CheckLoggedOn(out UserShot userShot);

                if (!(userShot.WebSettings.CmdEnabled && userShot.UserRights.GetUiObjRights(viewID).ControlRight))
                {
                    throw new ScadaException(CommonPhrases.NoRights);
                }

                CtrlCnlProps ctrlCnlProps = AppData.DataAccess.GetCtrlCnlProps(ctrlCnlNum);
                SchemeView   schemeView   = AppData.ViewCache.GetView <SchemeView>(viewID, true);
                bool         sendOK       = false;
                bool         result       = false;

                if (ctrlCnlProps != null &&
                    schemeView.Components.TryGetValue(componentID, out BaseComponent component) &&
                    component is IDynamicComponent dynamicComponent &&
                    dynamicComponent.Action == Actions.SendCommandNow &&
                    dynamicComponent.CtrlCnlNum == ctrlCnlNum)
                {
                    int userID = userShot.UserProps.UserID;
                    switch (ctrlCnlProps.CmdTypeID)
                    {
                    case BaseValues.CmdTypes.Standard:
                        sendOK = AppData.ServerComm.SendStandardCommand(
                            userID, ctrlCnlNum, cmdVal, out result);
                        break;

                    case BaseValues.CmdTypes.Binary:
                        sendOK = AppData.ServerComm.SendBinaryCommand(
                            userID, ctrlCnlNum, BitConverter.GetBytes(cmdVal), out result);
                        break;

                    case BaseValues.CmdTypes.Request:
                        sendOK = AppData.ServerComm.SendRequestCommand(
                            userID, ctrlCnlNum, ctrlCnlProps.KPNum, out result);
                        break;
                    }
                }

                return(JsSerializer.Serialize(new DataTransferObject(sendOK && result)));
            }
            catch (Exception ex)
            {
                AppData.Log.WriteException(ex, Localization.UseRussian ?
                                           "Ошибка при отправке команды ТУ со схемы с ид.={0}" :
                                           "Error sending telecommand from the scheme with ID={0}", viewID);
                return(GetErrorDtoJs(ex));
            }
        }
コード例 #2
0
ファイル: ConfDAO.cs プロジェクト: firebitsbr/scada-36
        /// <summary>
        /// Получить свойства каналов управления, упорядоченные по возрастанию номеров каналов
        /// </summary>
        public List <CtrlCnlProps> GetCtrlCnlProps()
        {
            DataTable tblCtrlCnl = baseTables.CtrlCnlTable;
            DataView  viewObj    = baseTables.ObjTable.DefaultView;
            DataView  viewKP     = baseTables.KPTable.DefaultView;
            DataView  viewCmdVal = baseTables.CmdValTable.DefaultView;

            // установка сортировки для последующего поиска строк
            viewObj.Sort    = "ObjNum";
            viewKP.Sort     = "KPNum";
            viewCmdVal.Sort = "CmdValID";

            // создание и заполнение списка
            List <CtrlCnlProps> ctrlCnlPropsList = new List <CtrlCnlProps>(tblCtrlCnl.Rows.Count);

            foreach (DataRow ctrlCnlRow in tblCtrlCnl.Rows)
            {
                CtrlCnlProps ctrlCnlProps = new CtrlCnlProps();

                // определение свойств, не использующих внешних ключей
                ctrlCnlProps.CtrlCnlNum  = (int)ctrlCnlRow["CtrlCnlNum"];
                ctrlCnlProps.CtrlCnlName = (string)ctrlCnlRow["Name"];
                ctrlCnlProps.CmdTypeID   = (int)ctrlCnlRow["CmdTypeID"];
                ctrlCnlProps.ObjNum      = (int)ctrlCnlRow["ObjNum"];
                ctrlCnlProps.KPNum       = (int)ctrlCnlRow["KPNum"];
                ctrlCnlProps.CmdNum      = (int)ctrlCnlRow["CmdNum"];
                ctrlCnlProps.CmdValID    = (int)ctrlCnlRow["CmdValID"];
                ctrlCnlProps.FormulaUsed = (bool)ctrlCnlRow["FormulaUsed"];
                ctrlCnlProps.Formula     = (string)ctrlCnlRow["Formula"];
                ctrlCnlProps.EvEnabled   = (bool)ctrlCnlRow["EvEnabled"];

                // определение наименования объекта
                int objRowInd = viewObj.Find(ctrlCnlProps.ObjNum);
                if (objRowInd >= 0)
                {
                    ctrlCnlProps.ObjName = (string)viewObj[objRowInd]["Name"];
                }

                // определение наименования КП
                int kpRowInd = viewKP.Find(ctrlCnlProps.KPNum);
                if (kpRowInd >= 0)
                {
                    ctrlCnlProps.KPName = (string)viewKP[kpRowInd]["Name"];
                }

                // определение значений команды
                int cmdValInd = viewCmdVal.Find(ctrlCnlProps.CmdValID);
                if (cmdValInd >= 0)
                {
                    DataRowView cmdValRowView = viewCmdVal[cmdValInd];
                    ctrlCnlProps.CmdValName = (string)cmdValRowView["Name"];
                    ctrlCnlProps.CmdVal     = (string)cmdValRowView["Val"];
                    string[] cmdValArr = ctrlCnlProps.CmdValArr =
                        ctrlCnlProps.CmdVal.Split(FieldSeparator, StringSplitOptions.None);
                    for (int j = 0; j < cmdValArr.Length; j++)
                    {
                        cmdValArr[j] = cmdValArr[j].Trim();
                    }
                    if (cmdValArr.Length == 1 && cmdValArr[0] == "")
                    {
                        ctrlCnlProps.CmdValArr = null;
                    }
                }

                ctrlCnlPropsList.Add(ctrlCnlProps);
            }

            return(ctrlCnlPropsList);
        }
コード例 #3
0
ファイル: Command.aspx.cs プロジェクト: kompanavt/scada
        protected void Page_Load(object sender, EventArgs e)
        {
            appData  = AppData.GetAppData();
            userData = UserData.GetUserData();

            // проверка входа в систему
            if (!userData.LoggedOn)
            {
                throw new ScadaException(WebPhrases.NotLoggedOn);
            }

            // скрытие сообщения об ошибке
            pnlErrMsg.HideAlert();

            if (IsPostBack)
            {
                cmdEnabled = (bool)ViewState["CmdEnabled"];
                ctrlCnlNum = (int)ViewState["CtrlCnlNum"];
                cmdTypeID  = (int)ViewState["CmdTypeID"];
            }
            else
            {
                // получение параметров запроса и сохранение во ViewState
                ctrlCnlNum = Request.QueryString.GetParamAsInt("ctrlCnlNum");
                ViewState["CtrlCnlNum"] = ctrlCnlNum;

                int viewID = Request.QueryString.GetParamAsInt("viewID");

                // проверка прав
                if (!userData.UserRights.GetUiObjRights(viewID).ControlRight ||
                    !userData.WebSettings.CmdEnabled)
                {
                    throw new ScadaException(CommonPhrases.NoRights);
                }

                BaseView view = userData.UserViews.GetView(viewID, true);
                if (!view.ContainsCtrlCnl(ctrlCnlNum))
                {
                    throw new ScadaException(CommonPhrases.NoRights);
                }

                // перевод веб-страницы
                Translator.TranslatePage(Page, "Scada.Web.Plugins.Table.WFrmCommand");

                // получение канала управления
                CtrlCnlProps ctrlCnlProps = appData.DataAccess.GetCtrlCnlProps(ctrlCnlNum);
                ViewState["CmdEnabled"] = ctrlCnlProps != null;

                cmdTypeID = ctrlCnlProps == null ? BaseValues.CmdTypes.Standard : ctrlCnlProps.CmdTypeID;
                ViewState["CmdTypeID"] = cmdTypeID;

                if (ctrlCnlProps == null)
                {
                    // вывести сообщение, что канал управления не найден
                    lblCtrlCnlNotFound.Text = string.Format(lblCtrlCnlNotFound.Text, ctrlCnlNum);
                    pnlErrMsg.ShowAlert(lblCtrlCnlNotFound);
                    btnSubmit.Enabled = false;
                }
                else
                {
                    // вывод информации по каналу управления
                    pnlInfo.Visible = true;
                    lblCtrlCnl.Text = HttpUtility.HtmlEncode(
                        string.Format("[{0}] {1}", ctrlCnlProps.CtrlCnlNum, ctrlCnlProps.CtrlCnlName));
                    lblObj.Text = HttpUtility.HtmlEncode(ctrlCnlProps.ObjNum > 0 ?
                                                         string.Format("[{0}] {1}", ctrlCnlProps.ObjNum, ctrlCnlProps.ObjName) : "");
                    lblDev.Text = HttpUtility.HtmlEncode(ctrlCnlProps.KPNum > 0 ?
                                                         string.Format("[{0}] {1}", ctrlCnlProps.KPNum, ctrlCnlProps.KPName) : "");

                    // установка видимости поля для ввода пароля
                    pnlPassword.Visible = userData.WebSettings.CmdPassword;

                    // настройка элементов управления в зависимости от типа команды
                    if (cmdTypeID == BaseValues.CmdTypes.Standard || cmdTypeID == BaseValues.CmdTypes.Binary)
                    {
                        if (ctrlCnlProps.CmdValArr == null)
                        {
                            if (cmdTypeID == BaseValues.CmdTypes.Standard)
                            {
                                pnlRealValue.Visible = true;
                            }
                            else
                            {
                                pnlData.Visible = true;
                            }
                        }
                        else
                        {
                            repCommands.DataSource = GetDiscreteCmds(ctrlCnlProps.CmdValArr);
                            repCommands.DataBind();
                            pnlDiscreteValue.Visible = true;
                            btnSubmit.Enabled        = false;           // disable postback on Enter
                            btnSubmit.CssClass       = "hide-exec-btn"; // hide Execute button
                        }
                    }
                    else // BaseValues.CmdTypes.Request
                    {
                        ViewState["KPNum"] = ctrlCnlProps.KPNum;
                    }
                }
            }
        }
コード例 #4
0
ファイル: CmdSend.aspx.cs プロジェクト: lzbgt/scada-1
        protected void Page_Load(object sender, EventArgs e)
        {
            // получение данных пользователя
            UserData userData = UserData.GetUserData();

            // проверка входа в систему
            if (!userData.LoggedOn)
            {
                throw new Exception(WebPhrases.NotLoggedOn);
            }

            // определение индексов выбранного представления
            int viewSetIndex, viewIndex;

            if (!int.TryParse(Request["viewSet"], out viewSetIndex))
            {
                viewSetIndex = -1;
            }
            if (!int.TryParse(Request["view"], out viewIndex))
            {
                viewIndex = -1;
            }

            // определение номера канала управления
            int ctrlCnlNum;

            int.TryParse(Request["ctrlCnlNum"], out ctrlCnlNum);

            // получение представления и прав пользователя на него
            BaseView view;

            MainData.Right right;
            userData.GetView(null, viewSetIndex, viewIndex, out view, out right);

            // проверка загрузки представления и прав на отправку команды
            if (view == null)
            {
                throw new Exception(WebPhrases.UnableLoadView);
            }
            else if (!right.CtrlRight || !AppData.WebSettings.CmdEnabled || !view.ContainsCtrlCnl(ctrlCnlNum))
            {
                throw new Exception(CommonPhrases.NoRights);
            }

            // очистка сообщения об ошибке
            lblMessage.Text    = "";
            lblMessage.Visible = false;

            // установка кнопки по умолчанию
            Form.DefaultButton = btnExecute.UniqueID;

            if (IsPostBack)
            {
                // восстановление заголовка страницы
                Title = (string)ViewState["Title"];

                // установка активного элемента формы по умолчанию
                if (pnlPassword.Visible)
                {
                    Form.DefaultFocus = txtPassword.ClientID;
                }
                else
                {
                    View activeView = mvCommand.Visible ? mvCommand.GetActiveView() : null;
                    if (activeView == viewStandCmd2)
                    {
                        Form.DefaultFocus = txtCmdVal.ClientID;
                    }
                    else if (activeView == viewBinCmd)
                    {
                        Form.DefaultFocus = txtCmdData.ClientID;
                    }
                }
            }
            else
            {
                // перевод веб-страницы
                Translator.TranslatePage(this, "Scada.Web.WFrmCmdSend");
                ViewState["Title"] = Title;

                // вывод свойств канала управления
                CtrlCnlProps ctrlCnlProps = AppData.MainData.GetCtrlCnlProps(ctrlCnlNum);

                if (ctrlCnlProps == null)
                {
                    throw new Exception(string.Format(WebPhrases.OutCnlNotFound, ctrlCnlNum));
                }
                else
                {
                    lblCtrlCnl.Text = ctrlCnlProps.CtrlCnlName;
                    lblObj.Text     = ctrlCnlProps.ObjName;
                    lblKP.Text      = ctrlCnlProps.KPName;

                    ViewState.Add("CtrlCnlNum", ctrlCnlProps.CtrlCnlNum);
                    ViewState.Add("KPNum", ctrlCnlProps.KPNum);

                    // установка видимости поля для ввода пароля
                    pnlPassword.Visible = !AppData.WebSettings.SimpleCmd;

                    // установка типа команды и определение фокуса по умолчанию
                    string defaultFocus = "";
                    if (ctrlCnlProps.CmdTypeID == 0 /*стандартная команда*/)
                    {
                        if (ctrlCnlProps.CmdValArr == null)
                        {
                            // установка представления для ввода значения команды вручную
                            mvCommand.SetActiveView(viewStandCmd2);
                            defaultFocus = txtCmdVal.ClientID;
                        }
                        else if (AppData.WebSettings.SimpleCmd)
                        {
                            // настройка элементов для выполнения команды по нажатию кнопки со значением
                            List <CmdValInfo> cmdValInfoList = new List <CmdValInfo>();
                            for (int i = 0; i < ctrlCnlProps.CmdValArr.Length; i++)
                            {
                                string cmdText = ctrlCnlProps.CmdValArr[i];
                                if (cmdText != "")
                                {
                                    cmdValInfoList.Add(new CmdValInfo()
                                    {
                                        CndInd = cmdValInfoList.Count, CmdVal = i, CmdText = cmdText
                                    });
                                }
                            }

                            mvCommand.SetActiveView(viewStandCmd1Simple);
                            repCmdVal.DataSource = cmdValInfoList;
                            repCmdVal.DataBind();
                            btnExecute.Visible = false;
                        }
                        else
                        {
                            // настройка элементов для выбора значения команды с помощью радиокнопок
                            mvCommand.SetActiveView(viewStandCmd1);

                            for (int i = 0; i < ctrlCnlProps.CmdValArr.Length; i++)
                            {
                                string cmdVal = ctrlCnlProps.CmdValArr[i];
                                if (cmdVal != "")
                                {
                                    rblCmdVal.Items.Add(new ListItem(cmdVal, i.ToString()));
                                }
                            }
                        }
                    }
                    else if (ctrlCnlProps.CmdTypeID == 1 /*бинарная команда*/)
                    {
                        mvCommand.SetActiveView(viewBinCmd);
                        defaultFocus = txtCmdData.ClientID;
                    }
                    else // команда опроса КП
                    {
                        mvCommand.Visible = false;
                    }

                    // установка активного элемента формы по умолчанию
                    if (pnlPassword.Visible)
                    {
                        Form.DefaultFocus = txtPassword.ClientID;
                    }
                    else if (defaultFocus != "")
                    {
                        Form.DefaultFocus = defaultFocus;
                    }
                }
            }
        }
コード例 #5
0
        /// <summary>
        /// Get control channel properties sorted in ascending channel numbers
        /// </summary>
        public List <CtrlCnlProps> GetCtrlCnlProps()
        {
            var tblCtrlCnl = baseTables.CtrlCnlTable;
            var viewObj    = baseTables.ObjTable.DefaultView;
            var viewKP     = baseTables.KPTable.DefaultView;
            var viewCmdVal = baseTables.CmdValTable.DefaultView;

            // set sorting for later string retrieval
            viewObj.Sort    = "ObjNum";
            viewKP.Sort     = "KPNum";
            viewCmdVal.Sort = "CmdValID";

            // create and fill list
            var ctrlCnlPropsList = new List <CtrlCnlProps>(tblCtrlCnl.Rows.Count);

            foreach (DataRow ctrlCnlRow in tblCtrlCnl.Rows)
            {
                var ctrlCnlProps = new CtrlCnlProps {
                    // defining properties that do not use foreign keys
                    CtrlCnlNum  = (int)ctrlCnlRow["CtrlCnlNum"],
                    CtrlCnlName = (string)ctrlCnlRow["Name"],
                    CmdTypeID   = (int)ctrlCnlRow["CmdTypeID"],
                    ObjNum      = (int)ctrlCnlRow["ObjNum"],
                    KPNum       = (int)ctrlCnlRow["KPNum"],
                    CmdNum      = (int)ctrlCnlRow["CmdNum"],
                    CmdValID    = (int)ctrlCnlRow["CmdValID"],
                    FormulaUsed = (bool)ctrlCnlRow["FormulaUsed"],
                    Formula     = (string)ctrlCnlRow["Formula"],
                    EvEnabled   = (bool)ctrlCnlRow["EvEnabled"]
                };


                // object name definition
                int objRowInd = viewObj.Find(ctrlCnlProps.ObjNum);
                if (objRowInd >= 0)
                {
                    ctrlCnlProps.ObjName = (string)viewObj[objRowInd]["Name"];
                }

                // name definition
                int kpRowInd = viewKP.Find(ctrlCnlProps.KPNum);
                if (kpRowInd >= 0)
                {
                    ctrlCnlProps.KPName = (string)viewKP[kpRowInd]["Name"];
                }

                // defining team values
                int cmdValInd = viewCmdVal.Find(ctrlCnlProps.CmdValID);
                if (cmdValInd >= 0)
                {
                    var cmdValRowView = viewCmdVal[cmdValInd];
                    ctrlCnlProps.CmdValName = (string)cmdValRowView["Name"];
                    ctrlCnlProps.CmdVal     = (string)cmdValRowView["Val"];
                    string[] cmdValArr = ctrlCnlProps.CmdValArr =
                        ctrlCnlProps.CmdVal.Split(FieldSeparator, StringSplitOptions.None);
                    for (var j = 0; j < cmdValArr.Length; j++)
                    {
                        cmdValArr[j] = cmdValArr[j].Trim();
                    }
                    if (cmdValArr.Length == 1 && cmdValArr[0] == "")
                    {
                        ctrlCnlProps.CmdValArr = null;
                    }
                }

                ctrlCnlPropsList.Add(ctrlCnlProps);
            }

            return(ctrlCnlPropsList);
        }