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