コード例 #1
0
ファイル: CodeGenerator.cs プロジェクト: atikbif/Relkon6
        public int DispetcherPeriod;                  // период работы диспетчера

        public CodeGenerator(ControllerProgramSolution Solution)
        {
            this.solution  = Solution;
            this.codeModel = Solution.codeModel;
            if (!String.IsNullOrEmpty(Solution.PultFileName))
            {
                this.pultModel = RelkonPultModel.FromFile(Solution.PultFileName);
            }
        }
コード例 #2
0
ファイル: PultModel.cs プロジェクト: atikbif/Relkon6
 /// <summary>
 /// Заменяет во всех видах маски перемнных заводских установок их значениями
 /// </summary>
 public void ConvertViewsTextsForEmbeddedVars(List <ControllerEmbeddedVar> EmbeddedVars)
 {
     foreach (Row row in this.rows)
     {
         foreach (View view in row.Views)
         {
             RelkonPultModel.ConvertViewTextForEmbeddedVars(view, EmbeddedVars);
         }
     }
 }
コード例 #3
0
ファイル: PultModel.cs プロジェクト: atikbif/Relkon6
        /// <summary>
        /// Возвращает модель пульта из указанного fpr-файла
        /// </summary>
        //private static RelkonPultModel GetPultModelFromFpr(string FileName)
        //{
        //    RelkonPultModel res = new RelkonPultModel(PultType.Pult2x16);
        //    res.rows[0].Views.Clear();
        //    res.rows[1].Views.Clear();
        //    StreamReader reader = new StreamReader(FileName, Encoding.Default);
        //    reader.ReadLine(); // скорость
        //    reader.ReadLine(); // протокол
        //    reader.ReadLine(); // пароль на чтение
        //    reader.ReadLine(); // пароль на запись
        //    int K = reader.ReadLine() == "1" ? 0 : 3; // K52 - 16 переменных, K51ED2 - 64; "1" - K51ED2
        //    for (int i = K; i < 4; i++) // переменные заводских установок
        //    {
        //        for (int j = 0; j < 16; j++)
        //            reader.ReadLine();
        //    }
        //    for (int i = 0; i < 175; i++) // пропуск 175 строк
        //        reader.ReadLine();
        //    string sr = reader.ReadLine(); // номер контроллера
        //    for (int i = 0; i < 4; i++) // пропуск 4 строк
        //        reader.ReadLine();
        //    for (int i = 0; i < 200; i++)
        //    {
        //        for (int j = 0; j < 2; j++)
        //        {
        //            res[j].Views.Add(new View());
        //            res[j][i].Text = new string(' ', 16);
        //        }
        //    }
        //    string s = "";
        //    int maxTop = 0;   // максимальный номер вида вехней строки
        //    int maxBottom = 0; // максимальный номер вида нижней строки
        //    List<ControllerEmbeddedVar> evars = RelkonPultModel.GetEmbeddedVarsFromFpr(FileName);
        //    while ((s = reader.ReadLine()) != null)
        //    {
        //        Match m = null;
        //        while ((m = Regex.Match(s, @".*(.*)\:.*Сегмент (\d)\..*Вид (\d+)", RegexOptions.IgnoreCase)).Value == "")
        //            s = reader.ReadLine();
        //        char lineType = reader.ReadLine().ToLower()[1];
        //        for (int i = 0; i < 4; i++)
        //            reader.ReadLine();
        //        string text = reader.ReadLine(); // текст сегмента
        //        if (text.Length > 4)
        //            text = text.Substring(0, 4);
        //        text += new string(' ', 4 - text.Length);
        //        string varName = reader.ReadLine(); // имя переменной
        //        int seg = int.Parse(m.Groups[2].Value) - 1;
        //        int view = int.Parse(m.Groups[3].Value);
        //        List<View> CurrentList = res[0].Views;
        //        if (lineType == 'v')
        //        {
        //            if (maxBottom < view)
        //                maxBottom = view;
        //            CurrentList = res[1].Views;
        //        }
        //        else
        //        {
        //            if (maxTop < view)
        //                maxTop = view;
        //        }
        //        if (varName == "текст")
        //        {
        //            // в сегменте нет переменной
        //            CurrentList[view].Text = CurrentList[view].Text.Remove(seg * 4, 4).Insert(seg * 4, text);
        //            for (int i = 0; i < 5; i++)
        //                reader.ReadLine();
        //        }
        //        else
        //        {
        //            //в сегменте есть переменная
        //            Match m1 = Regex.Match(text, @"(\d+(?:[\.|,]\d+)?)[^\d]*\b");
        //            if (m1.Success)
        //            {
        //                CurrentList[view].Text = CurrentList[view].Text.Remove(seg * 4, 4).Insert(seg * 4, text);
        //                // Получение параметров переменной
        //                int position = seg * 4 + m1.Groups[1].Index;
        //                int length = m1.Groups[1].Value.Length;
        //                string mask = m1.Groups[1].Value;
        //                bool hasSign = reader.ReadLine() == "1";
        //                for (int i = 0; i < 3; i++)
        //                    reader.ReadLine();
        //                bool readOnly = reader.ReadLine() == "0";
        //                varName = varName.Substring(1);
        //                CurrentList[view].Vars.Add(new PultVar(varName, mask, position, hasSign, readOnly));
        //                s = "";
        //            }
        //            else
        //            {
        //                CurrentList[view].Text = CurrentList[view].Text.Remove(seg * 4, 4).Insert(seg * 4, text);
        //                for (int i = 0; i < 5; i++)
        //                    reader.ReadLine();
        //            }
        //        }
        //        RelkonPultModel.ConvertViewTextForEmbeddedVars(CurrentList[view], evars);
        //    }
        //    reader.Close();
        //    for (int i = maxTop + 1; i < 200; i++)
        //        res[0].Views.RemoveAt(maxTop + 1);
        //    for (int i = maxBottom + 1; i < 200; i++)
        //        res[1].Views.RemoveAt(maxBottom + 1);
        //    for (int i = 0; i < 2; i++)
        //    {
        //        if (res[i].Views.Count == 0)
        //            res[i].Views.Add(new View());
        //    }
        //    return res;
        //}
        /// <summary>
        /// Возращает модель пульта из указанного файла формата версии 37
        /// </summary>
        //private static RelkonPultModel GetPultModelFromPlt37(string FileName)
        //{
        //    // Заменяем спецсимволы пробелами
        //    string fs = File.ReadAllText(FileName, Encoding.Default);
        //    fs = Regex.Replace(fs, "\\&#x[0-9A-F]+;", "");
        //    File.WriteAllText(FileName, fs, Encoding.Default);
        //    // Парсинг XML
        //    XPathDocument xpDoc = new XPathDocument(FileName);
        //    XPathNavigator xpNav = ((IXPathNavigable)xpDoc).CreateNavigator();
        //    XPathNodeIterator xpList = xpNav.Select("/fpultProject");
        //    xpList.MoveNext();
        //    string processor = xpList.Current.GetAttribute("processor", "");
        //    RelkonPultModel res = new RelkonPultModel(PultType.Pult2x16);
        //    if (processor == "Fujitsu")
        //        res = new RelkonPultModel(PultType.Pult4x20);
        //    foreach (Row r in res.rows)
        //        r.Views.Clear();
        //    xpList = xpNav.Select("/fpultProject/row");
        //    List<ControllerEmbeddedVar> evars = RelkonPultModel.GetEmbeddedVarsFromPlt37(FileName);
        //    while (xpList.MoveNext())
        //    {
        //        int rowIndex = int.Parse(xpList.Current.GetAttribute("index", ""));
        //        XPathNodeIterator xpViewList = xpList.Current.SelectChildren("view", "");
        //        while (xpViewList.MoveNext())
        //        {
        //            View view = new View();
        //            view.Text = xpViewList.Current.GetAttribute("value", "").Substring(4);
        //            XPathNodeIterator xpVarList = xpViewList.Current.SelectChildren("var", "");
        //            while (xpVarList.MoveNext())
        //            {
        //                PultVar v = new PultVar();
        //                v.Name = xpVarList.Current.GetAttribute("address", "");
        //                if (v.Name[0] == '_')
        //                    v.Name = v.Name.Substring(1);
        //                v.ReadOnly = bool.Parse(xpVarList.Current.GetAttribute("readOnly", ""));
        //                v.HasSign = bool.Parse(xpVarList.Current.GetAttribute("hasSign", ""));
        //                v.Mask = xpVarList.Current.GetAttribute("format", "");
        //                v.Position = int.Parse(xpVarList.Current.GetAttribute("offset", ""));
        //                view.Vars.Add(v);
        //            }
        //            RelkonPultModel.ConvertViewTextForEmbeddedVars(view, evars);
        //            res[rowIndex].Views.Add(view);
        //        }
        //    }
        //    foreach(Row r in res.rows)
        //    {
        //        if (r.Views.Count == 0)
        //            r.Views.Add(new View());
        //    }
        //    return res;
        //}
        /// <summary>
        /// Возращает модель пульта из указанного файла формата версии 5
        /// </summary>
        private static RelkonPultModel GetPultModelFromPlt5(string FileName)
        {
            XmlSerializer   serializer = new XmlSerializer(typeof(RelkonPultModel));
            RelkonPultModel res        = null;

            using (StreamReader reader = new StreamReader(FileName, Encoding.GetEncoding("UTF-16")))
            {
                res = (RelkonPultModel)serializer.Deserialize(reader);
            }
            return(res);
        }
コード例 #4
0
ファイル: PultModel.cs プロジェクト: atikbif/Relkon6
        /// <summary>
        /// загружает модель пульта из указанного файла
        /// </summary>
        public static RelkonPultModel FromFile(string FileName)
        {
            RelkonPultModel res     = null;
            PultFileVersion version = RelkonPultModel.GetPultFileVersion(FileName);

            switch (version)
            {
            //case PultFileVersion.v35:
            //    res = RelkonPultModel.GetPultModelFromFpr(FileName);
            //    break;
            //case PultFileVersion.v37:
            //    res = RelkonPultModel.GetPultModelFromPlt37(FileName);
            //    break;
            case PultFileVersion.v50:
                res = RelkonPultModel.GetPultModelFromPlt5(FileName);
                break;
            }
            res.fileName = FileName;
            if (res.type == null)
            {
                res.type = PultType.GetPultType(res.rows.Count, res.rows[0].Views[0].Text.Length);
            }
            return(res);
        }