public mCategory() { Keys = new ObservableCollection<mKey>(); SelectedKey = null; S7items = new ObservableCollection<mSymbolTableItem>(); DB = new mDataBlock(); }
public mCategory(int initID, string initName, string initDescription) { Name = initName; Description = initDescription; Keys = new ObservableCollection<mKey>(); SelectedKey = null; S7items = new ObservableCollection<mSymbolTableItem>(); DB = new mDataBlock(); }
public void addDB(mDataBlock newDB) { DB = newDB; }
/// <summary> /// Создание списка элементов с неповторяющимся номеров блока данных /// </summary> /// <returns></returns> private bool generate_UniqDBList() { bool isGenerated = false; if (!isEmptyCategories()) { List<String> SysNumList = new List<string>(); List<mSymbolTableItem> uniqSymbolsList = new List<mSymbolTableItem>(); foreach (mCategory cat in this.categories.OrderBy(k => k.Id)) { foreach (mSymbolTableItem el in cat.S7items.OrderByDescending(key => key.DB_ArrayIndex)) { if (!SysNumList.Contains(el.DB_FullName)) { SysNumList.Add(el.DB_FullName); uniqSymbolsList.Add(el); isGenerated = true; } } SysNumList.Clear(); foreach (mSymbolTableItem el in uniqSymbolsList.OrderBy(k => k.SystemNumber)) { mDataBlock db = new mDataBlock(); // 11Y if (el.DB_ArrayName.Equals("PID")) { db.SymbolName = "PID" + el.Codename; db.Title = el.SignalComment; } else { db.SymbolName = el.SystemNumber + cat.DB.Symbol; // Sensors 4-20 db.Title = cat.Description; } // DB111 db.FullName = el.DB_FullName; // SNS_UDT db.UDT_Name = cat.DB.UDT_Name; // Rounded size of DB Array[] db.MaxArrayIndex = roundToFive(el.DB_ArrayIndex); // SNS db.ArrayName = cat.DB.ArrayName; uniqDBlist.Add(db); isGenerated = true; } uniqSymbolsList.Clear(); } } return isGenerated; }
/// <summary> /// Генерация текста исходного кода в синтаксисе STL /// для последующего создания Instance DB на базе FB1 программе ПЛК /// </summary> /// <returns></returns> private List<String> generateSTL_instanceDB(mDataBlock db) { List<string> list = new List<string>(); list.Add("DATA_BLOCK " + db.FullName); list.Add("TITLE =" + db.Title); list.Add("{ S7_techparam := 'S7WRSAPX.Application' }"); list.Add("AUTHOR: Kratovi4"); list.Add("FAMILY : STDCONT"); list.Add("VERSION : 1.0"); list.Add("FB 1"); list.Add("BEGIN"); list.Add("END_DATA_BLOCK"); list.Add("\r\n"); return list; }
/// <summary> /// Генерация текста исходного кода в синтаксисе STL /// для последующего создания Data Block в программе ПЛК /// </summary> /// <returns></returns> private List<String> generateSTL_DB(mDataBlock db) { List<string> list = new List<string>(); list.Add("DATA_BLOCK " + db.FullName); list.Add("TITLE =" + db.Title); list.Add("AUTHOR: Kratovi4"); list.Add("VERSION : 2.0"); list.Add("STRUCT"); list.Add(db.ArrayName + ": ARRAY [1 .. " + db.MaxArrayIndex + "] OF //Array"); list.Add("\"" + db.UDT_Name + "\";"); list.Add("END_STRUCT ;"); list.Add("BEGIN"); list.Add("END_DATA_BLOCK"); list.Add("\r\n"); return list; }
private string generateSCL_LogicCode(mDataBlock db) { string s = ""; // we need something like this: Logic_SNS(SENSOR:="11A".SNS[i]); // 20 s = "Logic_"; s += db.ArrayName + "(" + db.ArrayName + ":="; s += "\"" + db.SymbolName + "\""; s += "." + db.ArrayName + "[i]"; if (db.ArrayName.Equals("SNS") | db.ArrayName.Equals("SNC")) { s += "); // " + db.MaxArrayIndex.ToString(); } else { s += ",Clock:=clk); // " + db.MaxArrayIndex.ToString(); } return s; }