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