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); } }
/// <summary> /// Заменяет во всех видах маски перемнных заводских установок их значениями /// </summary> public void ConvertViewsTextsForEmbeddedVars(List <ControllerEmbeddedVar> EmbeddedVars) { foreach (Row row in this.rows) { foreach (View view in row.Views) { RelkonPultModel.ConvertViewTextForEmbeddedVars(view, EmbeddedVars); } } }
/// <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); }
/// <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); }