Exemple #1
0
        /// <summary>
        /// Formats the channel value, which is a date and time.
        /// </summary>
        protected string FormatDate(double cnlVal, int dataTypeID, string format)
        {
            string DateToString(DateTime dt)
            {
                return(TimeZoneInfo.ConvertTimeFromUtc(dt, timeZone).ToString(format, culture));
            }

            switch (dataTypeID)
            {
            case DataTypeID.Double:
                return(DateToString(DateTime.FromOADate(cnlVal)));

            case DataTypeID.Int64:
                return(DateToString(ScadaUtils.TicksToTime(CnlDataConverter.DoubleToInt64(cnlVal))));

            default:
                return(FormatError);
            }
        }
Exemple #2
0
        /// <summary>
        /// Initializes the directories based on the executable file directory and common application data directory.
        /// </summary>
        /// <remarks>Common application data directory should be writable.</remarks>
        public virtual void Init(string exeDir, string commonDataDir)
        {
            if (string.IsNullOrEmpty(exeDir))
            {
                throw new ArgumentException("Executable directory must not be empty.", nameof(exeDir));
            }

            string dataDir = string.IsNullOrEmpty(commonDataDir)
                ? exeDir
                : Path.Combine(commonDataDir, new DirectoryInfo(exeDir).Name);

            ExeDir      = ScadaUtils.NormalDir(exeDir);
            InstanceDir = ScadaUtils.NormalDir(Path.GetFullPath(Path.Combine(exeDir, "..")));
            CmdDir      = AppendDir(dataDir, "Cmd");
            ConfigDir   = AppendDir(dataDir, "Config");
            LangDir     = AppendDir(exeDir, "Lang");
            LogDir      = AppendDir(dataDir, "Log");
            StorageDir  = AppendDir(dataDir, "Storage");
            TempDir     = AppendDir(dataDir, "Temp");
        }
Exemple #3
0
        /// <summary>
        /// Обновить словарь, если он изменился
        /// </summary>
        public static bool RefreshDictionary(string directory, string fileNamePrefix, ref DateTime fileAge,
                                             out bool updated, out string errMsg)
        {
            string   fileName   = Localization.GetDictionaryFileName(directory, fileNamePrefix);
            DateTime newFileAge = ScadaUtils.GetLastWriteTime(fileName);

            if (fileAge == newFileAge)
            {
                updated = false;
                errMsg  = "";
                return(true);
            }
            else if (Localization.LoadDictionaries(fileName, out errMsg))
            {
                fileAge = newFileAge;
                updated = true;
                return(true);
            }
            else
            {
                updated = false;
                return(false);
            }
        }
Exemple #4
0
 /// <summary>
 /// Получить имя файла словаря для заданной культуры
 /// </summary>
 public static string GetFileName(string directory, string fileNamePrefix, string cultureName)
 {
     return(ScadaUtils.NormalDir(directory) +
            fileNamePrefix + (string.IsNullOrEmpty(cultureName) ? "" : "." + cultureName) + ".xml");
 }
