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 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); } }