Пример #1
0
        /// <summary>Returns all MasterCopies in folder as TreeViewItems</summary>
        /// <param name="folder">The folder.</param>
        /// <returns>TreeViewItem</returns>
        /// <exception cref="System.ArgumentNullException">Parameter is null;folder</exception>
        public static TreeViewItem GetMasterCopiesTreeView(MasterCopyFolder folder)
        {
            if (folder == null)
            {
                throw new ArgumentNullException(nameof(folder), "Parameter is null");
            }

            var treeViewItem = new TreeViewItem();

            treeViewItem.Header = OpennessHelper.GetObjectName(folder);
            treeViewItem.Tag    = folder;

            foreach (var mCopy in folder.MasterCopies)
            {
                var sub = new TreeViewItem();
                sub.Header = mCopy.Name;
                sub.Tag    = mCopy;

                treeViewItem.Items.Add(sub);
            }

            foreach (var subfolder in folder.Folders)
            {
                var subView = GetMasterCopiesTreeView(subfolder);

                treeViewItem.Items.Add(subView);
            }

            return(treeViewItem);
        }
Пример #2
0
        /// <summary>
        /// Search project library for the block required and returns it
        /// </summary>
        /// <param name="libraryFolder">Folder of the project library to search in</param>
        /// <param name="blockName">Name of the block to be search for</param>
        /// <returns>Block if found, null otherwise</returns>
        public static MasterCopy GetMasterCopy(MasterCopyFolder libraryFolder, string blockName, TextBox log)
        {
            // look for block in current folder
            foreach (var masterCopy in libraryFolder.MasterCopies)
            {
                if (masterCopy.Name.Equals(blockName))
                {
                    log.AppendText("Block to be copied found in " + libraryFolder.Name);
                    log.AppendText(Environment.NewLine);
                    return(masterCopy);
                }
            }

            // if not in this folder check subfolders
            foreach (var subfolder in libraryFolder.Folders)
            {
                MasterCopy result = GetMasterCopy(subfolder, blockName, log);

                if (result != null)
                {
                    return(result);
                }
            }

            log.AppendText("Block to be copied not found");
            log.AppendText(Environment.NewLine);
            return(null);
        }
Пример #3
0
        /// <summary>
        /// Copy provided tag table from project library to provided destination folder in plc
        /// </summary>
        public static bool CopyTagTableToFolder(string tagTableName, MasterCopyFolder libraryFolder, PlcTagTableGroup tagGroup, string destFolder, TextBox log)
        {
            // check if it's already on the right folder to proceed with the copy
            if (tagGroup.Name.Equals(destFolder))
            {
                log.AppendText("Destination folder found");
                log.AppendText(Environment.NewLine);
                // delete existing tag table if already exists
                DeleteTagTable(tagTableName, tagGroup, log);

                // create new tag table from project library
                tagGroup.TagTables.CreateFrom(GetMasterCopy(libraryFolder, tagTableName, log));
                return(true);
            }

            // if it's not in the right folder, recursively check subfolders
            foreach (PlcTagTableGroup group in tagGroup.Groups)
            {
                log.AppendText("Checking " + group.Name + " subfolders");
                log.AppendText(Environment.NewLine);
                if (CopyTagTableToFolder(tagTableName, libraryFolder, group, destFolder, log))
                {
                    return(true);
                }
            }

            return(false);
        }
Пример #4
0
        /// <summary>
        /// Read project library master copies folder
        /// </summary>
        /// <param name="masterCopiesFolder"></param>
        /// <param name="path"></param>
        /// <returns>String containing the block name and parent folder - Folder/BlockName</returns>
        public static List <string> ReadProjectLibrary(MasterCopyFolder masterCopiesFolder, string path)
        {
            // check we have some master copies folder to work with
            if (masterCopiesFolder == null)
            {
                throw new ArgumentNullException(nameof(masterCopiesFolder), "Parameter is null");
            }

            var masterCopies = new List <string>();

            // Add new elements to list
            foreach (var mCopy in masterCopiesFolder.MasterCopies)
            {
                path = masterCopiesFolder.Name + "/" + mCopy.Name;
                masterCopies.Add(path);
            }

            // Check for elements in subfolders and add them to the list too
            foreach (var subfolder in masterCopiesFolder.Folders)
            {
                masterCopies.AddRange(ReadProjectLibrary(subfolder, path));
            }

            return(masterCopies);
        }
