/// <summary>
        /// Delete block from given folder
        /// </summary>
        /// <param name="blockName">Name of the block to be deleted</param>
        /// <param name="software">Software on which to look for the block</param
        public static void DeleteBlock(string blockName, PlcBlockUserGroup software, TextBox log)
        {
            PlcBlock blockToDelete = null;

            foreach (PlcBlock block in software.Blocks)
            {
                if (blockName.Equals(block.Name))
                {
                    blockToDelete = block;
                }
            }

            if (blockToDelete != null)
            {
                blockToDelete.Delete();

                log.AppendText("Block " + blockName + " to be deleted found in " + software.Name + " folder");
                log.AppendText(Environment.NewLine);
            }
            else
            {
                log.AppendText("Block " + blockName + " not found in " + software.Name + " folder");
                log.AppendText(Environment.NewLine);

                // if block was not found in current group check subgroups
                foreach (PlcBlockUserGroup group in software.Groups)
                {
                    DeleteBlock(blockName, group, log);
                }
            }
        }
Beispiel #2
0
 private static void CreateBlockGroup(PlcSoftware plcsoftware, string nameofgroup)
 //Creates a block group
 {
     PlcBlockSystemGroup          systemGroup      = plcsoftware.BlockGroup;
     PlcBlockUserGroupComposition groupComposition = systemGroup.Groups;
     PlcBlockUserGroup            myCreatedGroup   = groupComposition.Create(nameofgroup);
 }
Beispiel #3
0
        public void Import(PlcBlockUserGroup Group, string path)
        {
            var filePath = Path.Combine(path, Util.RemoveInvalidFileNameChars(Name) + ".xml");
            IList <PlcBlock> importedBlocks;

            try
            {
                importedBlocks = Group.Blocks.Import(new FileInfo(filePath), ImportOptions.Override, SWImportOptions.IgnoreMissingReferencedObjects | SWImportOptions.IgnoreStructuralChanges | SWImportOptions.IgnoreUnitAttributes);
            }
            catch (Exception ex)
            {
                Trace.TraceError("Exception during import:" + Environment.NewLine + ex);
                _state = ExitState.CouldNotImport;
                return;
            }
            finally
            {
                try
                {
                    if (File.Exists(path))
                    {
                        File.Delete(path);
                    }
                }
                catch
                {
                    // Silently ignore file operations
                }
            }
        }
Beispiel #4
0
        public void CreateRenamedGroups(string find, string replace)
        {
            string newGroupName = Name.Replace(find, replace);

            _newGroup = Parent.Groups.Create(newGroupName);
            foreach (BlockGroup group in Groups)
            {
                group.Parent = _newGroup;
                group.CreateRenamedGroups(find, replace);
            }
        }
Beispiel #5
0
        public BlockGroup(PlcBlockUserGroup plcBlockGroup, string exportLocation, string path = "")
        {
            _blockGroup = plcBlockGroup;
            Parent      = (PlcBlockGroup)_blockGroup.Parent;
            Name        = _blockGroup.Name;
            _exportPath = Path.Combine(exportLocation, Util.RemoveInvalidFileNameChars(Name));
            var dir = Directory.CreateDirectory(_exportPath);

            _exportDir = dir.FullName;
            Inititalise(path);
            SetChangeableState();
        }
Beispiel #6
0
 public void RefreshGroup()
 {
     _blockGroup = _newGroup;
     Blocks      = new List <Block>();
     foreach (PlcBlock block in _blockGroup.Blocks)
     {
         Blocks.Add(new Block(block));
     }
     Groups = new List <BlockGroup>();
     foreach (PlcBlockUserGroup blockGroup in _blockGroup.Groups)
     {
         Groups.Add(new BlockGroup(blockGroup, _path));
     }
 }
        /// <summary>
        /// Reads the blocks in the provided software group
        /// Recursively check subgroups
        /// </summary>
        /// <param name="software"></param>
        /// <returns>List with all found block names</returns>
        public static List <string> ReadBlocks(PlcBlockUserGroup software)
        {
            var blocks = new List <string>();

            // get blocks in current folder/group
            foreach (var block in software.Blocks)
            {
                // add them to list
                string blockType = block.GetType().ToString();
                blockType = blockType.Substring(blockType.LastIndexOf('.') + 1);

                blocks.Add(block.Name + " - " + blockType + " - " + block.Number);
            }

            // get also blocks in subfolders
            foreach (var group in software.Groups)
            {
                blocks.AddRange(ReadBlocks(group));
            }

            return(blocks);
        }
Beispiel #8
0
        private static void EnumerateBlockGroup(PlcBlockUserGroup blockUserGroup, PlcSoftware plcsoftware, string path)
        {
            if (blockUserGroup.Name.EndsWith("Test"))
            {
                return;
            }

            path += blockUserGroup.Name + "\\";
            Directory.CreateDirectory(path);

            foreach (var block in blockUserGroup.Blocks)
            {
                ProgrammingLanguage lang = block.ProgrammingLanguage;
                if (lang == ProgrammingLanguage.SCL)
                {
                    plcsoftware.ExternalSourceGroup.GenerateSource(new List <PlcBlock> {
                        block
                    }, new FileInfo(path + block.Name + ".scl"), GenerateOptions.None);
                }
                else if (lang == ProgrammingLanguage.DB)
                {
                    plcsoftware.ExternalSourceGroup.GenerateSource(new List <PlcBlock> {
                        block
                    }, new FileInfo(path + block.Name + ".db"), GenerateOptions.None);
                }
                else
                {
                    Console.WriteLine("Block " + block.Name + " not exported, language " + lang);
                }
            }

            foreach (PlcBlockUserGroup subBlockUserGroup in blockUserGroup.Groups)
            {
                EnumerateBlockGroup(subBlockUserGroup, plcsoftware, path);
            }
        }
 protected override void DoWork()
 {
     lock (portal)
     {
         try
         {
             Stack <string>     group_names = new Stack <string>();
             IEngineeringObject obj         = fromBlock.Parent;
             while (obj is PlcBlockUserGroup)
             {
                 group_names.Push(((PlcBlockGroup)obj).Name);
                 obj = obj.Parent;
             }
             PlcBlockGroup group = toPlc.BlockGroup;
             foreach (string group_name in group_names)
             {
                 PlcBlockUserGroup child = group.Groups.Find(group_name);
                 if (child != null)
                 {
                     group = child;
                 }
                 else
                 {
                     group = group.Groups.Create(group_name);
                 }
             }
             FileInfo file = TempFile.File("export_block_", "xml");
             fromBlock.Export(file, ExportOptions.None);
             group.Blocks.Import(file, overwrite ? ImportOptions.Override : ImportOptions.None);
         } catch (Exception ex)
         {
             LogMessage(MessageLog.Severity.Error, "Failed to copy from " + fromBlock.Name + " to " + toPlc.Name + ":\n" + ex.Message);
             return;
         }
     }
 }
        /// <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);
        }