/// <summary>
        /// Import blocks to Tia Portal
        /// </summary>
        /// <param name="savePath"></param>
        /// <param name="current"></param>
        /// <param name="Folder"></param>
        /// <param name="BlocksCreated"></param>
        public static void BlocksImporter(string savePath, object current, string Folder, List <string> BlocksCreated)
        {
            if (current != null)
            {
                var group = (current as PlcBlockUserGroup).Groups.Find(Folder);

                if (group != null)
                {
                    var blocksDirectory = new DirectoryInfo(savePath + "\\" + Folder);

                    // Get files inside Folder
                    foreach (var file in blocksDirectory.GetFiles())
                    {
                        string fileName = Path.GetFileNameWithoutExtension(file.FullName);

                        // Check files inside Folder and check if that file was created by method that called this function
                        if (BlocksCreated.Contains(fileName))
                        {
                            try
                            {
                                OpennessHelper.ImportItem(group, file.FullName, ImportOptions.Override);
                            }
                            catch (Exception ex)
                            {
                                System.Windows.MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                            }
                        }
                    }

                    // Get Subfolders inside Folder
                    foreach (var folder in blocksDirectory.GetDirectories())
                    {
                        // Get files inside SubFolder
                        foreach (var file in folder.GetFiles())
                        {
                            string fileName = Path.GetFileNameWithoutExtension(file.FullName);

                            // Check files inside Folder and check if that file was created by method that called this function
                            if (BlocksCreated.Contains(fileName))
                            {
                                var subGroup = group.Groups.Find(folder.Name);
                                if (subGroup != null)
                                {
                                    try
                                    {
                                        OpennessHelper.ImportItem(subGroup, file.FullName, ImportOptions.Override);
                                    }
                                    catch (Exception)
                                    {
                                        // Continue
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Populate libraries combobox
        /// </summary>
        private void PopulateLibs()
        {
            List <string> libs = OpennessHelper.GetLibrariesNamesFromTIA(tiaPortal);

            if (libs.Count == 0)
            {
                libs.Add("No libraries found.");
            }

            Libraries = libs;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Generate Tree View
        /// </summary>
        private void PopulateTreeView()
        {
            var xlApp      = new Excel.Application();
            var xlWorkbook = OpennessHelper.GetExcelFile(networkListPath, xlApp);

            foreach (Excel.Worksheet xlWorksheet in xlWorkbook.Worksheets)
            {
                string sheetName = xlWorksheet.Name;
                var    matrix    = OpennessHelper.ExcelToMatrix(xlWorksheet);

                if (OpennessHelper.IsNetworkList(matrix))
                {
                    Worksheets.Add(sheetName);
                }
            }

            xlWorkbook.Close(0);
            xlApp.Quit();

            var projectTreeView = new TreeView();

            foreach (var ws in Worksheets)
            {
                TreeViewItem tvi = new TreeViewItem
                {
                    Tag    = ws,
                    Header = new CheckBox()
                    {
                        Content = new TextBlock()
                        {
                            Text = ws
                        },
                        Tag = ws
                    }
                };
                projectTreeView.Items.Add(tvi);
            }

            if (projectTreeView.Items.Count == 0)
            {
                TreeViewItem tvi = new TreeViewItem
                {
                    Header = "Excel does not contain a valid Worksheet"
                };
                projectTreeView.Items.Add(tvi);

                BtnEnabled = false;
            }

            ProjectTree.Refresh(projectTreeView);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Saves the current DataGrid values in the chosen path
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Btn_Save_Click(object sender, RoutedEventArgs e)
        {
            WriteSavingLabelText("Saving...");

            if (ExcelManager.IsOpened(FilePath))
            {
                MessageBox.Show("Please close the current workbook before saving");
            }
            else
            {
                RetrieveValues();

                if (FilePath.Contains(".xlsx") || FilePath.Contains(".xlsm") || FilePath.Contains(".xltx") || FilePath.Contains(".xltm"))
                {
                    Excel.Application xlApp = new Excel.Application
                    {
                        DisplayAlerts = false
                    };
                    Workbook xlWorkbook = xlApp.Workbooks.Open(FilePath);
                    int      row        = 4;
                    var      matrixs    = new List <object[, ]>();
                    var      sheetNames = new List <string>();

                    foreach (Worksheet sheet in xlWorkbook.Worksheets)
                    {
                        string sheetName = sheet.Name;
                        if (!sheetName.Contains("AS_") || sheetName.Equals("AS_000000"))
                        {
                            continue;
                        }

                        object[,] matrix = OpennessHelper.ExcelToMatrix(sheet);
                        if (sheet.Name.Contains(ComboSheet.SelectedItem.ToString()))
                        {
                            Ws = sheet;
                            while (Ws.Cells[row, 3].Value != null)
                            {
                                Ws.Cells[row, 3].Value = null;
                                Ws.Cells[row, 4].Value = null;
                                Ws.Cells[row, 5].Value = null;
                                Ws.Cells[row, 6].Value = null;
                                Ws.Cells[row, 7].Value = null;
                                Ws.Cells[row, 8].Value = null;

                                row += 1;
                            }

                            row = 4;

                            foreach (Step step in steps)
                            {
                                Ws.Cells[row, 2].Value = step.StepNumber;
                                Ws.Cells[row, 3].Value = step.Schritt.Replace(" ", string.Empty);
                                Ws.Cells[row, 4].Value = step.Beschreibung;
                                Ws.Cells[row, 5].Value = step.Aktion.Replace(" ", string.Empty);
                                Ws.Cells[row, 6].Value = step.Vorheriger_Schritt.Replace(" ", string.Empty);
                                Ws.Cells[row, 7].Value = step.Nächster_Schritt.Replace(" ", string.Empty);
                                Ws.Cells[row, 8].Value = step.Zeit_Schritt.ToLower().Replace(" ", string.Empty).Replace("ms", string.Empty);

                                matrix[row, 2] = step.StepNumber;
                                matrix[row, 3] = step.Schritt.Replace(" ", string.Empty);
                                matrix[row, 4] = step.Beschreibung;
                                matrix[row, 5] = step.Aktion.Replace(" ", string.Empty);
                                matrix[row, 6] = step.Vorheriger_Schritt.Replace(" ", string.Empty);
                                matrix[row, 7] = step.Nächster_Schritt.Replace(" ", string.Empty);
                                matrix[row, 8] = step.Zeit_Schritt.ToLower().Replace(" ", string.Empty).Replace("ms", string.Empty);

                                row += 1;
                            }
                        }
                        matrixs.Add(matrix);
                        sheetNames.Add(sheet.Name);
                    }

                    MatrixList(matrixs);
                    SheetNamesList(sheetNames);

                    xlWorkbook.Save();
                    xlWorkbook.Close(0);
                    xlApp.Quit();

                    sheetsStepS = new List <object[, ]>();
                    foreach (var m in matrixs)
                    {
                        sheetsStepS.Add(m);
                    }
                    sheetsNameS = new List <string>();
                    foreach (var n in sheetNames)
                    {
                        sheetsNameS.Add(n);
                    }

                    Saving.Text = "";
                    Saving.Update();

                    if (Ws == null)
                    {
                        System.Windows.MessageBox.Show("This Excel does not contain a usable worksheet", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                    }
                }
            }

            WriteSavingLabelText("");
        }
        /// <summary>
        /// Add PLC Tags in PLC DB file
        /// </summary>
        private void AddPlcDbTags(string robName)
        {
            Excel.Application xlApp       = new Excel.Application();
            Workbook          xlWorkBook  = OpennessHelper.GetExcelFile(PlcDBPath, xlApp);
            Worksheet         xlWorksheet = null;

            if (xlWorkBook == null)
            {
                return;
            }

            try
            {
                xlWorksheet = xlWorkBook.Sheets["PLC Tags"];
            }
            catch (Exception)
            {
                MessageBox.Show("Could not find sheet named \"PLC Tags\" in file: \"" + PlcDBPath + "\"\n\nPLC DB Tags will not be imported.", "Warning", MessageBoxButton.OK, MessageBoxImage.Warning);
                xlWorkBook.Close(0);
                xlApp.Quit();
                return;
            }

            int lastRow = xlWorksheet.Cells.Find("*", System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
                                                 Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlPrevious, false, System.Reflection.Missing.Value, System.Reflection.Missing.Value).Row;

            object[,] matrix = OpennessHelper.ExcelToMatrix(xlWorksheet);

            //SEARCH TAGS IN EXCEL AND ADD TO ROBBASE
            for (int row = 1; row <= lastRow; row++)
            {
                if (Convert.ToString(matrix[row, 1]) != null) //If Column 'A' is not Null
                {
                    //Check if name equals Robot Name
                    if (Convert.ToString(matrix[row, 1]).Contains(robName))
                    {
                        string symbolic = Convert.ToString(matrix[row, 1]);
                        string datatype = Convert.ToString(matrix[row, 3]);
                        string address  = Convert.ToString(matrix[row, 4]);
                        string comment  = Convert.ToString(matrix[row, 5]);

                        RobotBase rb = new RobotBase(symbolic, datatype, address, comment);

                        if (address.Contains('A')) // If startaddress is output
                        {
                            int outputIndexRob = -1;
                            outputIndexRob = robBase[0].FindIndex(a => a.Address.Equals(rb.Address));

                            if (outputIndexRob != -1)
                            {
                                robBase[0][outputIndexRob] = rb;
                            }
                        }
                        else if (address.Contains('E'))   // If startaddress is input
                        {
                            int inputIndexRob = -1;
                            inputIndexRob = robBase[1].FindIndex(a => a.Address.Equals(rb.Address));

                            if (inputIndexRob != -1)
                            {
                                robBase[1][inputIndexRob] = rb;
                            }
                        }
                    }
                }
            }

            xlWorkBook.Close(0);
            xlApp.Quit();
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Event handler generate hardware button click
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void GenerateHardwareCommand_Executed(object sender, EventArgs e)
        {
            List <string> sheetsToUse = GetSelectedSheets();

            if (!StartConditions(sheetsToUse))
            {
                return;
            }

            TaskScheduler uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();

            Task.Factory.StartNew(() =>
            {
                WindowEnabled             = false;
                Excel.Application xlApp   = new Excel.Application();
                Excel.Workbook xlWorkbook = OpennessHelper.GetExcelFile(networkListPath, xlApp);
                Excel.Worksheet xlWorksheet;
                List <AddressData> addressDataList = new List <AddressData>(); //1st IP 2nd Start Address
                List <DeviceData> DeviceDataList   = new List <DeviceData>();
                List <int> pneuList    = new List <int>();
                List <int> t200List    = new List <int>();
                List <int> motorsList  = new List <int>();
                List <int> murrDi6List = new List <int>();
                List <int> listCoupler = new List <int>();
                List <List <string> > HWInformation = null;
                List <string> linesL = new List <string>();
                List <string> delimL = new List <string>();

                UpdateStatus("Generating...", uiScheduler);
                List <int> garetelistPages = OpennessHelper.GetGaretelistePages(eplanPath);

                //UpdateStatus("Getting devices from Worksheets...", uiScheduler);
                //GET ALL THE DEVICES FROM EXCEL FILE
                foreach (var sheet in sheetsToUse)
                {
                    xlWorksheet    = xlWorkbook.Sheets[sheet];
                    DeviceDataList = OpennessHelper.GetAllDevicesNetworkList(xlWorksheet);
                }

                //UpdateStatus("Getting Library...", uiScheduler);

                xlWorkbook.Close(0);
                xlApp.Quit();

                MasterCopySystemFolder MasterCopy = null;

                Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Send, new Action(() =>
                {
                    if (FromPathLibrary == Visibility.Visible)
                    {
                        MasterCopy = OpennessHelper.GetHWMasterCopies(tiaPortal, _libraryPath, true);
                    }
                    else
                    {
                        MasterCopy = OpennessHelper.GetHWMasterCopies(tiaPortal, _selectedLib, false);
                    }
                }));

                //UpdateStatus("Creating Hardware...", uiScheduler);

                Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Send, new Action(() =>
                {
                    using (var access = tiaPortal.ExclusiveAccess("Creating Hardware..."))
                    {
                        foreach (DeviceData device in DeviceDataList)
                        {
                            string type = device.FGroup.Substring(3, 3);

                            switch (type)
                            {
                            case "TRR":
                                OpennessHelper.InsertHWOperatorDoor(device.deviceName, device.addressData.IPAdress, device.addressData.StartAddress, tiaPortalProject, MasterCopy);     //ALBANY
                                break;

                            case "RB_":
                                if (device.deviceName.Substring(14, 3) == "-kf")
                                {
                                    OpennessHelper.InsertHWRobot(device.deviceName, device.addressData.IPAdress, device.addressData.StartAddress, tiaPortalProject);     //ROBOT
                                }
                                else
                                {
                                    OpennessHelper.InsertHWRobotScalance(device.deviceName, device.addressData.IPAdress, tiaPortalProject);     //ROBOT SWITCH
                                }
                                break;

                            case "STU":    ///SAFETY DOOR
                                OpennessHelper.InsertHWEuchner(device.deviceName, device.addressData.IPAdress, device.addressData.StartAddress, !device.option, tiaPortalProject, MasterCopy);
                                break;

                            case "VRF":     ///FESTO
                            case "DTW":
                            case "LME":
                            case "VR_":
                            case "GST":
                            case "LE_":
                            case "VRX":
                            case "SAE":
                            case "VRE":
                            case "ABS":
                                pneuList = new List <int>();    // Reset List

                                HWInformation = OpennessHelper.HWInfo(eplanPath, device.FGroup, device.identifier, garetelistPages);

                                if (HWInformation != null)        // If List has elements
                                {
                                    int count16DI = 0, countDoH = 0, countFDI = 0, countFDO = 0;
                                    foreach (List <string> info in HWInformation)
                                    {
                                        string part = OpennessHelper.GetHWPart(info[1]);
                                        if (part.Contains("16DI"))
                                        {
                                            count16DI++;
                                        }
                                        else if (part.Contains("DO-H"))
                                        {
                                            countDoH++;
                                        }
                                        else if (part.Contains("F8DI"))
                                        {
                                            countFDI++;
                                        }
                                        else if (part.Contains("FVDO"))
                                        {
                                            countFDO++;
                                        }
                                    }

                                    pneuList.Add(count16DI);     // 16DI
                                    pneuList.Add(countDoH);      // DO-H
                                    pneuList.Add(countFDI);      // FDI
                                    pneuList.Add(countFDO);      // FDO
                                }
                                else
                                {
                                    pneuList.Add(1);     //1 - 16DI
                                    pneuList.Add(1);     //1 - DO-H
                                    pneuList.Add(1);     //1 - FDI
                                    pneuList.Add(1);     //1 - FDO
                                }

                                if (device.deviceName.Substring(12, 2) != "ta")
                                {
                                    OpennessHelper.InsertHWPneumatic(device.deviceName, device.addressData.IPAdress, device.addressData.StartAddress, pneuList, tiaPortalProject);
                                }
                                break;

                            case "LS_":
                                OpennessHelper.InsertHwPLS(device.deviceName, device.addressData.IPAdress, device.addressData.StartAddress, tiaPortalProject, device.option, MasterCopy);     //PLS CAN BE SICK S3000 or KEYENCE
                                break;

                            case "BR_":
                            case "BS_":
                            case "BRT":
                                if (device.deviceName.Substring(15, 2) == "kf")
                                {
                                    OpennessHelper.InsertHWKP32F(device.deviceName, device.addressData.IPAdress, device.addressData.StartAddress, tiaPortalProject, MasterCopy);
                                }
                                if (device.deviceName.Substring(15, 2) == "xf")
                                {
                                    OpennessHelper.InsertHWScalanceKP32F(device.deviceName, device.addressData.IPAdress, tiaPortalProject, MasterCopy);
                                }
                                break;

                            //case "ek-": //et200F or LocBox
                            case "PMF":                      //et200s
                            case "EE_":                      //gateway or et200sp
                                t200List = new List <int>(); // Reset List
                                t200List.Add(1);             // 1 - 8DI
                                t200List.Add(1);             // 1 - 16DI
                                t200List.Add(1);             // 1 - 8DQ
                                t200List.Add(1);             // 1 - 16DQ
                                t200List.Add(1);             // 1 - F-8DI
                                t200List.Add(1);             // 1 - F-8DQ
                                t200List.Add(1);             // 1 - SvModule
                                OpennessHelper.InsertHWT200(device.deviceName, device.addressData.IPAdress, device.addressData.StartAddress, t200List, tiaPortalProject);
                                break;

                            case "WAS":     // vi switch
                                OpennessHelper.InsertHWEuchnermgb(device.deviceName, device.addressData.IPAdress, tiaPortalProject);
                                break;

                            case "ZV_":
                            case "RF_":
                            case "QF_":
                            case "PNE":    //MURR
                            case "SPX":
                                murrDi6List = new List <int>();
                                murrDi6List.Add(1);     // IO-Link Output
                                murrDi6List.Add(1);     // IO-Link input/output
                                if (device.terminalType.Contains("FDI8"))
                                {
                                    OpennessHelper.InsertHWMURRFDI8FDO4MVK(device.deviceName, device.addressData.IPAdress, device.addressData.StartAddress, tiaPortalProject);
                                }
                                else if (device.terminalType.Contains("DI6"))
                                {
                                    OpennessHelper.InsertHWMURRDI6DO6MVK(device.deviceName, murrDi6List, device.addressData.IPAdress, device.addressData.StartAddress, tiaPortalProject);
                                }
                                else if (device.terminalType.Contains("Lenze"))
                                {
                                    motorsList = new List <int>(); // Reset List
                                    motorsList.Add(1);             // PZD
                                    motorsList.Add(1);             // Safety
                                    OpennessHelper.InsertHWLenze(device.deviceName, device.addressData.IPAdress, device.addressData.StartAddress, motorsList, tiaPortalProject, "RF_");
                                }
                                break;

                            case "KH_":
                            case "RF2":
                                break;

                            //Motores
                            case "HE_":
                            case "HER":
                            case "FX_":
                            case "HTS":
                                motorsList = new List <int>(); // Reset List
                                motorsList.Add(1);             // PZD
                                motorsList.Add(1);             // Safety
                                OpennessHelper.InsertHWLenze(device.deviceName, device.addressData.IPAdress, device.addressData.StartAddress, motorsList, tiaPortalProject, type);
                                break;

                            case "DGT":
                                OpennessHelper.InsertHWIDENTControl(device.deviceName, device.addressData.IPAdress, tiaPortalProject);
                                break;

                            case "DGC":
                                OpennessHelper.InsertHWMV5(device.deviceName, device.addressData.IPAdress, tiaPortalProject);
                                break;

                            case "EV_":             //Coupler X1
                            case "XEV":             //Coupler X2
                                listCoupler = new List <int>();
                                listCoupler.Add(1); // In 32 Bytes
                                listCoupler.Add(1); // Out 32 Bytes
                                listCoupler.Add(1); // PROFIsafe in/out 6 byte
                                listCoupler.Add(1); // PROFIsafe in/out 12 Byte

                                OpennessHelper.InsertHWCoupler(device.deviceName, device.addressData.IPAdress, device.addressData.StartAddress, listCoupler, type, tiaPortalProject);
                                break;

                            //CONTINUE WITH ALL DEVICES FROM THE DEVICELIST FROM NETWORK LIST
                            default:
                                break;
                            }
                        }
                    }
                }));
            }).ContinueWith(t2 =>
            {
                WindowEnabled = true;
                UpdateStatus("Done!", uiScheduler);
            });
        }
        /// <summary>
        ///Saves the current values of the 2 grid views in the current selected item of the tree view
        /// </summary>
        public void SaveEngValues()
        {
            RetrieveValues();
            var matrixs    = new List <object[, ]>();
            var sheetNames = new List <string>();

            if (TreeViewManager.FilePath != "" && File.Exists(TreeViewManager.FilePath))
            {
                if (TreeViewManager.FilePath.Contains(".xlsx") || TreeViewManager.FilePath.Contains(".xlsm") || TreeViewManager.FilePath.Contains(".xltx") || TreeViewManager.FilePath.Contains(".xltm"))
                {
                    Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
                    xlApp.DisplayAlerts = false;
                    Workbook xlWorkbook = xlApp.Workbooks.Open(TreeViewManager.FilePath);
                    int      row        = 4;

                    foreach (Worksheet sheet in xlWorkbook.Worksheets)
                    {
                        if (sheet.Name.Contains("EngAssist"))
                        {
                            TreeViewManager.Ws       = sheet;
                            object[,] EngAssistSheet = OpennessHelper.ExcelToMatrix(TreeViewManager.Ws);

                            while (TreeViewManager.Ws.Cells[row, 2].Value != null)
                            {
                                TreeViewManager.Ws.Cells[row, 2].Value = null;
                                TreeViewManager.Ws.Cells[row, 3].Value = null;
                                TreeViewManager.Ws.Cells[row, 4].Value = null;
                                TreeViewManager.Ws.Cells[row, 5].Value = null;

                                int column = 8;
                                while (TreeViewManager.Ws.Cells[row, column].Value != null)
                                {
                                    TreeViewManager.Ws.Cells[row, column].Value     = null;
                                    TreeViewManager.Ws.Cells[row + 1, column].Value = null;
                                    column += 1;
                                }
                                row += 2;
                            }

                            row = 4;

                            foreach (EngAssist engAssist in DBMaker.newEngValues)
                            {
                                TreeViewManager.Ws.Cells[row, 2].Value = engAssist.Arbeitsgruppe_ARG;
                                TreeViewManager.Ws.Cells[row, 3].Value = engAssist.Schutzkreis_SK;
                                TreeViewManager.Ws.Cells[row, 4].Value = engAssist.Station;
                                TreeViewManager.Ws.Cells[row, 5].Value = engAssist.Erw_Stationsbez_SBZ;

                                EngAssistSheet[row, 2] = engAssist.Arbeitsgruppe_ARG;
                                EngAssistSheet[row, 3] = engAssist.Schutzkreis_SK;
                                EngAssistSheet[row, 4] = engAssist.Station;
                                EngAssistSheet[row, 5] = engAssist.Erw_Stationsbez_SBZ;

                                int column = 8;
                                foreach (string part in engAssist.Parts)
                                {
                                    TreeViewManager.Ws.Cells[row, column].Value = part;
                                    EngAssistSheet[row, column] = part;
                                    column += 1;
                                }

                                column = 8;
                                foreach (string valve in engAssist.Valves)
                                {
                                    TreeViewManager.Ws.Cells[row + 1, column].Value = valve;
                                    EngAssistSheet[row + 1, column] = valve;
                                    column += 1;
                                }

                                row += 2;
                            }

                            matrixs.Add(EngAssistSheet);
                        }
                        else
                        {
                            var matrix = OpennessHelper.ExcelToMatrix(sheet);
                            matrixs.Add(matrix);
                        }
                        sheetNames.Add(sheet.Name);
                    }

                    MatrixList(matrixs);
                    SheetNamesList(sheetNames);

                    xlWorkbook.Save();
                    xlWorkbook.Close(0);
                    xlApp.Quit();
                }
            }
        }