/// <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); } } }
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); }
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 } } }
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); } }
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(); }
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); }
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); }