public QueryInfo( EmeraDriver driver, SynchRequestDataDrv requestData, SynchParamsDataDrv requestParam, EmeraSharedSetting ss, EmeraContentSetting cs, DriverSetting driverSetting) { RequestData = requestData; RequestParam = requestParam; this.driver = driver; Request = new EmeraRequest(driver, driverSetting, driver.ReadTimeOutRequestMSec()); DriverSetting = driverSetting; DataBus = driver.Channel; Ss = ss; Cs = cs; NextPoint = new AccountNextPoint( TimeZoneMap.Local, timeOffset: TimeOffset.Level_1, useMin3: false, useMin30: ss.Enbl30min, useDay1: true, useMonth1: true, useYear1: false, archSync: ss.Arch.ToSch()); ElectroChannel = driver.ElectroChannel.ByBrowseName <ElectroChannel>(ElectroChannels.BN.ElectroChannel); }
public override ModeDataDrv IsReadIm(SynchRequestDataDrv request) { ModeDataDrv result = ModeDataDrv.Manual; var ss = request.GetSharedSetting <EmeraSharedSetting>(() => new EmeraSharedSetting()); if ((ss.EnblIm) && !ss.Im.IsEmpty()) { result |= ModeDataDrv.Auto; } return(result); }
public override SynchResponse ReadIm(SynchRequestDataDrv request, ReadImParamsDataDrv param) { var ss = request.GetSharedSetting <EmeraSharedSetting>(() => new EmeraSharedSetting()); var cs = request.GetContentSetting <EmeraContentSetting>(() => new EmeraContentSetting()); var drvSetting = request.GetDriverSetting(() => new DriverSetting()); EmeraRequest emera = new EmeraRequest(this, drvSetting, ReadTimeOutRequestMSec()); ImNextPoint nextPoint = new ImNextPoint(TimeZoneMap.Local, 0, imNextItem: new ImNextItem("im", ss.Im.ToSch())); using (var session = new PhysicalSessionIm <EmeraSynchState, ImNextPoint>(this, request, nextPoint)) { session.Open(); if (!session.LaunchPoint(nextPoint.GetItem("im"))) { return(session); } if (session.BeginOperation()) { InstantaneousValues iv; OperationResult resData = OperationResult.Good; if (DataBusSetting.StubData) { iv = new InstantaneousValues(true); } else { double koef; resData = emera.TryReadKoef(this.Channel, cs.Address, cs.Psw, out koef, out bool isHalfHour); if (resData.IsGood) { resData = emera.TryReadInstantaneousValues(this.Channel, cs.Address, cs.Psw, out iv); if (resData.IsGood) { iv.Calc(koef); ElectroChannel electroChannel = this.ElectroChannel.ByIndex <ElectroChannel>(0); iv.WriteTags(this.Storage, electroChannel, resData.Quality, DateTimeUtc.Now); } } } session.EndOperation(resData); Log.Trace.Write(1, (l) => l.Info(SR.READ_IM, resData.ToString())); } return(session); } }
public override SynchResponse WriteIm(SynchRequestDataDrv request, WriteImParamsDataDrv param) { throw new NotImplementedException(); }
public override ModeDataDrv IsWriteIm(SynchRequestDataDrv request) { return(ModeDataDrv.None); }
public override ModeDataDrv IsSynch(SynchRequestDataDrv request) { return(ModeDataDrv.All); }
public override SynchResponse Synch(SynchRequestDataDrv requestData, SynchParamsDataDrv requestParam) { Log.Trace.Write(1, (l) => l.Info(SR.SYNC_ARCH)); var info = new QueryInfo( this, requestData, requestParam, requestData.GetSharedSetting(() => new EmeraSharedSetting()), requestData.GetContentSetting(() => new EmeraContentSetting()), requestData.GetDriverSetting(() => new DriverSetting()) ); //Любая работа с устройством должна начинаться с открытия сессии using (var session = new PhysicalSession <EmeraSynchState, AccountNextPoint>(this, requestData, info.NextPoint)) { info.SetSession(session); //чтение времени session.OnReadDateTime = () => { return(IO.ReadDateTime(info)); }; //чтение серийного номера и т.д. session.OnReadPhysicalInfo = () => { return(IO.ReadPhysicalInfo(info)); }; if (info.Ss.EnblTimeCorr) { //записть времени session.OnWriteDateTime = (diff) => { return(IO.WriteDateTime(diff, info)); }; } //произвольные операции перед открытии сессии session.OnBeforeOpenSession = () => { return(IO.BeforeOpenSession(info)); }; session.AutoOpen = true; var eDef = info.ElectroChannel.Energy; var eDefCounter = info.ElectroChannel.Counter; /*if (session.LaunchPoint(info.NextPoint.Min3)) * { * Log.Trace.Info(1, SR.Read3Min); * IO.ReadInc( * info, * TimeStep.Minute_3.Round(info.NowTimeInZone), * TypeQuery.Power3min, * TypeInc.Min3, * eDef.Aplus.Min3, * eDef.Aminus.Min3, * eDef.Rplus.Min3, * eDef.Rminus.Min3, * EmeraRequest.Depth3Min, * requestParam.DeepSync); * if (info.Ss.EnblEvents) IO.ReadAllEvents(info); * }*/ #region if (session.LaunchPoint(info.NextPoint.Min30)) if (session.LaunchPoint(info.NextPoint.Min30)) { Log.Trace.Info(1, SR.Read30Min); IO.ReadInc( info, TimeStep.Minute_30.Round(info.NowTimeInZone), TypeQuery.SlicesEnergy, TypeInc.Min30, eDef.Aplus.Min30, eDef.Aminus.Min30, eDef.Rplus.Min30, eDef.Rminus.Min30, EmeraRequest.Depth30MinDefault, FineTuneUtils.ReadDeepSync30Local(FineTune, this, requestParam.DeepSync, EmeraRequest.Depth30MinDefault)); //if ((!info.Ss.Enbl3min) && (info.Ss.EnblEvents)) IO.ReadAllEvents(info); } #endregion #region if (session.LaunchPoint(info.NextPoint.Day1)) if (session.LaunchPoint(info.NextPoint.Day1)) { Log.Trace.Info(1, SR.ReadDay); /*IO.ReadInc( * info, * TimeStep.Day_1.Round(info.NowTimeInZone), * TypeQuery.Inc, * TypeInc.Day, * eDef.Aplus.Day1, * eDef.Aminus.Day1, * eDef.Rplus.Day1, * eDef.Rminus.Day1, * EmeraRequest.DepthDay, * requestParam.DeepSync);*/ IO.ReadInc( info, TimeStep.Day_1.Round(info.NowTimeInZone) /*.AddDays(-1)*/, TypeQuery.Counter, TypeInc.Day, eDefCounter.Aplus.Day1, eDefCounter.Aminus.Day1, eDefCounter.Rplus.Day1, eDefCounter.Rminus.Day1, EmeraRequest.DepthDayCounter, requestParam.DeepSync, ETariff.NoTariff); #region if (info.Ss.EnblCounterTariff1) if (info.Ss.EnblCounterTariff1) { IO.ReadInc( info, TimeStep.Day_1.Round(info.NowTimeInZone) /*.AddDays(-1)*/, TypeQuery.Counter, TypeInc.Day, eDefCounter.Aplus.Day1Tariff1, eDefCounter.Aminus.Day1Tariff1, eDefCounter.Rplus.Day1Tariff1, eDefCounter.Rminus.Day1Tariff1, EmeraRequest.DepthDayCounter, requestParam.DeepSync, ETariff.Tariff1); } #endregion #region if (info.Ss.EnblCounterTariff2) if (info.Ss.EnblCounterTariff2) { IO.ReadInc( info, TimeStep.Day_1.Round(info.NowTimeInZone) /*.AddDays(-1)*/, TypeQuery.Counter, TypeInc.Day, eDefCounter.Aplus.Day1Tariff2, eDefCounter.Aminus.Day1Tariff2, eDefCounter.Rplus.Day1Tariff2, eDefCounter.Rminus.Day1Tariff2, EmeraRequest.DepthDayCounter, requestParam.DeepSync, ETariff.Tariff2); } #endregion #region if (info.Ss.EnblCounterTariff3) if (info.Ss.EnblCounterTariff3) { IO.ReadInc( info, TimeStep.Day_1.Round(info.NowTimeInZone) /*.AddDays(-1)*/, TypeQuery.Counter, TypeInc.Day, eDefCounter.Aplus.Day1Tariff3, eDefCounter.Aminus.Day1Tariff3, eDefCounter.Rplus.Day1Tariff3, eDefCounter.Rminus.Day1Tariff3, EmeraRequest.DepthDayCounter, requestParam.DeepSync, ETariff.Tariff3); } #endregion #region if (info.Ss.EnblCounterTariff4) if (info.Ss.EnblCounterTariff4) { IO.ReadInc( info, TimeStep.Day_1.Round(info.NowTimeInZone) /*.AddDays(-1)*/, TypeQuery.Counter, TypeInc.Day, eDefCounter.Aplus.Day1Tariff4, eDefCounter.Aminus.Day1Tariff4, eDefCounter.Rplus.Day1Tariff4, eDefCounter.Rminus.Day1Tariff4, EmeraRequest.DepthDayCounter, requestParam.DeepSync, ETariff.Tariff4); } #endregion #region if (info.Ss.EnblCounterTariff5) if (info.Ss.EnblCounterTariff5) { IO.ReadInc( info, TimeStep.Day_1.Round(info.NowTimeInZone) /*.AddDays(-1)*/, TypeQuery.Counter, TypeInc.Day, eDefCounter.Aplus.Day1Tariff5, eDefCounter.Aminus.Day1Tariff5, eDefCounter.Rplus.Day1Tariff5, eDefCounter.Rminus.Day1Tariff5, EmeraRequest.DepthDayCounter, requestParam.DeepSync, ETariff.Tariff5); } #endregion #region if (info.Ss.EnblCounterTariff6) if (info.Ss.EnblCounterTariff6) { IO.ReadInc( info, TimeStep.Day_1.Round(info.NowTimeInZone) /*.AddDays(-1)*/, TypeQuery.Counter, TypeInc.Day, eDefCounter.Aplus.Day1Tariff6, eDefCounter.Aminus.Day1Tariff6, eDefCounter.Rplus.Day1Tariff6, eDefCounter.Rminus.Day1Tariff6, EmeraRequest.DepthDayCounter, requestParam.DeepSync, ETariff.Tariff6); } #endregion #region if (info.Ss.EnblCounterTariff7) if (info.Ss.EnblCounterTariff7) { IO.ReadInc( info, TimeStep.Day_1.Round(info.NowTimeInZone) /*.AddDays(-1)*/, TypeQuery.Counter, TypeInc.Day, eDefCounter.Aplus.Day1Tariff7, eDefCounter.Aminus.Day1Tariff7, eDefCounter.Rplus.Day1Tariff7, eDefCounter.Rminus.Day1Tariff7, EmeraRequest.DepthDayCounter, requestParam.DeepSync, ETariff.Tariff7); } #endregion #region if (info.Ss.EnblCounterTariff8) if (info.Ss.EnblCounterTariff8) { IO.ReadInc( info, TimeStep.Day_1.Round(info.NowTimeInZone) /*.AddDays(-1)*/, TypeQuery.Counter, TypeInc.Day, eDefCounter.Aplus.Day1Tariff8, eDefCounter.Aminus.Day1Tariff8, eDefCounter.Rplus.Day1Tariff8, eDefCounter.Rminus.Day1Tariff8, EmeraRequest.DepthDayCounter, requestParam.DeepSync, ETariff.Tariff8); } #endregion } #endregion #region if (session.LaunchPoint(info.NextPoint.Month1)) if (session.LaunchPoint(info.NextPoint.Month1)) { Log.Trace.Info(1, SR.ReadMonth); /*IO.ReadInc( * info, * TimeStep.Month.Round(info.NowTimeInZone), * TypeQuery.Inc, * TypeInc.Month, * eDef.Aplus.Month1, * eDef.Aminus.Month1, * eDef.Rplus.Month1, * eDef.Rminus.Month1, * EmeraRequest.DepthMonth, * requestParam.DeepSync);*/ IO.ReadInc( info, TimeStep.Month.Round(info.NowTimeInZone) /*.AddMonths(-1)*/, TypeQuery.Counter, TypeInc.Month, eDefCounter.Aplus.Month1, eDefCounter.Aminus.Month1, eDefCounter.Rplus.Month1, eDefCounter.Rminus.Month1, EmeraRequest.DepthMonthCounter, requestParam.DeepSync, ETariff.NoTariff); #region if (info.Ss.EnblCounterTariff1) if (info.Ss.EnblCounterTariff1) { IO.ReadInc( info, TimeStep.Month.Round(info.NowTimeInZone) /*.AddMonths(-1)*/, TypeQuery.Counter, TypeInc.Month, eDefCounter.Aplus.Month1Tariff1, eDefCounter.Aminus.Month1Tariff1, eDefCounter.Rplus.Month1Tariff1, eDefCounter.Rminus.Month1Tariff1, EmeraRequest.DepthMonthCounter, requestParam.DeepSync, ETariff.Tariff1); } #endregion #region if (info.Ss.EnblCounterTariff2) if (info.Ss.EnblCounterTariff2) { IO.ReadInc( info, TimeStep.Month.Round(info.NowTimeInZone) /*.AddMonths(-1)*/, TypeQuery.Counter, TypeInc.Month, eDefCounter.Aplus.Month1Tariff2, eDefCounter.Aminus.Month1Tariff2, eDefCounter.Rplus.Month1Tariff2, eDefCounter.Rminus.Month1Tariff2, EmeraRequest.DepthMonthCounter, requestParam.DeepSync, ETariff.Tariff2); } #endregion #region if (info.Ss.EnblCounterTariff3) if (info.Ss.EnblCounterTariff3) { IO.ReadInc( info, TimeStep.Month.Round(info.NowTimeInZone) /*.AddMonths(-1)*/, TypeQuery.Counter, TypeInc.Month, eDefCounter.Aplus.Month1Tariff3, eDefCounter.Aminus.Month1Tariff3, eDefCounter.Rplus.Month1Tariff3, eDefCounter.Rminus.Month1Tariff3, EmeraRequest.DepthMonthCounter, requestParam.DeepSync, ETariff.Tariff3); } #endregion #region if (info.Ss.EnblCounterTariff4) if (info.Ss.EnblCounterTariff4) { IO.ReadInc( info, TimeStep.Month.Round(info.NowTimeInZone) /*.AddMonths(-1)*/, TypeQuery.Counter, TypeInc.Month, eDefCounter.Aplus.Month1Tariff4, eDefCounter.Aminus.Month1Tariff4, eDefCounter.Rplus.Month1Tariff4, eDefCounter.Rminus.Month1Tariff4, EmeraRequest.DepthMonthCounter, requestParam.DeepSync, ETariff.Tariff4); } #endregion #region if (info.Ss.EnblCounterTariff5) if (info.Ss.EnblCounterTariff5) { IO.ReadInc( info, TimeStep.Month.Round(info.NowTimeInZone) /*.AddMonths(-1)*/, TypeQuery.Counter, TypeInc.Month, eDefCounter.Aplus.Month1Tariff5, eDefCounter.Aminus.Month1Tariff5, eDefCounter.Rplus.Month1Tariff5, eDefCounter.Rminus.Month1Tariff5, EmeraRequest.DepthMonthCounter, requestParam.DeepSync, ETariff.Tariff5); } #endregion #region if (info.Ss.EnblCounterTariff6) if (info.Ss.EnblCounterTariff6) { IO.ReadInc( info, TimeStep.Month.Round(info.NowTimeInZone) /*.AddMonths(-1)*/, TypeQuery.Counter, TypeInc.Month, eDefCounter.Aplus.Month1Tariff6, eDefCounter.Aminus.Month1Tariff6, eDefCounter.Rplus.Month1Tariff6, eDefCounter.Rminus.Month1Tariff6, EmeraRequest.DepthMonthCounter, requestParam.DeepSync, ETariff.Tariff6); } #endregion #region if (info.Ss.EnblCounterTariff7) if (info.Ss.EnblCounterTariff7) { IO.ReadInc( info, TimeStep.Month.Round(info.NowTimeInZone) /*.AddMonths(-1)*/, TypeQuery.Counter, TypeInc.Month, eDefCounter.Aplus.Month1Tariff7, eDefCounter.Aminus.Month1Tariff7, eDefCounter.Rplus.Month1Tariff7, eDefCounter.Rminus.Month1Tariff7, EmeraRequest.DepthMonthCounter, requestParam.DeepSync, ETariff.Tariff7); } #endregion #region if (info.Ss.EnblCounterTariff8) if (info.Ss.EnblCounterTariff8) { IO.ReadInc( info, TimeStep.Month.Round(info.NowTimeInZone) /*.AddMonths(-1)*/, TypeQuery.Counter, TypeInc.Month, eDefCounter.Aplus.Month1Tariff8, eDefCounter.Aminus.Month1Tariff8, eDefCounter.Rplus.Month1Tariff8, eDefCounter.Rminus.Month1Tariff8, EmeraRequest.DepthMonthCounter, requestParam.DeepSync, ETariff.Tariff8); } #endregion } #endregion Log.Trace.Write(1, (l) => l.Info("Next session from {0} min", Math.Round((session.Result.Next - DateTimeUtc.Now).TotalMinutes), 1)); return(session); } }