//Конструктор для параметров ручного ввода public Signal(string codeObject, DataType dataType, string sourceName) { ObjectSignal = new ObjectSignal(codeObject); Code = "руч"; FullCode = codeObject + ".руч"; DataType = dataType; InUseSource = true; SourceName = sourceName; Default = true; }
//Загрузить список сигналов, возвращает ошибку или "" public string LoadSignals() { StartAtom(Atom.LoadSignals); CountsToZero(); if (State == State.Closed) { AddError("Копилятор уже был закрыт"); } else if (State == State.Empty) { AddError("Проект не загружен"); } else { try { var objectsId = new DicI <ObjectSignal>(); Signals.Clear(); SignalsList.Clear(); //using (var db = new DaoDb(_projectFile)) using (var db = new DaoDb(_objectsFile)) //ab\ { using (var reco = new ReaderAdo(db, "SELECT CodeObject, NameObject, TagObject, ObjectId, CommName FROM Objects ORDER BY ObjectId")) { AddEvent("Открыт рекордсет объектов"); Procent = 5; while (reco.Read()) { var curo = new ObjectSignal(reco, false); Objects.Add(curo.Code, curo); objectsId.Add(curo.Id, curo); } AddEvent("Объекты загружены"); } Thread.Sleep(50); Procent = 20; using (var recs = new ReaderAdo(db, "SELECT ObjectId, Default, CodeSignal, NameSignal, Units, DataType, ConstValue, SourceName, ReceiverName, Inf, FullCode FROM Signals ORDER BY ObjectId, SignalId")) { int i = 0, n = recs.RecordCount("SELECT Count(*) FROM Signals"); Procent = 30; AddEvent("Открыт рекордсет сигналов"); if (n != 0) { while (recs.Read()) { var sig = new Signal(recs, objectsId, false); SignalsList.Add(sig); Signals.Add(sig.FullCode, sig); if (sig.Default && objectsId.ContainsKey(sig.ObjectId)) { Signals.Add(objectsId[sig.ObjectId].Code, sig); } if (n > 20 && i % (n / 15) == 0) { Procent = (i++ *70) / n + 30; } } } } AddEvent("Сигналы загружены"); } } catch (Exception ex) { //ab //AddError("Ошибка загрузки сигналов", ex); AddError("Ошибка загрузки сигналов: " + ex.Message, ex); //\ab } } return(FinishAtom(State.Signals, State.Project, "Проект: " + _code + @"; Сигналов: " + SignalsList.Count)); }
//Проверка таблицы сигналов public string CheckSignals(bool onlyInUse = false) { StartAtom(Atom.CheckSignals); CountsToZero(); var objectsId = new DicI <ObjectSignal>(); var signals = new DicS <Signal>(); _objects.Clear(); try { if (State == State.Closed) { AddError("Копилятор уже был закрыт"); } else if (State == State.Empty) { AddError("Проект не загружен"); } else { //using (var reco = new RecDao(_projectFile, "SELECT CodeObject, NameObject, TagObject, ObjectId, CommName, ErrMess FROM Objects ORDER BY ObjectId")) using (var reco = new RecDao(_objectsFile, "SELECT CodeObject, NameObject, TagObject, ObjectId, CommName, ErrMess FROM Objects ORDER BY ObjectId")) //ab\ { Procent = 10; while (reco.Read()) { var ob = new ObjectSignal(reco, true); objectsId.Add(ob.Id, ob); if (!_objects.ContainsKey(ob.Code)) { _objects.Add(ob.Code, ob); } else { ob.ErrMess += "Повтор кода объекта (" + ob.Code + "); "; reco.Put("ErrMess", ob.ErrMess); _objects[ob.Code].ErrMess += "Повтор кода объекта (" + ob.Code + "); "; } } Procent = 25; using (var recs = new RecDao(reco.DaoDb, "SELECT ObjectId, Signals.Default, CodeSignal, NameSignal, Units, Signals.DataType, ConstValue, Signals.SourceName, Signals.ReceiverName, Signals.Inf, Signals.FullCode AS FullCode, Signals.ErrMess" + (!onlyInUse ? "" : ", SignalsInUse.FullCode AS FullCodeInUse") + " FROM Signals" + (!onlyInUse ? "" : " LEFT JOIN SignalsInUse ON Signals.FullCode=SignalsInUse.FullCode "))) { Procent = 35; while (recs.Read()) { var sig = new Signal(recs, objectsId, true); if (onlyInUse) { sig.InUse = !recs.GetString("FullCodeInUse").IsEmpty(); } objectsId[sig.ObjectId].InUse |= sig.InUse; if (signals.ContainsKey(sig.FullCode)) { sig.ErrMess += "Повтор полного кода сигнала (" + sig.FullCode + "); "; } else { signals.Add(sig.FullCode, sig); } if (sig.ErrMess != "") { recs.Put("ErrMess", sig.ErrMess, true); if (sig.InUse || !onlyInUse) { SignalsErrorsCount++; } objectsId[sig.ObjectId].ErrorInSignals = true; } } } Procent = 80; reco.MoveFirst(); while (!reco.EOF) { var ob = objectsId[reco.GetInt("ObjectId")]; if (ob.DefalutsCount == 0) { ob.ErrMess += "Объект не содержит сигналов по умолчанию; "; } if (ob.DefalutsCount >= 2) { ob.ErrMess += "Объект содержит более одного сигнала по умолчанию; "; } if (ob.ErrorInSignals) { ob.ErrMess += "Ошибки в сигналах; "; } if (ob.ErrMess != "") { reco.Put("ErrMess", ob.ErrMess); if (!onlyInUse || ob.InUse) { ObjectsErrorsCount++; } } reco.MoveNext(); } } } } catch (Exception ex) { return(ex.MessageError("Ошибка при проверке сигналов")); } return(FinishAtom(State.Project, State.Project, "Проект: " + _code + "; Объектов с ошибками: " + ObjectsErrorsCount + "; Сигналов с ошибками: " + SignalsErrorsCount)); }