Example #1
0
        /// <summary>
        /// This method shows the information to edit all values pre-configured for SMV,
        /// SMVControl and SMVoptions classes.
        /// </summary>
        /// <param name="sMVControl">
        /// Sampled Value Controls class.
        /// </param>
        /// <param name="sMVOptions">
        /// Sampled Value Options class.
        /// </param>
        /// <param name="smv">
        /// Sampled Value class.
        /// </param>
        /// <param name="treeSCL">
        /// TreeNode reference
        /// </param>
        public void SMVHandler(object sMVControl, object sMVOptions, string[] smv, TreeNode treeSCL)
        {
            tSampledValueControl sMVCtrl = (tSampledValueControl)sMVControl;

            sMVCtrl.datSet = this.datSet.SelectedItem.ToString();
            SCL sCL = (SCL)treeSCL.TreeView.Nodes["root"].Nodes["SCL"].Tag;
            tSampledValueControlSmvOpts sMVOpts = (tSampledValueControlSmvOpts)sMVOptions;
            TreeNode nodeSMVControl             = new TreeNode();
            TreeNode nodeSMV;

            nodeSMVControl.Name = sMVCtrl.name;
            nodeSMVControl.Text = sMVCtrl.name;
            nodeSMVControl.Tag  = sMVCtrl;
            TreeNode nodetSMV;
            tSMV     tsmv = new tSMV();

            if (this.objectManagement.AddObjectToArrayObjectOfParentObject(sMVCtrl, treeSCL.Tag))
            {
                if (treeSCL.TreeView.SelectedNode.Tag is tLN0)
                {
                    tLN0     ln0       = (tLN0)treeSCL.Tag;
                    TreeNode parentSMV = new TreeNode();
                    parentSMV.Name = "tSampledValueControl[]";
                    parentSMV.Text = "SampledValueControl";
                    parentSMV.Tag  = ln0.SampledValueControl;
                    treeSCL.Nodes.Add(parentSMV);
                    treeSCL = parentSMV;
                }
                else
                {
                    treeSCL = treeSCL.TreeView.SelectedNode;
                }
                treeSCL.Nodes.Add(nodeSMVControl);
                this.objectManagement.AddObjectToSCLObject(sMVOpts, sMVCtrl);
                TreeNode nodeOP = new TreeNode();
                nodeOP.Name = "SMVOpts";
                nodeOP.Text = "SMVOpts";
                nodeOP.Tag  = sMVOpts;
                nodeSMVControl.Nodes.Add(nodeOP);
            }
            treeViewSCL.CreateCommNode(sCL, treeSCL);
            TreeNode connAPRef = new TreeNode();

            for (int i = 0; i < sCL.Communication.SubNetwork.Length; i++)
            {
                connAPRef = treeViewSCL.SeekAssociation(treeSCL.TreeView.Nodes["root"].Nodes["SCL"].Nodes["tCommunication"].Nodes["tSubNetwork[]"].Nodes[i].Nodes, apParentName, iedParentName, "apName", "iedName");
                if (connAPRef == null && sCL.Communication.SubNetwork[i].ConnectedAP == null)
                {
                    treeViewSCL.CreateConnectedNode(sCL, treeSCL, apParentName, iedParentName, i);
                    connAPRef = treeViewSCL.SeekAssociation(treeSCL.TreeView.Nodes["root"].Nodes["SCL"].Nodes["tCommunication"].Nodes["tSubNetwork[]"].Nodes[i].Nodes, apParentName, iedParentName, "apName", "iedName");
                }
                if (connAPRef != null)
                {
                    tsmv.cbName = sMVCtrl.name;
                    tsmv.ldInst = smv[0];
                    tsmv.desc   = smv[5];
                    nodeSMV     = new TreeNode();
                    this.objectManagement.AddObjectToArrayObjectOfParentObject(tsmv, connAPRef.Tag);
                    if (connAPRef.Nodes["tSMV[]"] == null)
                    {
                        tConnectedAP tconn = (tConnectedAP)connAPRef.Tag;
                        nodeSMV.Text = "SMV";
                        nodeSMV.Name = "tSMV[]";
                        nodeSMV.Tag  = tconn.SMV;
                        connAPRef.Nodes.Add(nodeSMV);
                    }
                    else
                    {
                        nodeSMV = connAPRef.Nodes["tSMV[]"];
                    }
                    nodetSMV      = new TreeNode();
                    nodetSMV.Text = sMVCtrl.name;
                    nodetSMV.Name = smv[0] + "." + sMVCtrl.name;
                    nodetSMV.Tag  = tsmv;
                    nodeSMV.Nodes.Add(nodetSMV);
                    AttributeReferences aReferences = new AttributeReferences();
                    aReferences.Insert(tsmv, nodeSMVControl);
                    tAddress taddr = new tAddress();
                    this.objectManagement.AddObjectToSCLObject(taddr, tsmv);
                    TreeNode nodeAddress = new TreeNode();
                    nodeAddress.Text = "Address";
                    nodeAddress.Name = "Address";
                    nodeAddress.Tag  = taddr;
                    nodetSMV.Nodes.Add(nodeAddress);
                    TreeNode nodetP = new TreeNode();
                    nodetP.Name = "tP[]";
                    nodetP.Text = "P";
                    nodeAddress.Nodes.Add(nodetP);
                    Utils utilsOM = new Utils();

                    tP            t_mac  = new tP();
                    tP_MACAddress t_mac_ = new tP_MACAddress();
                    this.objectManagement.EmptySourcetoDestinyObject(t_mac_, t_mac);
                    t_mac.Value = this.mac.Text;
                    utilsOM.AddTPTreeNode(t_mac, "tP_mac", "tP", taddr, nodetP);

                    tP       t_app  = new tP();
                    tP_APPID t_app_ = new tP_APPID();
                    this.objectManagement.EmptySourcetoDestinyObject(t_app_, t_app);
                    t_app.Value = this.appID.Text;
                    utilsOM.AddTPTreeNode(t_app, "tP_app", "tP", taddr, nodetP);

                    tP t_vlap = new tP();
                    tP_VLANPRIORITY t_vlap_ = new tP_VLANPRIORITY();
                    this.objectManagement.EmptySourcetoDestinyObject(t_vlap_, t_vlap);
                    t_vlap.Value = this.vLANP.Text;
                    utilsOM.AddTPTreeNode(t_vlap, "tP_vlanp", "tP", taddr, nodetP);

                    tP        t_vlani  = new tP();
                    tP_VLANID t_vlani_ = new tP_VLANID();
                    this.objectManagement.EmptySourcetoDestinyObject(t_vlani_, t_vlani);
                    t_vlani.Value = this.vLANI.Text;
                    utilsOM.AddTPTreeNode(t_vlani, "tP_vlani", "tP", taddr, nodetP);
                }
            }
        }
        /// <summary>
        /// This method draws the Communication nodes on the main tree.
        /// </summary>
        private void DrawCommunication()
        {
            // Add a tCommunication object to SCL
            if (this.scl.Communication == null)
            {
                tCommunication communication = new tCommunication();
                this.scl.Communication = communication;
                nodeComm      = new TreeNode();
                nodeComm.Name = "tCommunication";
                nodeComm.Tag  = this.scl.Communication;
                nodeComm.Text = "tCommunication";
                treeSCL.TreeView.Nodes["root"].Nodes["SCL"].Nodes.Add(nodeComm);
            }
            else
            {
                nodeComm = this.treeSCL.TreeView.Nodes["root"].Nodes["SCL"].Nodes["tCommunication"];
            }
            // Add a Subnetwork
            if (this.treeSCL.TreeView.Nodes["root"].Nodes["SCL"].Nodes["tCommunication"].Nodes["tSubNetwork[]"] == null)
            {
                nodeSubNetwork      = new TreeNode();
                nodeSubNetwork.Name = "tSubNetwork[]";
                nodeSubNetwork.Tag  = this.scl.Communication.SubNetwork;
                nodeSubNetwork.Text = "SubNetwork";
                treeSCL.TreeView.Nodes["root"].Nodes["SCL"].Nodes["tCommunication"].Nodes.Add(nodeSubNetwork);
            }
            else
            {
                nodeSubNetwork = this.treeSCL.TreeView.Nodes["root"].Nodes["SCL"].Nodes["tCommunication"].Nodes["tSubNetwork[]"];
            }
            if (this.treeSCL.TreeView.Nodes["root"].Nodes["SCL"].Nodes["tCommunication"].Nodes["tSubNetwork[]"].Nodes[this.nameSubNet.Text] == null &&
                this.GetNodeName(nodeSubNetwork.Nodes, nameSubNet.Text, "name") == null)
            {
                int sni = this.scl.Communication.AddSubNetwork(this.nameSubNet.Text, this.descSubNet.Text);
                if (sni >= 0)
                {
                    nodetSubNetwork      = new TreeNode();
                    nodetSubNetwork.Name = this.scl.Communication.SubNetwork[sni].name;
                    nodetSubNetwork.Text = "tSubNetwork";
                    nodetSubNetwork.Tag  = this.scl.Communication.SubNetwork[sni];
                    treeSCL.TreeView.Nodes["root"].Nodes["SCL"].Nodes["tCommunication"].Nodes["tSubNetwork[]"].Nodes.Add(nodetSubNetwork);
                }
                else
                {
                    System.Windows.Forms.MessageBox.Show("Subnetwork couldn't be added. Verify if it already exist and try again",
                                                         "Subnetwork wasn't added",
                                                         System.Windows.Forms.MessageBoxButtons.OK,
                                                         System.Windows.Forms.MessageBoxIcon.Error);
                }
            }
            else
            {
                nodetSubNetwork = this.treeSCL.TreeView.Nodes["root"].Nodes["SCL"].Nodes["tCommunication"].Nodes["tSubNetwork[]"].Nodes[this.GetNodeName(nodeSubNetwork.Nodes, nameSubNet.Text, "name")];
            }
            if (this.treeSCL.TreeView.Nodes["root"].Nodes["SCL"].Nodes["tCommunication"].Nodes["tSubNetwork[]"].Nodes[nodetSubNetwork.Name].Nodes["tConnectedAP[]"] == null)
            {
                nodeComm      = new TreeNode();
                nodeComm.Name = "tConnectedAP[]";
                nodeComm.Tag  = this.scl.Communication.SubNetwork[nodetSubNetwork.Index].ConnectedAP;
                nodeComm.Text = "ConnectedAP";
                treeSCL.TreeView.Nodes["root"].Nodes["SCL"].Nodes["tCommunication"]
                .Nodes["tSubNetwork[]"].Nodes[nodetSubNetwork.Name].Nodes.Add(nodeComm);
            }
            else
            {
                nodeComm = this.treeSCL.TreeView.Nodes["root"].Nodes["SCL"].Nodes["tCommunication"].Nodes["tSubNetwork[]"].Nodes[nodetSubNetwork.Name].Nodes["tConnectedAP[]"];
            }

            this.treeViewSCL = new TreeViewSCL();
            connap.apName    = this.apName;
            connap.iedName   = this.iedName;
            if (this.treeViewSCL.SeekAssociation(this.treeSCL.TreeView.Nodes["root"]
                                                 .Nodes["SCL"].Nodes["tCommunication"]
                                                 .Nodes["tSubNetwork[]"].Nodes[nodetSubNetwork.Name]
                                                 .Nodes, this.apName, this.iedName) == null)
            {
                // Create tAddress
                tP[]  tp  = new tP[6];
                tP_IP _ip = new tP_IP();
                _ip.Value = this.ip.Text;
                tp[0]     = _ip;

                tP_IPSUBNET _subnet = new tP_IPSUBNET();
                _subnet.Value = this.mask.Text;
                tp[1]         = _subnet;

                tP_IPGATEWAY _gate = new tP_IPGATEWAY();
                _gate.Value = this.gateway.Text;
                tp[2]       = _gate;

                tP_OSITSEL _tsel = new tP_OSITSEL();
                _tsel.Value = this.tsel.Text;
                tp[3]       = _tsel;

                tP_OSISSEL _ssel = new tP_OSISSEL();
                _ssel.Value = this.ssel.Text;
                tp[4]       = _ssel;

                tP_OSIPSEL _psel = new tP_OSIPSEL();
                _psel.Value = this.psel.Text;
                tp[5]       = _psel;

                tAddress addr = new tAddress();
                addr.P = tp;

                tIED ied  = this.scl.IED[this.scl.GetIED(this.iedName)];
                int  api  = ied.GetAP(this.apName);
                int  capi = this.scl.Communication
                            .SubNetwork[nodetSubNetwork.Index].AddConnectedAP(ied, api, addr, null);
                if (capi >= 0)
                {
                    AttributeReferences refe = new AttributeReferences();
                    nodetConnected      = new TreeNode();
                    nodetConnected.Name = "tConnectedAP" + this.iedName + this.apName;
                    nodetConnected.Tag  = this.scl.Communication.SubNetwork[nodetSubNetwork.Index].ConnectedAP[capi];
                    nodetConnected.Text = "tConnectedAP";
                    treeSCL.TreeView.Nodes["root"].Nodes["SCL"].Nodes["tCommunication"]
                    .Nodes["tSubNetwork[]"].Nodes[nodetSubNetwork.Name]
                    .Nodes["tConnectedAP[]"].Nodes.Add(nodetConnected);
                    refe.Insert(this.scl.Communication.SubNetwork[nodetSubNetwork.Index].ConnectedAP[capi],
                                this.treeSCL.TreeView.SelectedNode);

                    // Add Nodes for tAddress and tP
                    TreeNode nodeAddress = new TreeNode();
                    nodeAddress.Name = "Adress";
                    nodeAddress.Tag  = address;
                    nodeAddress.Text = "Address";
                    treeSCL.TreeView.Nodes["root"].Nodes["SCL"].Nodes["tCommunication"]
                    .Nodes["tSubNetwork[]"].Nodes[nodetSubNetwork.Name]
                    .Nodes["tConnectedAP[]"].Nodes[nodetConnected.Name].Nodes.Add(nodeAddress);
                    nodeP.Name = "tP[]";
                    nodeP.Text = "P";
                    treeSCL.TreeView.Nodes["root"].Nodes["SCL"].Nodes["tCommunication"]
                    .Nodes["tSubNetwork[]"].Nodes[nodetSubNetwork.Name]
                    .Nodes["tConnectedAP[]"].Nodes[nodetConnected.Name]
                    .Nodes["Adress"].Nodes.Add(nodeP);

                    Utils.AddTPTreeNode(_ip, nodeP);
                    Utils.AddTPTreeNode(_subnet, nodeP);
                    Utils.AddTPTreeNode(_gate, nodeP);
                    Utils.AddTPTreeNode(_tsel, nodeP);
                    Utils.AddTPTreeNode(_psel, nodeP);
                    Utils.AddTPTreeNode(_ssel, nodeP);
                }
                else
                {
                    System.Windows.Forms.MessageBox.Show("ConnectedAP couldn't be added. Verify if it already exist and try again",
                                                         "ConnectedAP wasn't added",
                                                         System.Windows.Forms.MessageBoxButtons.OK,
                                                         System.Windows.Forms.MessageBoxIcon.Error);
                }
            }
            else
            {
                nodetConnected = this.treeViewSCL.SeekAssociation(this.treeSCL.TreeView.Nodes["root"].Nodes["SCL"].Nodes["tCommunication"].Nodes["tSubNetwork[]"].Nodes[nodetSubNetwork.Name].Nodes["tConnectedAP[]"].Nodes, this.apName, this.iedName, "apName", "iedName");
            }
        }