/// <summary>
        /// 加载XML文档
        /// </summary>
        /// <param name="p_str_ProtocolName">协议名称</param>
        private void LoadXmlData(string p_str_ProtocolName)
        {
            if (p_str_ProtocolName == "")
            {
                return;
            }
            CLDC_DataCore.DataBase.clsXmlControl xmlNode = new CLDC_DataCore.DataBase.clsXmlControl(System.Windows.Forms.Application.StartupPath + CLDC_DataCore.Const.Variable.CONST_CARRIER);

            if (xmlNode.Count() == 0)
            {
                return;
            }

            System.Xml.XmlNode xnd_FindXmlNode = null;

            if (p_str_ProtocolName != "")
            {
                xnd_FindXmlNode = CLDC_DataCore.DataBase.clsXmlControl.FindSencetion(xmlNode.toXmlNode(),
                                                                                     CLDC_DataCore.DataBase.clsXmlControl.XPath(string.Format("R,CarrierName,{0}", p_str_ProtocolName)));
            }
            if (xnd_FindXmlNode == null)
            {
                return;
            }

            #region ----------------------------加载协议文件信息----------------------------------------------------------------------

            this.m_str_ProtocolName = xnd_FindXmlNode.Attributes["CarrierName"].Value;                                                           //协议名称

            this.m_str_CarrierType = CLDC_DataCore.DataBase.clsXmlControl.getNodeAttributeValue(xnd_FindXmlNode, "CarrierType");                 //协议类型

            this.m_str_ReadType = CLDC_DataCore.DataBase.clsXmlControl.getNodeAttributeValue(xnd_FindXmlNode, "RdType");                         //抄表器类型

            this.m_str_CommuType = CLDC_DataCore.DataBase.clsXmlControl.getNodeAttributeValue(xnd_FindXmlNode, "CommuType");                     //通讯方式

            this.m_str_BaudRate = CLDC_DataCore.DataBase.clsXmlControl.getNodeAttributeValue(xnd_FindXmlNode, "BaudRate");                       //波特率

            this.m_str_ComPort = CLDC_DataCore.DataBase.clsXmlControl.getNodeAttributeValue(xnd_FindXmlNode, "Comm");                            //端口号

            this.m_int_CmdTime = int.Parse(CLDC_DataCore.DataBase.clsXmlControl.getNodeAttributeValue(xnd_FindXmlNode, "CmdTime"));              //命令延时(ms)

            this.m_int_ByteTime = int.Parse(CLDC_DataCore.DataBase.clsXmlControl.getNodeAttributeValue(xnd_FindXmlNode, "ByteTime"));            //字节延时(ms)

            if (xnd_FindXmlNode.Attributes.Count > 8)
            {
                this.RouterID = byte.Parse(CLDC_DataCore.DataBase.clsXmlControl.getNodeAttributeValue(xnd_FindXmlNode, "RouterID"));
            }

            xnd_FindXmlNode = CLDC_DataCore.DataBase.clsXmlControl.FindSencetion(xnd_FindXmlNode, CLDC_DataCore.DataBase.clsXmlControl.XPath("Prjs")); //转到项目数据节点

            this.m_bln_Loading = true;                                                                                                                 //改写加载标志,表示加载协议成功

            #endregion ----------------------------------------------------------------------------------------------------------------
        }
        /// <summary>
        /// 获取协议唯一标志组合名称列表
        /// </summary>
        /// <returns></returns>
        public static Dictionary <string, string> GetProtocolDictionary()
        {
            CLDC_DataCore.DataBase.clsXmlControl _XmlNode = new CLDC_DataCore.DataBase.clsXmlControl(System.Windows.Forms.Application.StartupPath + CLDC_DataCore.Const.Variable.CONST_CARRIER);

            if (_XmlNode.Count() == 0)
            {
                return(new Dictionary <string, string>());
            }

            Dictionary <string, string> _ReturnNames = new Dictionary <string, string>();

            return(_ReturnNames);
        }
        /// <summary>
        /// 移除一个谐波方案
        /// </summary>
        /// <param name="FaName">方案名称</param>
        public void Remove(string FaName)
        {
            if (!IsFaName(FaName))
            {
                return;
            }
            CLDC_DataCore.DataBase.clsXmlControl _Xml = new CLDC_DataCore.DataBase.clsXmlControl(System.Windows.Forms.Application.StartupPath + CLDC_DataCore.Const.Variable.CONST_XIEBO);

            _Xml.RemoveChild(CLDC_DataCore.DataBase.clsXmlControl.XPath(string.Format("{0},{1},{2}", "R", "Name", FaName)));

            _Xml.SaveXml();

            _FaName.Remove(FaName);

            XieBoCol.Remove(FaName);

            return;
        }
        /// <summary>
        /// 移除一个协议节点
        /// </summary>
        /// <param name="p_str_ProtocolName">协议名称</param>
        /// <returns></returns>
        private static bool Remove(string p_str_ProtocolName)
        {
            if (p_str_ProtocolName == "")
            {
                return(false);
            }
            CLDC_DataCore.DataBase.clsXmlControl xmlNode = new CLDC_DataCore.DataBase.clsXmlControl(System.Windows.Forms.Application.StartupPath + CLDC_DataCore.Const.Variable.CONST_CARRIER);

            if (xmlNode.Count() == 0)
            {
                return(false);
            }

            if (p_str_ProtocolName != "")
            {
                xmlNode.RemoveChild(CLDC_DataCore.DataBase.clsXmlControl.XPath(string.Format("R,CarrierName,{0}", p_str_ProtocolName)));
            }

            xmlNode.SaveXml();
            return(true);
        }
        /// <summary>
        /// 方案存储
        /// </summary>
        /// <param name="FaName">方案名称</param>
        /// <param name="Items">项目列表</param>
        public void Save(string FaName, List <CLDC_DataCore.Struct.StXieBo> Items)
        {
            this.Remove(FaName);

            CLDC_DataCore.DataBase.clsXmlControl _XmlNode = new CLDC_DataCore.DataBase.clsXmlControl();

            _XmlNode.appendchild("", "R", "Name", FaName);

            for (int i = 0; i < Items.Count; i++)
            {
                if (CLDC_DataCore.DataBase.clsXmlControl.FindSencetion(_XmlNode.toXmlNode(),
                                                                       CLDC_DataCore.DataBase.clsXmlControl.XPath(string.Format("{0},{1},{2}", "C", "Name", (int)Items[i].YuanJian))) == null) //如果元件节点不存在,则追加一个
                {
                    _XmlNode.appendchild("", "C", "Name", ((int)Items[i].YuanJian).ToString());
                }
                if (CLDC_DataCore.DataBase.clsXmlControl.FindSencetion(_XmlNode.toXmlNode(),
                                                                       CLDC_DataCore.DataBase.clsXmlControl.XPath(string.Format("{0},{1},{2}|{3},{4},{5}", "C", "Name", (int)Items[i].YuanJian, "D", "Name", Items[i].IsUb ? "U" : "I"))) == null) //如果电流电压节点不存在,则追加一个
                {
                    _XmlNode.appendchild(CLDC_DataCore.DataBase.clsXmlControl.XPath(string.Format("{0},{1},{2}", "C", "Name", ((int)Items[i].YuanJian).ToString())), "D", "Name", Items[i].IsUb ? "U" : "I");
                }

                XmlNode _Node = CLDC_DataCore.DataBase.clsXmlControl.FindSencetion(_XmlNode.toXmlNode(),
                                                                                   CLDC_DataCore.DataBase.clsXmlControl.XPath(string.Format("{0},{1},{2}|{3},{4},{5}", "C", "Name", ((int)Items[i].YuanJian).ToString(), "D", "Name", Items[i].IsUb ? "U" : "I"))); //获取电流电压节点

                _Node = CLDC_DataCore.DataBase.clsXmlControl.RemoveChildNode(_Node, CLDC_DataCore.DataBase.clsXmlControl.XPath(string.Format("{0},{1},{2}", "E", "Cs", Items[i].Num.ToString())));                                                                  //在电流电电压节点下移除存在相同的谐波次数的节点

                _Node.AppendChild(CLDC_DataCore.DataBase.clsXmlControl.CreateXmlNode("E", "Cs", Items[i].Num.ToString(), "Fd", Items[i].Extent.ToString(), "Xw", Items[i].Xw.ToString()));                                                                          //追加谐波项目节点
            }

            CLDC_DataCore.DataBase.clsXmlControl _SaveXml = new CLDC_DataCore.DataBase.clsXmlControl(System.Windows.Forms.Application.StartupPath + CLDC_DataCore.Const.Variable.CONST_XIEBO); //获取谐波方案XML文档

            _SaveXml.appendchild(_XmlNode.toXmlNode());                                                                                                                                        //追加当前方案

            _SaveXml.SaveXml();                                                                                                                                                                //存储方案

            _FaName.Add(FaName);

            XieBoCol.Add(FaName, Items);
        }
        /// <summary>
        /// 获取载波协议名称列表
        /// </summary>
        /// <returns></returns>
        public static List <string> GetProtocolNameList()
        {
            CLDC_DataCore.DataBase.clsXmlControl xmlControl = new CLDC_DataCore.DataBase.clsXmlControl(System.Windows.Forms.Application.StartupPath + CLDC_DataCore.Const.Variable.CONST_CARRIER);

            if (xmlControl.Count() == 0)
            {
                return(new List <string>());
            }

            List <string> protocolNames = new List <string>();

            System.Xml.XmlNode xmlNode = xmlControl.toXmlNode();

            for (int i = 0; i < xmlNode.ChildNodes.Count; i++)
            {
                protocolNames.Add(xmlNode.ChildNodes[i].Attributes["CarrierName"].Value);
            }

            xmlNode    = null;
            xmlControl = null;

            return(protocolNames);
        }