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