Beispiel #1
0
        /// <summary>
        /// Конструктор для настройки конкретного КП
        /// </summary>
        public KpModbusView(int number)
            : base(number)
        {
            CanShowProps = number == 0;

            // определение параметров опроса КП по умолчанию
            KPLogic.ReqParams reqParams = new KPLogic.ReqParams(false);
            reqParams.Timeout = 1000;
            reqParams.Delay   = 200;
            DefaultReqParams  = reqParams;
        }
Beispiel #2
0
        /// <summary>
        /// Конструктор для настройки конкретного КП
        /// </summary>
        /// <param name="number">Номер настраемого КП</param>
        public KPView(int number)
        {
            defaultCtrlCnlCount = -1;

            Number           = number;
            ConfigDir        = "";
            LangDir          = "";
            CmdDir           = "";
            CanShowProps     = false;
            DefaultCnls      = null;
            DefaultReqParams = new KPLogic.ReqParams(true);
        }
Beispiel #3
0
        /// <summary>
        /// Конструктор для настройки конкретного КП
        /// </summary>
        public KpSmsView(int number)
            : base(number)
        {
            // определение каналов КП по умолчанию
            DefaultCnls = new List <InCnlProps>();
            InCnlProps inCnlProps = new InCnlProps(Localization.UseRussian ? "Связь" : "Connection", CnlType.TS);

            inCnlProps.Signal     = 1;
            inCnlProps.ParamName  = Localization.UseRussian ? "Связь" : "Connection";
            inCnlProps.ShowNumber = false;
            inCnlProps.UnitName   = Localization.UseRussian ? "Нет - Есть" : "No - Yes";
            inCnlProps.EvEnabled  = true;
            inCnlProps.EvOnChange = true;
            DefaultCnls.Add(inCnlProps);

            inCnlProps           = new InCnlProps(Localization.UseRussian ? "Кол-во событий" : "Event count", CnlType.TI);
            inCnlProps.Signal    = 2;
            inCnlProps.ParamName = Localization.UseRussian ? "Событие" : "Event";
            inCnlProps.DecDigits = 0;
            inCnlProps.UnitName  = Localization.UseRussian ? "Шт." : "Count";
            DefaultCnls.Add(inCnlProps);

            string cnlName = Localization.UseRussian ? "Отправка SMS" : "Send SMS message";

            inCnlProps = new InCnlProps(cnlName, CnlType.TS);
            inCnlProps.CtrlCnlProps        = new CtrlCnlProps(cnlName, KPLogic.CmdType.Binary);
            inCnlProps.CtrlCnlProps.CmdNum = 1;
            DefaultCnls.Add(inCnlProps);

            cnlName    = Localization.UseRussian ? "AT-команда" : "AT command";
            inCnlProps = new InCnlProps(cnlName, CnlType.TS);
            inCnlProps.CtrlCnlProps        = new CtrlCnlProps(cnlName, KPLogic.CmdType.Binary);
            inCnlProps.CtrlCnlProps.CmdNum = 2;
            DefaultCnls.Add(inCnlProps);

            // определение параметров опроса КП по умолчанию
            KPLogic.ReqParams reqParams = new KPLogic.ReqParams(false);
            reqParams.Timeout = 5000;
            reqParams.Delay   = 500;
            DefaultReqParams  = reqParams;
        }
