예제 #1
0
        private dynamic All(string components, string password, bool isAdminPass, bool isTimeCorrectionEnable, int timeZone)
        {
            Send(MakeDataRequestFromBytes(new List <byte>()
            {
                ASK, 0x30, 0x35, 0x31, CR, LF
            }));                                                                                //0x06, 0x30, 0x35, 0x31, 0x0D, 0x0A
            Send(MakeDataRequestFromBytes(new List <byte>()
            {
                SOH, 0x50, 0x31, STX, 0x28, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x29, ETX, VOSKL
            }));                                                                                                                                   //0x01, 0x50, 0x31, 0x02, 0x28, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x29,0x03, 0x21
            var current = GetCurrent();

            if (!current.success)
            {
                log(string.Format("Ошибка при считывании текущих: {0}", current.error), level: 1);
                return(MakeResult(102, current.errorcode, current.error));
            }

            setTimeDifference(DateTime.Now - current.date);

            List <dynamic> currents = current.records;

            log(string.Format("Текущие на {0:dd.MM.yyyy HH:mm:ss} прочитаны: всего {1}, показание счетчика = {2:0.000}", current.date, currents.Count, current.energy), level: 1);
            records(currents);

            //

            if (getEndDate == null)
            {
                getEndDate = (type) => current.date;
            }

            if (components.Contains("Constant"))
            {
                //    var constant = GetConstant();
                //    if (!constant.success)
                //    {
                //        log(string.Format("Ошибка при считывании констант: {0}", constant.error));
                //        return;
                //    }

                //    {
                //List<dynamic> recs = constant.records;
                //        foreach (var rec in recs)
                //        {
                //            rec.date = current.date;
                //        }
                //        log(string.Format("Константы прочитаны: всего {0}", recs.Count));
                List <dynamic> recs = new List <dynamic>();
                recs.Add(MakeConstRecord("Нет констант", "", current.date));
                log(string.Format("Вычислитель не имеет констант", recs.Count));
                records(recs);
                //    }

                //    //////
            }

            //чтение часовых
            if (components.Contains("Hour"))
            {
                var startH = getStartDate("Hour");
                var endH   = getEndDate("Hour");

                var hour = GetHours(startH, endH, current.date);
                if (!hour.success)
                {
                    log(string.Format("Ошибка при считывании часовых: {0}", hour.error), level: 1);
                    return(MakeResult(105, hour.errorcode, hour.error));
                }
                List <dynamic> hours = hour.records;
                log(string.Format("Прочитаны часовые с {0:dd.MM.yyyy HH:mm} по {1:dd.MM.yyyy HH:mm}: {2} записей", startH, endH, hours.Count), level: 1);
            }

            ///конец чтения часовых

            //чтение суточных
            if (components.Contains("Day"))
            {
                var startD = getStartDate("Day");
                var endD   = getEndDate("Day");

                var day = GetDays(startD, endD, current.date);
                if (!day.success)
                {
                    log(string.Format("Ошибка при считывании суточных: {0}", day.error), level: 1);
                    return(MakeResult(104, day.errorcode, day.error));
                }
                List <dynamic> days = day.records;
                log(string.Format("Прочитаны суточные с {0:dd.MM.yyyy} по {1:dd.MM.yyyy}: {2} записей", startD, endD, days.Count), level: 1);
            }

            //    ///// Нештатные ситуации ///
            //    //var lastAbnormal = getLastTime("Abnormal");
            //    //DateTime startAbnormal = lastAbnormal.AddHours(-constant.contractHour).Date;
            //    //DateTime endAbnormal = current.date;

            //    //var abnormal = GetAbnormals(startAbnormal, endAbnormal);
            //    //if (!abnormal.success)
            //    //{
            //    //    log(string.Format("ошибка при считывании НС: {0}", abnormal.error));
            //    //    return;
            //    //}

            if (isTimeCorrectionEnable)
            {
                var cdate = Send(MakeDataRequest("DATE_()"));
                if (!cdate.success)
                {
                    return(cdate);
                }

                var ctime = Send(MakeDataRequest("TIME_()"));
                if (!ctime.success)
                {
                    return(ctime);
                }

                DateTime date = DriverHelper.DateTimeFromCounter(cdate.rsp, ctime.rsp);
                DateTime now  = DateTime.Now;

                DateTime nowTz               = now.AddHours(timeZone - TIMEZONE_SERVER);
                TimeSpan timeDiff            = nowTz - date;
                bool     isTimeCorrectable   = (timeDiff.TotalSeconds > -TIME_CORRECTION_MAXIMUM_MODULE) && (timeDiff.TotalSeconds < TIME_CORRECTION_MAXIMUM_MODULE);
                bool     isTimeNeedToCorrent = (timeDiff.TotalSeconds >= TIME_NEED_CORRECTION_MODULE) || (timeDiff.TotalSeconds <= -TIME_NEED_CORRECTION_MODULE);

                //log(string.Format("Дата/время {0:dd.MM.yyyy HH:mm:ss}; расхождение {1} сек.; isTimeCorrectable?{2}, isTimeNeedToCorrent?{3}", date, timeDiff.TotalSeconds, isTimeCorrectable, isTimeNeedToCorrent), 3);

                if (isTimeCorrectable && isTimeNeedToCorrent)
                {
                    var timeToSleep = 60000 - (now.Second * 1000 + now.Millisecond) - 500;
                    log(string.Format("Расхождение {1:0.0} сек. - нужна корректировка; спим {0} сек.", timeToSleep / 1000, timeDiff.TotalSeconds), 3);
                    Thread.Sleep(timeToSleep);
                    Send(MakeDataRequest("CTIME()"), 1);

                    log("Произведена корректировка времени");

                    /*cdate = Send(MakeDataRequest("DATE_()"));
                     * if (!cdate.success) return cdate;
                     *
                     * ctime = Send(MakeDataRequest("TIME_()"));
                     * if (!ctime.success) return ctime;
                     *
                     * date = DriverHelper.DateTimeFromCounter(cdate.rsp, ctime.rsp);
                     *
                     * now = DateTime.Now;
                     * nowTz = now.AddHours(timeZone - TIMEZONE_SERVER);
                     * log(string.Format("Время установлено, расхождение = {0:0.0} сек.", (date - nowTz).TotalSeconds));*/
                }
            }


            /*
             * if ((password != null) && (password != ""))
             * {
             *  log(string.Format("будут посланы следующие запросы: {0}", string.Format("PASS{0}({1})", isAdminPass ? "W" : "U", password)));
             *
             *
             *  var pass = Send(MakeDataRequest(string.Format("PASS{0}({1})", isAdminPass ? "W" : "U", password)));
             *  if (pass.success)
             *  {
             *      log(string.Format("Введён пароль \"{0}\"", password));
             *  }
             *  else
             *  {
             *      log(string.Format("Пароль НЕ введён: {0}", pass.error));
             *  }
             * }
             *
             * if (isTimeCorrectionEnable)
             * {
             *  DateTime now = DateTime.Now;
             *  DateTime deviceTime = now.AddHours(timeZone - TIMEZONE_SERVER);
             *  int weekDay = (int)deviceTime.DayOfWeek;
             *
             *  //log(string.Format("будут посланы следующие запросы: {0}; {1}; {2}", string.Format("DATE_({0}.{1:dd.MM.yy})", weekDay, deviceTime), string.Format("TIME_({0:HH:mm:ss})", deviceTime), string.Format("TRSUM({0})", 0)));
             *
             *  var trsum = Send(MakeDataRequest(string.Format("TRSUM({0})", 0)));
             *  if (!trsum.success) return trsum;
             *
             *  var ctime = Send(MakeDataRequest(string.Format("TIME_({0:HH:mm:ss})", deviceTime)));
             *  if (!ctime.success) return ctime;
             *
             *  var cdate = Send(MakeDataRequest(string.Format("DATE_({0}.{1:dd.MM.yy})", weekDay, deviceTime)));
             *  if (!cdate.success) return cdate;
             *
             *  log(string.Format("Ответы: {0}; {1}; {2}", trsum.text, ctime.text, cdate.text), 3);
             * }
             */


            return(MakeResult(0, DeviceError.NO_ERROR, ""));
        }