Exemple #1
0
 //Чтение иформации по проекту из файла проекта
 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);
 }
Exemple #2
0
 //Загрузка 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);
     }
 }
Exemple #3
0
 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;
 }
Exemple #4
0
 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;
 }
Exemple #5
0
 //Открывает рекордсет 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);
     }
 }
Exemple #6
0
 //Создает копию провайдера
 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
     });
 }
Exemple #7
0
        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();
        }
Exemple #8
0
        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);
        }
Exemple #9
0
 //Открывает рекордсет 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);
     }
 }
Exemple #10
0
 //Создание проекта по указанному файлу 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);
 }
Exemple #11
0
 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);
         }
     }
 }
Exemple #12
0
        //Загрузка списка провайдеров
        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);
            }
        }
Exemple #13
0
 //Запуск атомарной комманды
 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));
 }
Exemple #14
0
 public SingleCalc(ThreadCalc thread)
 {
     ThreadCalc = thread;
     ReadFunctions();
 }
Exemple #15
0
 public PeriodicCalc(ThreadCalc thread)
 {
     ThreadCalc = thread;
     ReadFunctions();
 }
Exemple #16
0
 internal ProviderApp(IRecordRead rec, ThreadCalc thread) : base(rec, thread)
 {
 }
Exemple #17
0
 //Загрузка проекта из Projects
 public Project(IRecordRead rec, ThreadCalc thread) : this(rec.GetString("ProjectFile"), thread)
 {
     Id  = rec.GetInt("ProjectId");
     Otm = rec.GetBool("Otm");
 }
Exemple #18
0
 protected ExternalThreadLogger(ThreadCalc thread) : base(thread)
 {
     ThreadCalc = thread;
 }
Exemple #19
0
 //Запуск комманды отображения и выполнение действия action, возвращает false, если ошибка
 protected bool StartView(ViewAtom viewAtom, Action action, bool useSubLog)
 {
     return(ThreadCalc.StartView(viewAtom, action, useSubLog));
 }
Exemple #20
0
 //Запуск комманды отображения
 protected Command StartView(ViewAtom viewAtom, bool useSubLog)
 {
     return(ThreadCalc.StartView(viewAtom, useSubLog));
 }
Exemple #21
0
 //Запуск атомарной комманды и выполнение действия 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));
 }
Exemple #22
0
        //Чтение списка расчетных параметров
        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);
            }
        }