示例#1
0
        /// <summary>
        /// Получить цвет значения входного канала
        /// </summary>
        public string GetCnlValColor(double val, int stat, InCnlProps cnlProps, CnlStatProps cnlStatProps)
        {
            try
            {
                if (cnlProps == null)
                {
                    return(DefColor);
                }
                else
                {
                    if (cnlProps.ShowNumber ||
                        cnlProps.UnitArr == null || cnlProps.UnitArr.Length != 2 ||
                        stat == BaseValues.CnlStatuses.Undefined ||
                        stat == BaseValues.CnlStatuses.FormulaError ||
                        stat == BaseValues.CnlStatuses.Unreliable)
                    {
                        return(cnlStatProps == null || string.IsNullOrEmpty(cnlStatProps.Color) ?
                               DefColor : cnlStatProps.Color);
                    }
                    else
                    {
                        return(val > 0 ? OnColor : OffColor);
                    }
                }
            }
            catch (Exception ex)
            {
                string cnlNumStr = cnlProps == null?cnlProps.CnlNum.ToString() : "?";

                throw new ScadaException(string.Format(Localization.UseRussian ?
                                                       "Ошибка при получении цвета значения входного канала {0}" :
                                                       "Error getting color of input channel {0}", cnlNumStr), ex);
            }
        }
示例#2
0
        /// <summary>
        /// Get the color of the input channel value
        /// </summary>
        public string GetCnlValColor(double val, int stat, InCnlProps cnlProps, CnlStatProps cnlStatProps)
        {
            try {
                if (cnlProps == null)
                {
                    return(DefColor);
                }

                if (cnlProps.ShowNumber ||
                    cnlProps.UnitArr == null || cnlProps.UnitArr.Length != 2 ||
                    stat == BaseValues.CnlStatuses.Undefined ||
                    stat == BaseValues.CnlStatuses.FormulaError ||
                    stat == BaseValues.CnlStatuses.Unreliable)
                {
                    return(cnlStatProps == null || string.IsNullOrEmpty(cnlStatProps.Color)
                        ? DefColor
                        : cnlStatProps.Color);
                }

                return(val > 0 ? OnColor : OffColor);
            } catch (Exception ex) {
                string cnlNumStr = cnlProps == null?cnlProps.CnlNum.ToString() : "?";

                throw new ScadaException($"Error getting color of input channel {cnlNumStr}", ex);
            }
        }
示例#3
0
        /// <summary>
        /// Получить текст события
        /// </summary>
        public string GetEventText(EventTableLight.Event ev, InCnlProps cnlProps, CnlStatProps cnlStatProps)
        {
            if (string.IsNullOrEmpty(ev.Descr))
            {
                // текст в формате "<статус>: <значение>"
                StringBuilder sbText = cnlStatProps == null ?
                                       new StringBuilder() : new StringBuilder(cnlStatProps.Name);

                if (ev.NewCnlStat > BaseValues.CnlStatuses.Undefined)
                {
                    if (sbText.Length > 0)
                    {
                        sbText.Append(": ");
                    }
                    sbText.Append(FormatCnlVal(ev.NewCnlVal, ev.NewCnlStat, cnlProps, true));
                }

                return(sbText.ToString());
            }
            else
            {
                // только описание события
                return(ev.Descr);
            }
        }
示例#4
0
        /// <summary>
        /// Заполнить свойства статусов входных каналов
        /// </summary>
        protected void FillCnlStatProps()
        {
            try
            {
                log.WriteAction(Localization.UseRussian ?
                                "Заполнение свойств статусов входных каналов" :
                                "Fill input channel statuses properties");

                DataTable tblEvType = BaseTables.EvTypeTable;
                int       statusCnt = tblEvType.Rows.Count;
                SortedList <int, CnlStatProps> newCnlStatProps = new SortedList <int, CnlStatProps>(statusCnt);

                for (int i = 0; i < statusCnt; i++)
                {
                    DataRow      row          = tblEvType.Rows[i];
                    CnlStatProps cnlStatProps = new CnlStatProps((int)row["CnlStatus"])
                    {
                        Color = (string)row["Color"], Name = (string)row["Name"]
                    };
                    newCnlStatProps.Add(cnlStatProps.Status, cnlStatProps);
                }

                CnlStatProps = newCnlStatProps;
            }
            catch (Exception ex)
            {
                log.WriteException(ex, (Localization.UseRussian ?
                                        "Ошибка при заполнении свойств статусов входных каналов: " :
                                        "Error filling input channel statuses properties"));
            }
        }
示例#5
0
        /// <summary>
        /// Создать и заполнить массив расширенных данных входных каналов
        /// </summary>
        private CnlDataExt[] CreateCnlDataExtArr(IList <int> cnlList, SrezTableLight.Srez snapshot,
                                                 bool dataVisible, string emptyVal)
        {
            DataAccess dataAccess = AppData.DataAccess;
            int        cnlCnt     = cnlList == null ? 0 : cnlList.Count;

            CnlDataExt[] cnlDataExtArr = new CnlDataExt[cnlCnt];

            for (int i = 0; i < cnlCnt; i++)
            {
                int        cnlNum     = cnlList[i];
                CnlDataExt cnlDataExt = new CnlDataExt(cnlNum);
                cnlDataExtArr[i] = cnlDataExt;

                if (dataVisible)
                {
                    double val;
                    int    stat;
                    snapshot.GetCnlData(cnlNum, out val, out stat);

                    if (!double.IsNaN(val))
                    {
                        cnlDataExt.Val  = val;
                        cnlDataExt.Stat = stat;
                    }

                    InCnlProps cnlProps = dataAccess.GetCnlProps(cnlNum);
                    string     text;
                    string     textWithUnit;
                    DataFormatter.FormatCnlVal(val, stat, cnlProps, out text, out textWithUnit);

                    cnlDataExt.Text         = text;
                    cnlDataExt.TextWithUnit = textWithUnit;
                    CnlStatProps cnlStatProps = dataAccess.GetCnlStatProps(stat);
                    cnlDataExt.Color = DataFormatter.GetCnlValColor(val, stat, cnlProps, cnlStatProps);
                }
                else
                {
                    cnlDataExt.Text = cnlDataExt.TextWithUnit = emptyVal;
                }
            }

            return(cnlDataExtArr);
        }
