Exemple #1
0
        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);
            }
        }