Пример #5
0
        /// <summary>
        /// Copy block from provided project library to folder in provided plc software object
        /// </summary>
        /// <param name="blockName">Name of the block to be copied</param>
        /// <param name="libraryFolder">Project library folder with origin block</param>
        /// <param name="software">Software to copy the block into</param>
        /// <param name="destFolder">Destination folder on which to copy the block</param>
        /// <returns>True if copied, false otherwise</returns>
        public static bool CopyBlockToFolder(string blockName, MasterCopyFolder libraryFolder, PlcBlockUserGroup software, string destFolder, TextBox log)
        {
            // checks if it's already on the right folder to proceed with the copy
            if (software.Name.Equals(destFolder))
            {
                log.AppendText("Destination folder found");
                log.AppendText(Environment.NewLine);

                // delete block if it already exists
                DeleteBlock(blockName, software, log);

                // create new block from library
                software.Blocks.CreateFrom(GetMasterCopy(libraryFolder, blockName, log));
                return(true);
            }

            // if it's not in the right folder, recursively check subfolders
            foreach (var group in software.Groups)
            {
                log.AppendText("Checking " + software.Name + " subfolders");
                log.AppendText(Environment.NewLine);
                if (CopyBlockToFolder(blockName, libraryFolder, group, destFolder, log))
                {
                    return(true);
                }
            }

            return(false);
        }
Пример #6
0
        // Copy selected blocks from project library
        private void Btn_CopySelection_Click(object sender, EventArgs e)
        {
            // Determine if there are any devices checked.
            if (devicesCheckList.CheckedItems.Count != 0)
            {
                statusBox.AppendText("Systems selected: " + devicesCheckList.CheckedItems.Count);
                statusBox.AppendText(Environment.NewLine);

                // If so loop through all devices checking if they have been selected
                foreach (var device in MyProject.Devices)
                {
                    if (devicesCheckList.CheckedItems.Contains(device.Name))
                    {
                        statusBox.AppendText("Applying changes to system " + device.Name);
                        statusBox.AppendText(Environment.NewLine);

                        foreach (var deviceItem in device.DeviceItems)
                        {
                            PlcSoftware software = BlockManagement.GetSoftwareFrom(deviceItem);
                            if (software != null)
                            {
                                MasterCopyFolder masterFolder = MyProject.ProjectLibrary.MasterCopyFolder;

                                // get blocks to be copied info
                                foreach (string item in projectLibraryCheckList.CheckedItems)
                                {
                                    string destFolder  = item.Substring(0, item.IndexOf("/"));
                                    string blockToCopy = item.Substring(item.IndexOf("/") + 1);
                                    statusBox.AppendText("Copying " + blockToCopy + " to " + destFolder);
                                    statusBox.AppendText(Environment.NewLine);

                                    // check if it's a tag table or software block
                                    if (destFolder.Equals("PLC tags"))
                                    {
                                        BlockManagement.CopyTagTableToFolder(blockToCopy, masterFolder, software.TagTableGroup, destFolder, statusBox);
                                    }
                                    else
                                    {
                                        // TO DO - Overload method to take as argument BlockGroup and BlockUserGroup
                                        // Type of BlockGroup is PlcBlockSystemGroup is not compatible with type of
                                        // Group that is PlcBlockUserGroup so the same functions can't be applied
                                        // in both cases, that's the reason for the exception when copying to the root folder
                                        if (destFolder.Equals("PLC"))
                                        {
                                            // delete block if already exists
                                            foreach (var block in software.BlockGroup.Blocks)
                                            {
                                                if (blockToCopy.Equals(block.Name))
                                                {
                                                    block.Delete();
                                                }
                                            }
                                            // now copy block
                                            software.BlockGroup.Blocks.CreateFrom(BlockManagement.GetMasterCopy(masterFolder, blockToCopy, statusBox));
                                        }
                                        else
                                        {
                                            foreach (var group in software.BlockGroup.Groups)
                                            {
                                                // Before copying delete block if already exists
                                                BlockManagement.DeleteBlock(blockToCopy, group, statusBox);
                                                // now copy block
                                                BlockManagement.CopyBlockToFolder(blockToCopy, masterFolder, group, destFolder, statusBox);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                statusBox.AppendText("No systems have been selected");
                statusBox.AppendText(Environment.NewLine);
            }
        }