// Delete selected blocks private void Btn_DeleteSelection_Click(object sender, EventArgs e) { // Determine if are any blocks checked if (blocksCheckList.CheckedItems.Count != 0) { statusBox.AppendText(blocksCheckList.CheckedItems.Count + " blocks have been selected for deletion"); statusBox.AppendText(Environment.NewLine); foreach (var device in MyProject.Devices) { statusBox.AppendText("Deleting blocks from " + device.Name); statusBox.AppendText(Environment.NewLine); // get plc software // device represents the rack // first element of DeviceItems (modules in the rack) is the plc PlcSoftware software = BlockManagement.GetSoftwareFrom(device.DeviceItems[1]); if (software != null) { // now remove selected blocks foreach (string blockName in blocksCheckList.CheckedItems) { // clean blockName string string name = blockName.Substring(0, blockName.IndexOf('-') - 1); statusBox.AppendText("Searching for " + name); statusBox.AppendText(Environment.NewLine); // first on root folder foreach (var block in software.BlockGroup.Blocks) { if (name.Equals(block.Name)) { statusBox.AppendText("Block " + name + " to be deleted found in root folder"); statusBox.AppendText(Environment.NewLine); block.Delete(); } } // check also subfolders foreach (var group in software.BlockGroup.Groups) { BlockManagement.DeleteBlock(name, group, statusBox); } } } else { statusBox.AppendText("No software found for " + device.Name); statusBox.AppendText(Environment.NewLine); } } } else { statusBox.AppendText("No blocks have been selected for deletion"); statusBox.AppendText(Environment.NewLine); } }
// 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); } }