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 void WriteTags(StorageDataDriver storage, ElectroChannel eChannel, Quality quality, DateTimeUtc time) { var eid = new ElectroIMData(quality, time, this.InsActivePower.InsPowerPhase.Phase_A, this.InsActivePower.InsPowerPhase.Phase_B, this.InsActivePower.InsPowerPhase.Phase_C, this.InsReactivePower.InsPowerPhase.Phase_A, this.InsReactivePower.InsPowerPhase.Phase_B, this.InsReactivePower.InsPowerPhase.Phase_C, this.Voltage.Phase_A, this.Voltage.Phase_B, this.Voltage.Phase_C, this.Amperage.Phase_A, this.Amperage.Phase_B, this.Amperage.Phase_C, this.Frequency, this.PowerFactor.Phase_A, this.PowerFactor.Phase_B, this.PowerFactor.Phase_C); eid.WriteTags(eChannel); }