Beispiel #4
0
        /// <summary>
        /// Распознать настройку линии связи и создать соответствующую линию связи
        /// </summary>
        private CommLine ParseCommLine(int lineNum, XmlElement commLineElem, out bool lineActive)
        {
            try
            {
                lineActive = bool.Parse(commLineElem.GetAttribute("active"));
                if (!lineActive)
                    return null;

                string lineName = commLineElem.GetAttribute("name");
                bool lineBind = bool.Parse(commLineElem.GetAttribute("bind"));
                CommLine commLine = new CommLine(lineNum, lineName, lineBind);
                commLine.PassCmd = PassCmd;

                // получение настроек соединения линии связи
                XmlElement connElem = commLineElem.SelectSingleNode("Connection") as XmlElement;
                if (connElem != null)
                {
                    XmlElement connTypeElem = connElem.SelectSingleNode("ConnType") as XmlElement;
                    XmlElement commSettElem = connElem.SelectSingleNode("ComPortSettings") as XmlElement;
                    if (connTypeElem != null && connTypeElem.GetAttribute("value").ToLower() == "comport" &&
                        commSettElem != null)
                    {
                        try
                        {
                            string portName = commSettElem.GetAttribute("portName");
                            string baudRate = commSettElem.GetAttribute("baudRate");
                            string dataBits = commSettElem.GetAttribute("dataBits");
                            string parity = commSettElem.GetAttribute("parity");
                            string stopBits = commSettElem.GetAttribute("stopBits");
                            bool dtrEnable = commSettElem.GetAttribute("dtrEnable").ToLower() == "true";
                            bool rtsEnable = commSettElem.GetAttribute("rtsEnable").ToLower() == "true";

                            commLine.SerialPort = new SerialPort(portName, int.Parse(baudRate),
                                (Parity)Enum.Parse(typeof(Parity), parity, true), int.Parse(dataBits),
                                (StopBits)Enum.Parse(typeof(StopBits), stopBits, true));
                            commLine.SerialPort.DtrEnable = dtrEnable;
                            commLine.SerialPort.RtsEnable = rtsEnable;
                        }
                        catch (Exception ex)
                        {
                            commLine.ConfigError = true;
                            Log.WriteAction(string.Format(Localization.UseRussian ?
                                "Ошибка при распознавании параметров COM-порта линии связи {0}: {1}" :
                                "Error parsing serial port parameters of communication line {0}: {1}",
                                lineNum, ex.Message), Log.ActTypes.Exception);
                        }
                    }
                }

                // получение параметров линии связи
                XmlElement lineParamsElem = commLineElem.SelectSingleNode("LineParams") as XmlElement;
                if (lineParamsElem != null)
                {
                    XmlNodeList paramNodes = lineParamsElem.SelectNodes("Param");
                    foreach (XmlElement paramElem in paramNodes)
                    {
                        try
                        {
                            string name = paramElem.GetAttribute("name");
                            string val = paramElem.GetAttribute("value");

                            if (name == "ReqTriesCnt")
                                commLine.ReqTriesCnt = int.Parse(val);
                            else if (name == "CycleDelay")
                                commLine.CicleDelay = int.Parse(val);
                            else if (name == "MaxCommErrCnt")
                                commLine.MaxCommErrCnt = int.Parse(val);
                            else if (name == "CmdEnabled")
                                commLine.CmdEnabled = bool.Parse(val.ToLower());
                        }
                        catch (Exception ex)
                        {
                            commLine.ConfigError = true;
                            Log.WriteAction(string.Format(Localization.UseRussian ?
                                "Ошибка при распознавании параметров линии связи {0}: {1}" :
                                "Error parsing communication line {0} parameters: {1}",
                                lineNum, ex.Message), Log.ActTypes.Exception);
                        }
                    }
                    commLine.RefrParams = commonParams.RefrParams;
                }

                // получение пользовательских параметров линии связи
                XmlElement userParamsElem = commLineElem.SelectSingleNode("UserParams") as XmlElement;
                if (userParamsElem != null)
                {
                    XmlNodeList paramNodes = userParamsElem.SelectNodes("Param");
                    foreach (XmlElement paramElem in paramNodes)
                    {
                        string name = paramElem.GetAttribute("name");
                        string val = paramElem.GetAttribute("value");
                        if (name != "" && !commLine.UserParams.ContainsKey(name))
                            commLine.UserParams.Add(name, val);
                    }
                }

                // получение последовательности опроса линии связи
                XmlElement reqSeqElem = commLineElem.SelectSingleNode("ReqSequence") as XmlElement;
                if (reqSeqElem != null)
                {
                    XmlNodeList kpNodes = reqSeqElem.SelectNodes("KP");
                    foreach (XmlElement kpElem in kpNodes)
                    {
                        string kpActive = kpElem.GetAttribute("active").ToLower();
                        if (kpActive == "true")
                        {
                            string kpNumber = kpElem.GetAttribute("number");
                            try
                            {
                                // получение типа КП
                                string dllName = kpElem.GetAttribute("dll");
                                string typeFullName = "Scada.Comm.KP." + dllName + "Logic";
                                Type kpType;
                                if (kpTypes.ContainsKey(dllName))
                                    kpType = kpTypes[dllName];
                                else
                                {
                                    // загрузка типа из библиотеки
                                    string path = KpDir + dllName + ".dll";
                                    Log.WriteAction((Localization.UseRussian ? "Загрузка библиотеки КП: " :
                                        "Load device library: ") + path, Log.ActTypes.Action);

                                    Assembly asm = Assembly.LoadFile(path);
                                    kpType = asm.GetType(typeFullName);
                                    kpTypes.Add(dllName, kpType);
                                }

                                // получение параметров КП
                                bool kpBind = bool.Parse(kpElem.GetAttribute("bind"));

                                KPLogic.ReqParams reqParams = new KPLogic.ReqParams();
                                reqParams.Timeout = int.Parse(kpElem.GetAttribute("timeout"));
                                reqParams.Delay = int.Parse(kpElem.GetAttribute("delay"));
                                string time = kpElem.GetAttribute("time");
                                reqParams.Time = time == "" ? DateTime.MinValue :
                                    DateTime.Parse(time, CultureInfo.CurrentCulture);
                                string period = kpElem.GetAttribute("period");
                                reqParams.Period = period == "" ? new TimeSpan(0) : TimeSpan.Parse(period);
                                string group = kpElem.GetAttribute("group");
                                reqParams.CmdLine = kpElem.GetAttribute("cmdLine");

                                // создание экземпляра класса КП
                                KPLogic kpLogic = Activator.CreateInstance(kpType, int.Parse(kpNumber)) as KPLogic;
                                kpLogic.Bind = kpBind;
                                kpLogic.Name = kpElem.GetAttribute("name");
                                string address = kpElem.GetAttribute("address");
                                kpLogic.Address = address == "" ? 0 : int.Parse(address);
                                kpLogic.CallNum = kpElem.GetAttribute("callNum");
                                kpLogic.KPReqParams = reqParams;
                                commLine.AddKP(kpLogic);
                            }
                            catch (Exception ex)
                            {
                                Log.WriteAction(string.Format(Localization.UseRussian ?
                                    "Ошибка при распознавании конфигурации КП {0}: {1}" :
                                    "Error parsing device {0} configuration: {1}",
                                    kpNumber, ex.Message), Log.ActTypes.Exception);
                            }
                        }
                    }
                }

                return commLine;
            }
            catch (Exception ex)
            {
                Log.WriteAction(string.Format(Localization.UseRussian ?
                    "Ошибка при распознавании конфигурации линии связи {0}: {1}" :
                    "Error parsing communication line {0} configuration: {1}",
                    lineNum, ex.Message), Log.ActTypes.Exception);
                lineActive = false;
                return null;
            }
        }