Exemple #5
0
        /// <summary>
        /// Formats the event according to the channel properties.
        /// </summary>
        public EventFormatted FormatEvent(Event ev)
        {
            if (ev == null)
            {
                throw new ArgumentNullException(nameof(ev));
            }

            EventFormatted eventFormatted = new EventFormatted
            {
                Time = TimeZoneInfo.ConvertTimeFromUtc(ev.Timestamp, timeZone).ToLocalizedString()
            };

            // object
            if (ev.ObjNum > 0)
            {
                eventFormatted.Obj = configDataset.ObjTable.GetItem(ev.ObjNum)?.Name ?? "";
            }

            // device
            if (ev.DeviceNum > 0)
            {
                eventFormatted.Dev = configDataset.DeviceTable.GetItem(ev.DeviceNum)?.Name ?? "";
            }

            // channel
            Cnl cnl = null;

            if (ev.CnlNum > 0)
            {
                cnl = configDataset.CnlTable.GetItem(ev.CnlNum);
                eventFormatted.Cnl = cnl?.Name ?? "";
            }

            // description
            StringBuilder    sbDescr = new StringBuilder();
            CnlDataFormatted dataFormatted;

            if (ev.TextFormat == EventTextFormat.Command)
            {
                // Command Value, Data. Custom text
                sbDescr.Append(CommonPhrases.CommandDescrPrefix);
                dataFormatted = FormatCnlData(new CnlData(ev.CnlVal, CnlStatusID.Defined),
                                              DataTypeID.Double, cnl?.FormatID ?? 0, cnl?.UnitID ?? 0);

                if (ev.CnlStat > 0)
                {
                    sbDescr.Append(dataFormatted.DispVal);
                }

                if (ev.Data != null && ev.Data.Length > 0)
                {
                    sbDescr
                    .Append(ev.CnlStat > 0 ? ", " : "")
                    .Append("0x")
                    .Append(ScadaUtils.BytesToHex(ev.Data, 0, Math.Min(DataDisplayLength, ev.Data.Length)))
                    .Append(DataDisplayLength < ev.Data.Length ? "..." : "");
                }
            }
            else
            {
                // Status, Value. Custom text
                dataFormatted = FormatCnlData(new CnlData(ev.CnlVal, ev.CnlStat), cnl, true);

                if (ev.TextFormat == EventTextFormat.Full || ev.TextFormat == EventTextFormat.AutoText)
                {
                    string statusName = configDataset.CnlStatusTable.GetItem(ev.CnlStat)?.Name ??
                                        string.Format(CommonPhrases.StatusFormat, ev.CnlStat);
                    sbDescr.Append(statusName).Append(", ").Append(dataFormatted.DispVal);
                }
            }

            if (!string.IsNullOrEmpty(ev.Text) && ev.TextFormat != EventTextFormat.AutoText)
            {
                if (sbDescr.Length > 0)
                {
                    sbDescr.Append(". ");
                }

                sbDescr.Append(ev.Text);
            }

            eventFormatted.Descr = sbDescr.ToString();

            // severity
            int knownSeverity = Severity.Closest(ev.Severity);

            if (knownSeverity != Severity.Undefined)
            {
                switch (knownSeverity)
                {
                case Severity.Critical:
                    eventFormatted.Sev = CommonPhrases.CriticalSeverity;
                    break;

                case Severity.Major:
                    eventFormatted.Sev = CommonPhrases.MajorSeverity;
                    break;

                case Severity.Minor:
                    eventFormatted.Sev = CommonPhrases.MinorSeverity;
                    break;

                case Severity.Info:
                    eventFormatted.Sev = CommonPhrases.InfoSeverity;
                    break;
                }

                eventFormatted.Sev += ", " + ev.Severity;
            }

            // acknowledgement
            if (ev.Ack)
            {
                eventFormatted.Ack = string.Join(", ",
                                                 configDataset.UserTable.GetItem(ev.AckUserID)?.Name,
                                                 TimeZoneInfo.ConvertTimeFromUtc(ev.AckTimestamp, timeZone).ToLocalizedString());
            }

            // color
            if (dataFormatted.Colors.Length > 0)
            {
                eventFormatted.Color = dataFormatted.Colors[0];
            }

            // beep
            if (cnl != null && new EventMask(cnl.EventMask).Beep)
            {
                eventFormatted.Beep = true;
            }

            return(eventFormatted);
        }
 /// <summary>
 /// Gets date and time from the buffer.
 /// </summary>
 public static DateTime GetTime(byte[] buffer, int index)
 {
     return(ScadaUtils.TicksToTime(BitConverter.ToInt64(buffer, index)));
 }
Exemple #7
0
 /// <summary>
 /// Appends the child directory to the parent directory.
 /// </summary>
 protected virtual string AppendDir(string parentDir, string childDir)
 {
     return(ScadaUtils.NormalDir(Path.Combine(parentDir, Lowercase ? childDir.ToLowerInvariant() : childDir)));
 }