Exemplo n.º 1
0
        /// <summary>
        /// 增加新的 KepwareServer
        /// </summary>
        /// <param name="server">KepwareServer 对象</param>
        /// <param name="dataFileName">本地持久化文件名</param>
        public void Add(TIRAPOPCServer server, string dataFileName)
        {
            if (GetServerWithAddrAndName(server.Address, server.Name) != null)
            {
                Exception error = new Exception();
                error.Data["ErrCode"] = "900102";
                error.Data["ErrText"] =
                    string.Format(
                        "KepServer[{0}({1})]已在系统中注册",
                        server.Address,
                        server.Name);
                throw error;
            }

            ModifyDataFile(1, server, dataFileName);
            servers.Add(server);
        }
Exemplo n.º 2
0
        /// <summary>
        ///  删除已有的 KepwareServer
        /// </summary>
        /// <param name="servAddr">KepwareServer 地址</param>
        /// <param name="servName">KepwareServer 名称</param>
        /// <param name="dataFileName">本地持久化文件名</param>
        public void Remove(string servAddr, string servName, string dataFileName)
        {
            TIRAPOPCServer server = GetServerWithAddrAndName(servAddr, servName);

            if (server == null)
            {
                Exception error = new Exception();
                error.Data["ErrCode"] = "900101";
                error.Data["ErrText"] =
                    string.Format(
                        "KepServer[{0}({1})]未在系统中注册",
                        server.Address,
                        server.Name);
                throw error;
            }

            ModifyDataFile(2, server, dataFileName);
            servers.Remove(server);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 从指定的持久化文件中加载 KepwareServer 信息
        /// </summary>
        /// <param name="cfgFileName"></param>
        /// <returns></returns>
        public int LoadFromDataFile(string cfgFileName)
        {
            servers.Clear();

            XmlDocument xml = new XmlDocument();

            try
            {
                xml.Load(cfgFileName);
            }
            catch (Exception error)
            {
                Debug.WriteLine(string.Format("加载[{0}]文件时出错:[{1}]", cfgFileName, error.Message));
                return(servers.Count);
            }

            XmlNode parentNode = xml.SelectSingleNode("root/OPCServers");

            if (parentNode != null)
            {
                foreach (XmlNode child in parentNode.ChildNodes)
                {
                    TIRAPOPCServer server = TIRAPOPCServer.LoadFromXMLNode(child);
                    if (server != null)
                    {
                        servers.Add(server);
                    }
                }
            }
            else
            {
                Debug.WriteLine("配置文件中没有找到 root/OPCServers 节点(请注意大小写)");
            }

            return(servers.Count);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 将 KepwareServer 信息持久化
        /// </summary>
        /// <param name="type">编辑类别:1-保存;2-删除</param>
        /// <param name="server">KepwareServer对象</param>
        /// <param name="dataFileName">本地持久化文件名</param>
        public void ModifyDataFile(int type, TIRAPOPCServer server, string dataFileName)
        {
            XmlDocument xml      = new XmlDocument();
            XmlNode     rootNode = null;

            if (!File.Exists(dataFileName))
            {
                xml.AppendChild(xml.CreateXmlDeclaration("1.0", "utf-8", ""));
                rootNode = xml.CreateElement("root");
                xml.AppendChild(rootNode);
            }
            else
            {
                try
                {
                    xml.Load(dataFileName);
                }
                catch (Exception error)
                {
                    Debug.WriteLine(string.Format("加载[{0}]文件时出错:[{1}]", dataFileName, error.Message));
                    return;
                }

                rootNode = xml.SelectSingleNode("root");
                if (rootNode == null)
                {
                    Debug.WriteLine(
                        string.Format(
                            "[{0}] 文件中不存在 root 根节点"));
                    return;
                }
            }

            // 在第一层子节点中查找 Device 节点,若没有找到则创建该节点
            XmlNode serversNode = null;

            foreach (XmlNode node in rootNode.ChildNodes)
            {
                if (node.Name == "OPCServers")
                {
                    serversNode = node;
                    break;
                }
            }
            if (serversNode == null)
            {
                serversNode = xml.CreateElement("OPCServers");
                rootNode.AppendChild(serversNode);
            }

            // 在 OPCServers 节点中查找指定 Address 的 OPCServer 子节点,如果找到则从 Devices 节点中删除
            XmlNode serverNode =
                IRAPXMLUtils.GetChildNodeWithPropertyValue(
                    serversNode,
                    server);

            if (serverNode != null)
            {
                serversNode.RemoveChild(serverNode);
            }

            if (type == 1)
            {
                #region 添加设备节点
                serverNode = xml.ImportNode(server.GenerateXMLNode(), true);
                serversNode.AppendChild(serverNode);
                #endregion
            }

            // 保存 XML 到文件
            xml.Save(dataFileName);
        }
Exemplo n.º 5
0
        public string DoAction()
        {
            if (content.Request != null)
            {
                content.Response.ErrCode = "999999";
                content.Response.ErrText = "功能正在开发中......";

                try
                {
                    if (content.Request.ExCode == "UpdateKepServ")
                    {
                        TIRAPOPCServer server = null;

                        switch (content.Request.UpdateType)
                        {
                        case 1:         // 新增
                            server =
                                TIRAPOPCServers.Instance.GetServerWithAddrAndName(
                                    content.Request.KepServAddr,
                                    content.Request.KepServName);
                            if (server != null)
                            {
                                Exception error = new Exception();
                                error.Data["ErrCode"] = "900102";
                                error.Data["ErrText"] =
                                    string.Format(
                                        "KepServer[{0}({1})]已在系统中注册",
                                        server.Address,
                                        server.Name);
                                throw error;
                            }

                            server = new TIRAPOPCServer(content.Request);
                            TIRAPOPCServers.Instance.Add(
                                server,
                                TOPCGatewayGlobal.Instance.ConfigurationFile);

                            content.Response.ErrCode = "0";
                            content.Response.ErrText = "KepwareServer 新增成功";

                            break;

                        case 2:
                            content.Response.ErrCode = "999999";
                            content.Response.ErrText = "不支持 UpdateType=2 的功能";
                            break;

                        case 3:
                            TIRAPOPCServers.Instance.Remove(
                                content.Request.KepServAddr,
                                content.Request.KepServName,
                                TOPCGatewayGlobal.Instance.ConfigurationFile);

                            content.Response.ErrCode = "0";
                            content.Response.ErrText = "KepwareServer 删除成功";

                            break;
                        }
                    }
                    else
                    {
                        content.Response.ErrCode = "900000";
                        content.Response.ErrText = "报文体中的交易代码和报文头中的交易代码不一致";
                    }
                }
                catch (Exception error)
                {
                    content.Response.ErrText = string.Format("系统抛出的错误:[{0}]", error.Message);
                    foreach (DictionaryEntry de in error.Data)
                    {
                        if (de.Key.ToString().ToUpper() == "ERRCODE")
                        {
                            content.Response.ErrCode = de.Value.ToString();
                        }
                        if (de.Key.ToString().ToUpper() == "ERRTEXT")
                        {
                            content.Response.ErrText = de.Value.ToString();
                        }
                    }
                }
            }

            return(content.GenerateResponseContent());
        }