Beispiel #1
0
        /// <summary>
        /// 加载XML 文档并 注册串口
        /// </summary>
        /// <param name="filePath"></param>
        public int GetControlsByLoadXML(string filePath, ref string exMessage)
        {
            if (haveLoadXml)
            {
                return(ERR_HaveLoadedXML);
            }

            int resultFlag = 0;

            //if(File.Ex

            if (System.IO.File.Exists(filePath))
            {
                //读取XML 文件并解析
                List <LightControl> listLC = new List <LightControl>();


                try
                {
                    XDocument doc = XDocument.Load(filePath);

                    instance.dicLightControl =
                        (
                            from LC in doc.Descendants("LightControl")
                            select new LightControl
                    {
                        //控制器编号
                        ControlNo = LC.Element("ControlNo").Value.Trim(),
                        IsEnabled = LC.Element("IsEnabled").Value == "0" ? false : true,
                        //窗口参数
                        SerialPortPara = new SerialPortPara
                        {
                            PortName = LC.Element("SerialPortPara").Element("PortName").Value.Trim(),

                            BaudRate = Convert.ToInt32(LC.Element("SerialPortPara").Element("BaudRate").Value),

                            DataBits = Convert.ToInt32(LC.Element("SerialPortPara").Element("DataBits").Value),

                            StopBits = (StopBits)Enum.Parse(typeof(StopBits), LC.Element("SerialPortPara").Element("StopBits").Value, true),

                            Parity = (Parity)Enum.Parse(typeof(StopBits), LC.Element("SerialPortPara").Element("Parity").Value, true),
                        },
                        //通道列表
                        DicChannel = (
                            from channel in LC.Element("Channels").Descendants("Channel")
                            select new Channel
                        {
                            ChannelNo = channel.Element("ChannelNo").Value,
                            Name = channel.Element("Name").Value,
                            DefaultValue = Convert.ToInt32(channel.Element("DefaultValue").Value),
                            NewDefaultValue = Convert.ToInt32(channel.Element("NewDefaultValue").Value),
                            Des = channel.Element("Des").Value
                        }
                            ).ToDictionary(v => v.ChannelNo)
                    }
                        ).ToDictionary(v => v.ControlNo);
                }
                catch (Exception ex)
                {
                    SoftwareInfo.getInstance().WriteLog("GetControlsByLoadXML:\n" + ex.ToString());
                    resultFlag = ERR_ReadXML;

                    exMessage = "光源配置文件错误:" + ex.Message;
                }


                if (resultFlag == 0 && instance.dicLightControl.Count > 0)
                {
                    foreach (var lc in instance.dicLightControl.Values)
                    {
                        //打开串口
                        if (0 != lc.OpenSerialPort())
                        {
                            resultFlag = ERR_OpenSerialPort;
                            exMessage  = "打开串口异常:" + lc.SerialPortPara.PortName;
                            break;
                        }

                        foreach (var ch in lc.DicChannel.Values)
                        {
                            ChannelBrightness controlChannelNo = new ChannelBrightness {
                                ControlNo = lc.ControlNo, ChannelNo = ch.ChannelNo, Brightness = -1
                            };

                            if (!instance.dicChannelBrightness.ContainsKey(controlChannelNo))
                            {
                                instance.dicChannelBrightness.Add(controlChannelNo, ch);
                            }
                            else
                            {
                                resultFlag = ERR_EXT_ChannelNo;
                                exMessage  = "光源通道已存在" + controlChannelNo.ControlNo + "->" + controlChannelNo.ChannelNo;
                                break;
                            }
                        }

                        //if (System.IO.File.Exists(brightPath))
                        //{

                        //    ReadAndSetLightParas(brightPath);

                        //}


                        if (resultFlag != 0)
                        {
                            break;
                        }
                    }
                }
            }
            else
            {
                exMessage = "无XML文件:" + filePath;
                //无XML 文件
                resultFlag = ERR_NoXML;
            }

            return(resultFlag);
        }