示例#6
0
        /// <summary>
        /// Получить свойства статусов входных каналов, ключ - статус
        /// </summary>
        public SortedList <int, CnlStatProps> GetCnlStatProps()
        {
            DataTable tblEvType = baseTables.EvTypeTable;
            int       statusCnt = tblEvType.Rows.Count;
            SortedList <int, CnlStatProps> cnlStatPropsList = new SortedList <int, CnlStatProps>(tblEvType.Rows.Count);

            foreach (DataRow row in tblEvType.Rows)
            {
                CnlStatProps cnlStatProps = new CnlStatProps((int)row["CnlStatus"])
                {
                    Color = (string)row["Color"],
                    Name  = (string)row["Name"]
                };

                cnlStatPropsList.Add(cnlStatProps.Status, cnlStatProps);
            }

            return(cnlStatPropsList);
        }
示例#7
0
        /// <summary>
        /// Получить отображаемое событие на основе данных события.
        /// </summary>
        /// <remarks>Метод всегда возвращает объект, не равный null.</remarks>
        public DispEvent GetDispEvent(EventTableLight.Event ev, DataFormatter dataFormatter)
        {
            DispEvent dispEvent = new DispEvent();

            try
            {
                dispEvent.Num  = ev.Number;
                dispEvent.Time = ev.DateTime.ToLocalizedString();
                dispEvent.Ack  = ev.Checked ? CommonPhrases.EventAck : CommonPhrases.EventNotAck;

                InCnlProps   cnlProps     = GetCnlProps(ev.CnlNum);
                CnlStatProps cnlStatProps = GetCnlStatProps(ev.NewCnlStat);

                if (cnlProps == null)
                {
                    dispEvent.Obj = GetObjName(ev.ObjNum);
                    dispEvent.KP  = GetKPName(ev.KPNum);
                }
                else
                {
                    dispEvent.Obj   = cnlProps.ObjName;
                    dispEvent.KP    = cnlProps.KPName;
                    dispEvent.Cnl   = cnlProps.CnlName;
                    dispEvent.Color = dataFormatter.GetCnlValColor(
                        ev.NewCnlVal, ev.NewCnlStat, cnlProps, cnlStatProps);
                    dispEvent.Sound = cnlProps.EvSound;
                }

                dispEvent.Text = dataFormatter.GetEventText(ev, cnlProps, cnlStatProps);
            }
            catch (Exception ex)
            {
                log.WriteException(ex, Localization.UseRussian ?
                                   "Ошибка при получении отображаемого события на основе данных события" :
                                   "Error getting displayed event based on the event data");
            }

            return(dispEvent);
        }
示例#8
0
        /// <summary>
        /// Get event text
        /// </summary>
        public string GetEventText(EventTableLight.Event ev, InCnlProps cnlProps, CnlStatProps cnlStatProps)
        {
            if (string.IsNullOrEmpty(ev.Descr))
            {
                // text in the format "<status>: <value>"
                var sbText =
                    cnlStatProps == null ? new StringBuilder() : new StringBuilder(cnlStatProps.Name);

                if (ev.NewCnlStat > BaseValues.CnlStatuses.Undefined)
                {
                    if (sbText.Length > 0)
                    {
                        sbText.Append(": ");
                    }
                    sbText.Append(FormatCnlVal(ev.NewCnlVal, ev.NewCnlStat, cnlProps, true));
                }

                return(sbText.ToString());
            }

            // description of the event only
            return(ev.Descr);
        }
示例#9
0
        /// <summary>
        /// Преобразовать точку тренда в запись JavaScript
        /// </summary>
        protected string TrendPointToJs(double val, int stat, InCnlProps cnlProps)
        {
            string text;
            string textWithUnit;

            dataFormatter.FormatCnlVal(val, stat, cnlProps, out text, out textWithUnit);
            CnlStatProps cnlStatProps = dataAccess.GetCnlStatProps(stat);
            string       color        = dataFormatter.GetCnlValColor(val, stat, cnlProps, cnlStatProps);

            // для text и textWithUnit было бы корректно использовать метод HttpUtility.JavaScriptStringEncode(),
            // но он опускается для повышения скорости
            double chartVal = stat > 0 ? val : double.NaN;

            return((new StringBuilder("[")
                    .Append(double.IsNaN(chartVal) ? "NaN" : chartVal.ToString(CultureInfo.InvariantCulture))
                    .Append(", \"")
                    .Append(text)
                    .Append("\", \"")
                    .Append(textWithUnit)
                    .Append("\", \"")
                    .Append(color)
                    .Append("\"]")).ToString());
        }