//Чтение иформации по проекту из файла проекта public void ReadProject() { ReadSysTabl(true); Procent = 5; if (IsError) { return; } if (ThreadCalc.IsReadSources || ThreadCalc.IsWriteReceivers) { Start(ReadSignals, 5, 15); if (IsError) { return; } if (ThreadCalc.ImitMode != ImitMode.NoImit && Imitator != null) { using (Start(15, 25)) Imitator.PrepareSignals(_signalsCodes); } if (IsError) { return; } Start(JoinSignals, 25, 30); } if (!Start(ReadCalcParams, 30, 75)) { return; } //if (ThreadCalc.IsWriteArchives || ThreadCalc.IsWriteVed) ThreadCalc.Start(ReadArchiveParams, 75); }
//Загрузка SysTabl проекта, needCompilation = true - ругается, если проект не скомпилирован public void ReadSysTabl(bool needCompilation) { try { using (var sys = new SysTabl(File)) { Code = sys.SubValue("ProjectInfo", "Project"); Name = sys.SubValue("ProjectInfo", "ProjectName"); Description = sys.SubValue("ProjectInfo", "ProjectDescription"); VedTag = sys.Tag("VedTag"); if (needCompilation) { Interpolation = sys.SubValue("ProjectInfo", "Interpolation").ToInterpolation(); LastChange = DateTime.Parse(sys.SubValue("CompileStatus", "LastTimeCompile")); } IsMoments = sys.SubValue("ArchiveOptions", "IsMoments") == "True"; IsPeriodic = sys.SubValue("ArchiveOptions", "IsPeriodic") == "True"; IsAbsolute = sys.SubValue("ArchiveOptions", "IsAbsolute") == "True"; IsPrevAbs = sys.SubValue("ArchiveOptions", "IsPrevAbs") == "True"; IsLastBase = sys.SubValue("ArchiveOptions", "IsLastBase") == "True"; IsLastHour = sys.SubValue("ArchiveOptions", "IsLastHour") == "True"; IsLastDay = sys.SubValue("ArchiveOptions", "IsLastDay") == "True"; IsManyBase = sys.SubValue("ArchiveOptions", "IsManyBase") == "True"; IsManyHour = sys.SubValue("ArchiveOptions", "IsManyHour") == "True"; IsManyDay = sys.SubValue("ArchiveOptions", "IsManyDay") == "True"; IsManyMoments = sys.SubValue("ArchiveOptions", "IsManyMoments") == "True"; } } catch (Exception ex) { ThreadCalc.AddError("Недопустимые настройки в файле проекта (SysTabl) или проект никогда не копилировался", ex, "Путь=" + File); } }
public ResultSaver(string projectProvider, ThreadCalc thread) { _projectProvider = projectProvider; _db = new DaoDb(thread.ResultFile); _rec = new RecDao(_db, "DebugParams"); _recv = new RecDao(_db, "DebugParamsValues"); _thread = thread; }
public Provider(IRecordRead rec, ThreadCalc thread) { ThreadCalc = thread; Type = rec.GetString("ProviderType"); ProviderType = Type.ToProviderType(); CanBeNotOtm = !ProviderType.IsProviderSource(); Name = rec.GetString("ProviderName"); Code = rec.GetString("ProviderCode"); Inf = rec.GetString("ProviderInf"); Otm = true; }
//Открывает рекордсет Projects, удаляет оттуда проект и закрывает public void DeleteFromDb() { try { DaoDb.Execute(General.ControllerFile, "DELETE * FROM Projects WHERE (ThreadId=" + Id + ") And (Project='" + Code + "')"); } catch (Exception ex) { ThreadCalc.AddError("Ошибка при удалении проекта из ControllerData", ex, Code); } }
//Создает копию провайдера public Provider Copy(ThreadCalc thread) { return(new Provider { ThreadCalc = thread, Type = Type, ProviderType = ProviderType, CanBeNotOtm = CanBeNotOtm, Name = Name, Code = Code, Inf = Inf, Otm = Otm, Codes = Codes }); }
public ExprFun(string[] s, ThreadCalc thread) : base(s) { _thread = thread; string fname = s[1];//Имя делегата for (int k = 3; k < s.Length; k++) { if (s[k][0] != '$') { fname += s[k].Substring(1); } } Fun = thread.FunsDic[fname]; DataType = s[2].ToDataType(); }
public Fun(IRecordRead rec, ThreadCalc thread) { string name = rec.GetString("Name"); string synonym = rec.GetString("Synonym"); Code = rec.GetString("Code") ?? (synonym ?? name).ToLower(); string s = Code; for (int i = 1; i < 10 && rec.GetString("Operand" + i) != null; i++) { s = s + rec.GetString("Operand" + i).ToDataType().ToLetter(); } MethodInfo met = typeof(Funs).GetMethod(s); switch (rec.GetString("CodeType")) { case "scalar": CodeType = FunCodeType.Scalar; if (met != null) { ScalarDelegate = (Funs.ScalarDelegate)System.Delegate.CreateDelegate(typeof(Funs.ScalarDelegate), thread.Funs, met); } break; case "list": CodeType = FunCodeType.List; if (met != null) { ListDelegate = (Funs.ListDelegate)System.Delegate.CreateDelegate(typeof(Funs.ListDelegate), thread.Funs, met); } break; case "array": CodeType = FunCodeType.Array; if (met != null) { ArrayDelegate = (Funs.ArrayDelegate)System.Delegate.CreateDelegate(typeof(Funs.ArrayDelegate), thread.Funs, met); } break; case "operator": CodeType = FunCodeType.Operator; break; } thread.FunsDic.Add(s, this); }
//Открывает рекордсет Projects, записывает туда проект и закрывает public void AddToDb() { try { using (var rec = new RecDao(General.ControllerFile, "SELECT * FROM Projects WHERE (ThreadId=" + Id + ")")) { if (!rec.FindFirst("Project", Code)) { rec.AddNew(); } ToRecordset(rec); } } catch (Exception ex) { ThreadCalc.AddError("Ошибка при записи проекта в ControllerData", ex, Code); } }
//Создание проекта по указанному файлу file в потоке thread public Project(string file, ThreadCalc thread) { ThreadCalc = thread; File = file; Otm = true; //Проверка правильности проекта if (!DbVersion.IsProject(File)) { thread.AddError("Указан недопустимый файл проекта", null, "Путь=" + File); return; } if (thread.ApplicationType == ApplicationType.Controller) {//Обновление версии файла проекта var vsyn = new DbVersion(); vsyn.UpdateProjectVersion(File, false); } ReadSysTabl(false); }
public Grafic(IRecordRead recg, ThreadCalc thread) : base(recg.GetInt("Dimension"), 0) { Code = recg.GetString("Code"); GraficType = recg.GetString("GraficType").ToGraficType(); ThreadCalc = thread; while (!recg.EOF && recg.GetString("Code").ToLower() == Code.ToLower()) { try { ReadPoint(recg); recg.Read(); } catch (Exception ex) { thread.AddError("Ошибка загрузки графика", ex, "График=" + Code); } } }
//Загрузка списка провайдеров public void ReadProviders() { try { Providers.Clear(); using (var rec = new ReaderAdo(File, "SELECT * FROM Providers WHERE (ProviderType <> '" + "Коммуникатор" + "')")) { while (rec.Read()) { var p = new Provider(rec, ThreadCalc); try { p.Codes = General.ProviderConfigs[p.Code].JointProviders; } catch (Exception ex) { AddError("Не установлен провайдер", ex, p.Code); } if (!ThreadCalc.ProvidersDic.ContainsKey(p.Name)) { Providers.Add(p.Name, p); ThreadCalc.ProvidersDic.Add(p.Name, p); p.Projects.Add(Code); if (p.Code == "HandInputSource" || p.Code == "HandInputSqlSource") { HandInputProvider = p; } AddEvent("Загружен провайдер"); } else { var pr = ThreadCalc.ProvidersDic[p.Name]; Providers.Add(p.Name, pr); pr.Projects.Add(Code); } } } } catch (Exception ex) { ThreadCalc.AddError("Ошибка чтения списка провайдеров из проекта", ex, "Проект=" + Code); } }
//Запуск атомарной комманды protected Command StartAtom(Atom atom, double start = 0, double finish = 100, string context = "", string objectName = "") { return(ThreadCalc.StartAtom(atom, start, finish, context.IsEmpty() ? Context : context, objectName.IsEmpty() ? LoggerObject : objectName)); }
public SingleCalc(ThreadCalc thread) { ThreadCalc = thread; ReadFunctions(); }
public PeriodicCalc(ThreadCalc thread) { ThreadCalc = thread; ReadFunctions(); }
internal ProviderApp(IRecordRead rec, ThreadCalc thread) : base(rec, thread) { }
//Загрузка проекта из Projects public Project(IRecordRead rec, ThreadCalc thread) : this(rec.GetString("ProjectFile"), thread) { Id = rec.GetInt("ProjectId"); Otm = rec.GetBool("Otm"); }
protected ExternalThreadLogger(ThreadCalc thread) : base(thread) { ThreadCalc = thread; }
//Запуск комманды отображения и выполнение действия action, возвращает false, если ошибка protected bool StartView(ViewAtom viewAtom, Action action, bool useSubLog) { return(ThreadCalc.StartView(viewAtom, action, useSubLog)); }
//Запуск комманды отображения protected Command StartView(ViewAtom viewAtom, bool useSubLog) { return(ThreadCalc.StartView(viewAtom, useSubLog)); }
//Запуск атомарной комманды и выполнение действия action, возвращает false, если ошибка protected bool StartAtom(Atom atom, Action action, double start = 0, double finish = 100, string context = "", string objectName = null) { return(ThreadCalc.StartAtom(atom, action, start, finish, context.IsEmpty() ? Context : context, objectName.IsEmpty() ? LoggerObject : objectName)); }
//Чтение списка расчетных параметров private void ReadCalcParams() { CalcParamsCode.Clear(); CalcParamsId.Clear(); CalcSubParamsId.Clear(); Grafics.Clear(); AddEvent("Загрузка графиков"); using (var db = new DaoDb(File)) { try { const string stSql = "SELECT GraficsList.Code, GraficsList.Dimension, GraficsList.GraficType, GraficsValues.X1, GraficsValues.X2, GraficsValues.X3, GraficsValues.X4, GraficsValues.X5, GraficsValues.X6, GraficsValues.X7, GraficsValues.X8 " + "FROM GraficsList INNER JOIN GraficsValues ON GraficsList.GraficId = GraficsValues.GraficId " + "ORDER BY GraficsList.Code, GraficsValues.X8, GraficsValues.X7, GraficsValues.X6, GraficsValues.X5, GraficsValues.X4, GraficsValues.X3, GraficsValues.X2, GraficsValues.X1;"; using (var recg = new ReaderAdo(db, stSql)) { //Считывание графиков recg.Read(); while (!recg.EOF) { var gr = new Grafic(recg, ThreadCalc); Grafics.Add(gr.Code, gr); } } } catch (Exception ex) { AddError("Ошибка загрузки графика", ex); } Procent = 10; AddEvent("Загрузка параметров"); try { const string stSql = "SELECT * FROM CalcParams WHERE (TaskOn = True) AND (CalcOn = True)"; using (var rec = new ReaderAdo(db, stSql)) while (rec.Read()) { var calc = new CalcParam(this, rec, false); calc.FullCode = calc.Code; CalcParamsId.Add(calc.Id, calc); CalcParamsCode.Add(calc.Code, calc); if (IsError) { return; } } } catch (Exception ex) { AddError("Список расчетных параметров загружен с ошибками, необходима повторная компиляция расчета", ex); } Procent = 40; AddEvent("Загрузка подпараметров"); try { const string stSql = "SELECT CalcSubParams.* FROM CalcParams INNER JOIN CalcSubParams ON CalcParams.CalcParamId = CalcSubParams.OwnerId" + " WHERE (CalcParams.TaskOn=True) AND (CalcParams.CalcOn=True) AND (CalcSubParams.CalcOn=True)"; using (var recp = new ReaderAdo(db, stSql)) while (recp.Read()) { var calc = new CalcParam(this, recp, true); CalcSubParamsId.Add(calc.Id, calc); calc.Owner = CalcParamsId[recp.GetInt("OwnerId")]; calc.Owner.Methods.Add(calc.Code, calc); calc.FullCode = calc.Owner.FullCode + "." + calc.Code; if (IsError) { return; } } } catch (Exception ex) { AddError("Список расчетных параметров загружен с ошибками, необходима повторная компиляция расчета", ex); } Procent = 60; } AddEvent("Загрузка справочных таблиц"); Tabls.Clear(); using (var db = new DaoDb(File).ConnectDao()) foreach (TableDef t in db.Database.TableDefs) { if (t.Name.StartsWith("Tabl_")) { var tabl = new Tabl(int.Parse(t.Name.Substring(5))); Tabls.Add(tabl.Num, tabl); tabl.FieldsCount = 0; foreach (Field f in t.Fields) { if (f.Name.StartsWith("Val_")) { int fnum = int.Parse(f.Name.Substring(4)); if (fnum >= tabl.FieldsCount) { tabl.FieldsCount = fnum + 1; } } } TableDef st = db.Database.TableDefs["Sub" + t.Name]; tabl.SubFieldsCount = 0; foreach (Field f in st.Fields) { if (f.Name.StartsWith("SubVal_")) { int fnum = int.Parse(f.Name.Substring(7)); if (fnum >= tabl.SubFieldsCount) { tabl.SubFieldsCount = fnum + 1; } } } } } if (Tabls.Count > 0) { using (var db = new DaoDb(File)) foreach (var t in Tabls.Values) { using (var rect = new ReaderAdo(db, "SELECT * FROM Tabl_" + t.Num)) while (rect.Read()) { new TablParam().ParamFromRec(t, rect); } using (var rect = new ReaderAdo(db, "SELECT * FROM SubTabl_" + t.Num)) while (rect.Read()) { new TablParam().SubParamFromRec(t, rect); } } } Procent = 75; AddEvent("Разбор выражений"); try { foreach (var cp in CalcParamsId.Values) { if (!Start(cp.Parse)) { break; } } } catch (Exception ex) { ThreadCalc.AddError("Список расчетных параметров загружен с ошибками, необходима повторная компиляция расчета", ex); } }