Beispiel #1
0
        /// <summary>
        /// Создание символьной таблицы из одномерной коллекции строк (колонки таблицы)
        /// </summary>
        /// <param name="fromList">Колонка таблицы</param>
        public cSymbolTable(List<string> fromList)
        {
            Symbols = new ObservableCollection<mSymbolTableItem>();

            int i = 1;
            foreach (string line in fromList)
            {
                mSymbolTableItem item = new mSymbolTableItem();

                item.SignalName = line;
                Symbols.Add(item);

                i++;
            }
        }
Beispiel #2
0
        /// <summary>
        /// Создание символьной таблицы из массива, соответствующего таблице Excel
        /// </summary>
        /// <param name="arr">Символьная таблица в виде массива массива строк [4,xxx]</param>
        public cSymbolTable(String[,] arr)
        {
            Symbols = new ObservableCollection<mSymbolTableItem>();

               string s =  arr[1,1];

               for (int row = 0; row < arr.GetLength(0); row++)
            {
               mSymbolTableItem item = new mSymbolTableItem();

               item.SignalName = arr[row, 0];
               item.SignalAdress = arr[row, 1];
               item.SignalDataType = arr[row, 2];
               item.SignalComment = arr[row, 3];
               item.SignalType = arr[row, 4];
               item.Codename = arr[row,5];
               item.SystemNumber = arr[row, 6];
               item.DeviceType = arr[row, 7];
               item.DeviceNumber = arr[row, 8];
               item.Etc = arr[row,9];
               item.DeviceTag = arr[row, 10];

               item.DB_FullName = item.SystemNumber;

               try
               {
                   item.DB_ArrayIndex = int.Parse(arr[row, 8]);
               }
               catch (Exception e)
               {
                   item.DB_ArrayIndex = 0;
               }

               Symbols.Add(item);
            }
        }
Beispiel #3
0
        /// <summary>
        /// Поиск на листе Excel по частичным текстовым совпадениям строк и ключей
        /// </summary>
        /// <param name="sourceSheet">Лист для поиска, источник</param>
        /// <param name="key">Ключ для текстового поиска</param>
        /// <returns>Список строк, преобразованный в список элементов класса символьной таблицы</returns>
        private List<mSymbolTableItem> OneClick_SearchKey(string sourceSheet, string key)
        {
            Excel.Sheets sheets = excelbook.Worksheets;
            Excel.Worksheet sheet = (Excel.Worksheet)sheets.get_Item(sourceSheet);
            sheet.Select();

            Excel.Range currentFind = null;
            Excel.Range firstFind = null;
            Excel.Range oneRow = null;

            List<mSymbolTableItem> s7_list = new List<mSymbolTableItem>();

            //------ Поиск ------------------------------------------
            currentFind = excelapp.Columns.Find(key, Type.Missing,
                                                Excel.XlFindLookIn.xlValues,
                                                Excel.XlLookAt.xlPart,
                                                Excel.XlSearchOrder.xlByRows,
                                                Excel.XlSearchDirection.xlNext, false);

            while (currentFind != null) //&(final<10) )
            {

                // Keep track of the first range you find.
                if (firstFind == null)
                {
                    firstFind = currentFind;
                }

                // If you didn't move to a new range, you are done.
                else if (currentFind.get_Address(Type.Missing, Type.Missing, Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing)
                      == firstFind.get_Address(Type.Missing, Type.Missing, Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing))
                {
                    break;
                }

                int r = currentFind.Row;
                mSymbolTableItem s7_item = new mSymbolTableItem();

                // Строка символьной таблицы, [А234:K234]
                oneRow = sheet.Range["A" + r.ToString() + ":K" + r.ToString()];
                //s7_item = generateListFromRange(oneRow);

                s7_list.Add(s7_item);

                currentFind.EntireRow.Clear();
                currentFind = excelapp.Columns.FindNext(currentFind);
            }
            return s7_list;
        }
Beispiel #4
0
        private bool isItemMatchKey(mSymbolTableItem item, string key)
        {
            bool isMatch = false;

            if (item.SignalType.Equals(key)) return true;
            if (item.SignalComment.Contains(key)) return true;

            return isMatch;
        }
Beispiel #5
0
        /// <summary>
        /// Генерация текста исходного кода для заданного элемента списка сигналов
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        private ObservableCollection<string> return_PeripheryCode(mSymbolTableItem item)
        {
            ObservableCollection<string> p = new ObservableCollection<string>();

            string load_path = item.DB_FullName + "." + item.DB_ArrayName + "[" + item.DB_ArrayIndex + "]." + item.DeviceTag + ";";
            string load_symbol = "\"" + item.SignalName + "\";";
            string load_A = "A ";
            string load_AN = "AN ";
            string load_eq = "= ";
            string load_L = "L ";
            string load_T = "T ";

            string t = item.SignalType;

            switch (t)
            {
                case "Q":
                    p.Add(load_A + load_path);
                    p.Add(load_eq + load_symbol);
                    break;
                case "I":
                    if (item.DeviceType.Equals("Y"))
                    {
                        p.Add(load_AN + load_symbol);
                    }
                    else
                        p.Add(load_A + load_symbol);
                    p.Add(load_eq + load_path);
                    break;
                case "IW":
                    p.Add(load_L + load_symbol);
                    p.Add(load_T + load_path);
                    break;
                case "QW":
                    //p.Add(load_L + load_path);
                    p.Add(load_L + item.DB_FullName + ".LMN;");
                    p.Add(load_T + load_symbol);
                    break;
                default:
                    p.Add("// There no automated generated code for " + item.Codename);
                    p.Add("NOP 0");
                    p.Add("// ");
                    break;
            }

            return p;
        }