示例#1
0
    public void writeAccumulEnergy(Mercury230.accumulEnergy energystruct, int tarif, Mercury230.peroidQuery period, Mercury230_DatabaseSignals device, byte month)
    {
        DateTime datetime = new DateTime();

        if (month == 0)
        {
            datetime = DateTime.Now;
        }
        else
        {
            datetime = (month > DateTime.Now.Month) ? new DateTime(DateTime.Now.AddYears(-1).Year, month, 1, 0, 0, 0) : new DateTime(DateTime.Now.Year, month, 1, 0, 0, 0);
        }
        string CommandText = "INSERT INTO meter230 ( `addr`, `energy_active_in`, `energy_reactive_in`, `energy_reactive_out`, `oleDT` , `tariff`, `period` , `id`, `month`) VALUES (" + device.address.ToString() + ", " + energystruct.active_energy_in + ", " + energystruct.reactive_energy_in + ", " + energystruct.reactive_energy_out + ", " + datetime.ToOADate() + ", " + tarif.ToString() + ", '" + Convert.ToString((int)period) + "', " + device.serial_number.ToString() + " , " + month + " )";

        SendData(CommandText);
    }
示例#2
0
        //static bool HandlerWorked = false;
        //protected static void ConsoleCancelHandler(object sender, ConsoleCancelEventArgs args)
        //{
        //    //if (!HandlerWorked)
        //    //{
        //    //    HandlerWorked = true;
        //        stop_quierMutex.WaitOne();

        //        Console.WriteLine("\nThe read operation has been interrupted.");

        //        Console.WriteLine("  Key pressed: {0}", args.SpecialKey);

        //        Console.WriteLine("  Cancel property: {0}", args.Cancel);

        //        // Set the Cancel property to true to prevent the process from terminating.
        //        Console.WriteLine("Setting the Cancel property to true...");
        //        args.Cancel = true;

        //        // Announce the new value of the Cancel property.
        //        Console.WriteLine("  Cancel property: {0}", args.Cancel);
        //        Console.WriteLine("The read operation will resume...\n");
        //     //   HandlerWorked = false;
        //        Console.ReadLine();

        //        stop_quierMutex.ReleaseMutex();

        //    //}
        //}

        //static void loopMeterSQLwriter()
        //{

        //}
        public static void loopMeterQuerier()
        {
            //Meter230_arr[0].InitRs();
            System.Threading.Thread.Sleep(2000);


            while (progSettings.start)
            {
                try
                {
                    #region Опрос 234-тых
                    for (int i = 0; (i < Meter230_arr.Length) && progSettings.start; i++)
                    {
                        //stop_quierMutex.WaitOne();
                        //  string buf = meterTable.Rows[i]["Тип"].ToString();
                        //  meterTable.Rows[i]["Тип"] = meterTable.Rows[i]["Тип"].ToString() + "*";
                        Mercury230.error_type error = Meter230_arr[i].RefreshData();
                        //console.WriteLine("{0}", Meter230_arr[i].DataTime_last_recordSQL);
                        // double time = Sqlhandler_.NextTimetoSQLwrite(Meter230_arr[i].address, Meter230_arr[i].serial_number);
                        // console.WriteLine("Следующая запись : {0}" , DateTime.FromOADate(time));
                        // server_stop();

                        if (error == Mercury230.error_type.none)
                        {
                            if ((DateTime.Now.Hour > 3) && (DateTime.Now.Hour < 23))
                            {
                                #region Коррекция времени
                                if (DateTime.Now > Meter230_arr[i].DateTime_nextTime_corecction)
                                {
                                    //
                                    Mercury230.elecMeterDateTime datetime = Meter230_arr[i].CallTime();
                                    TimeSpan span = DateTime.Now - datetime.datetime;
                                    if (span.Duration() > new TimeSpan(0, 0, 10))
                                    {
                                        // Meter230_arr[i].level = 2;
                                        datetime          = new Mercury230.elecMeterDateTime();
                                        datetime.datetime = DateTime.Now;
                                        Meter230_arr[i].SetTime(datetime);
                                        logger.Debug("Корректировка|адрес {0}|время {1}", Meter230_arr[i].address, Meter230_arr[i].CallTime().datetime);
                                    }
                                    else
                                    {
                                        logger.Debug("Корректировка|адрес:{0}|Пропущена|{1}", Meter230_arr[i].address, span);
                                        // console.WriteLine(, span);
                                        Meter230_arr[i].DateTime_nextTime_corecction = DateTime.Now.AddMinutes(5);
                                    }
                                }
                                #endregion

                                #region Снятие показаний

                                if (DateTime.Now > Meter230_arr[i].DataTime_nextPoint_recordSQL)
                                {
                                    Sqlhandler_.ConnectOpen();
                                    //Mercury230.accumulEnergy energy1 = Meter230_arr[i].CallAccumulEnergy(Mercury230.peroidQuery.thisMonth, 1, 2);
                                    for (byte tarif = 1; tarif < 5; tarif++)
                                    {
                                        if (Sqlhandler_.GiveSQLrecordingPeriod(Meter230_arr[i], "meter230", Mercury230.peroidQuery.lastDay, 0, tarif).Rows.Count == 0)
                                        {
                                            Mercury230.accumulEnergy energy = Meter230_arr[i].CallAccumulEnergy(Mercury230.peroidQuery.lastDay, tarif, 0);
                                            if (energy.error == 0)
                                            {
                                                Sqlhandler_.writeAccumulEnergy(energy, tarif, Mercury230.peroidQuery.lastDay, Meter230_arr[i], 0);
                                                logger.Debug("Запись счетчика {0}|За вчерашний день|Тариф {1}  ", Meter230_arr[i].address, tarif);
                                            }
                                            else
                                            {
                                                logger.Debug("Ошибка чтения показаний счетчика {0}|За вчерашний день|Тариф {1}  ", Meter230_arr[i].address, tarif);
                                            }
                                        }
                                        if (Sqlhandler_.GiveSQLrecordingPeriod(Meter230_arr[i], "meter230", Mercury230.peroidQuery.thisDay_beginning, 0, tarif).Rows.Count == 0)
                                        {
                                            Mercury230.accumulEnergy energy = Meter230_arr[i].CallAccumulEnergy(Mercury230.peroidQuery.thisDay_beginning, tarif, 0);
                                            if (energy.error == 0)
                                            {
                                                Sqlhandler_.writeAccumulEnergy(energy, tarif, Mercury230.peroidQuery.thisDay_beginning, Meter230_arr[i], 0);
                                                logger.Debug("Запись счетчика {0}|На начало дня|Тариф {1}  ", Meter230_arr[i].address, tarif);
                                            }
                                            else
                                            {
                                                logger.Debug("Ошибка чтения показаний счетчика {0}|На начало дня|Тариф {1}  ", Meter230_arr[i].address, tarif);
                                            }
                                        }
                                        for (byte month = 1; month <= 12; month++)
                                        {
                                            if ((Sqlhandler_.GiveSQLrecordingPeriod(Meter230_arr[i], "meter230", Mercury230.peroidQuery.thisMonth, month, tarif).Rows.Count == 0) && (month != DateTime.Now.Month))
                                            {
                                                Mercury230.accumulEnergy energy = Meter230_arr[i].CallAccumulEnergy(Mercury230.peroidQuery.thisMonth, tarif, month);
                                                if (energy.error == 0)
                                                {
                                                    Sqlhandler_.writeAccumulEnergy(energy, tarif, Mercury230.peroidQuery.thisMonth, Meter230_arr[i], month);
                                                    logger.Debug("Запись счетчика {0}|За месяц {2}|Тариф {1}  ", Meter230_arr[i].address, tarif, month);
                                                }
                                                else
                                                {
                                                    logger.Debug("Ошибка чтения показаний счетчика {0}|За месяц {2}|Тариф {1}  ", Meter230_arr[i].address, tarif);
                                                }
                                            }
                                        }
                                        for (byte month = 1; month <= 12; month++)
                                        {
                                            if (Sqlhandler_.GiveSQLrecordingPeriod(Meter230_arr[i], "meter230", Mercury230.peroidQuery.thisMonth_beginning, month, tarif).Rows.Count == 0)
                                            {
                                                Mercury230.accumulEnergy energy = Meter230_arr[i].CallAccumulEnergy(Mercury230.peroidQuery.thisMonth_beginning, tarif, month);
                                                if (energy.error == 0)
                                                {
                                                    Sqlhandler_.writeAccumulEnergy(energy, tarif, Mercury230.peroidQuery.thisMonth_beginning, Meter230_arr[i], month);
                                                    logger.Debug("Запись счетчика {0}|На начало месяца {2}|Тариф {1}  ", Meter230_arr[i].address, tarif, month);
                                                }
                                                else
                                                {
                                                    logger.Debug("Ошибка чтения показаний счетчика {0}|На начало месяца {2}|Тариф {1}  ", Meter230_arr[i].address, tarif);
                                                }
                                            }
                                        }
                                    }
                                    Meter230_arr[i].DataTime_nextPoint_recordSQL = DateTime.Now.AddSeconds(30);
                                    Sqlhandler_.ConnectClose();
                                }
                            }
                            #endregion
                        }
                        //stop_quierMutex.ReleaseMutex();
                    }
                    #endregion

                    #region Опрос 206-ых
                    for (int i = 0; (i < Meter206_arr.Length) && progSettings.start; i++)
                    {
                        //stop_quierMutex.WaitOne();
                        MeterDevice.error_type error;

                        int serialnum_ = Meter206_arr[i].GiveSerialNumber();

                        if (Meter206_arr[i].serial_number == serialnum_)
                        {
                            error = MeterDevice.error_type.none;
                        }
                        else
                        {
                            error = (MeterDevice.error_type)serialnum_;
                            if (!Enum.IsDefined(typeof(MeterDevice.error_type), serialnum_))
                            {
                                logger.Debug("!!! Адрес {0}| S/n {1}|Ожидался {2} !!!", Meter206_arr[i].i_addr, serialnum_, Meter206_arr[i].serial_number);
                                break;
                            }
                        }

                        if (error == MeterDevice.error_type.none)
                        {
                            if ((DateTime.Now.Hour > 3) && (DateTime.Now.Hour < 23))
                            {
                                #region Время
                                if (DateTime.Now > Meter206_arr[i].DateTime_nextTime_corecction)
                                {
                                    //
                                    Mercury206.elecMeterDateTime datetime206 = Meter206_arr[i].CallDateTime();
                                    TimeSpan span = DateTime.Now - datetime206.dt;
                                    if (span.Duration() > new TimeSpan(0, 0, 10))
                                    {
                                        // Meter230_arr[i].level = 2;
                                        datetime206    = new Mercury206.elecMeterDateTime();
                                        datetime206.dt = DateTime.Now;
                                        Meter206_arr[i].SetTime(datetime206.dt);
                                        logger.Debug("Корректировка|адрес {0}|время {1}", Meter206_arr[i].i_addr, Meter206_arr[i].CallDateTime().dt);
                                    }
                                    else
                                    {
                                        logger.Debug("Корректировка|адрес:{0}|Пропущена|{1}", Meter206_arr[i].i_addr, span);
                                        // console.WriteLine(, span);
                                        Meter206_arr[i].DateTime_nextTime_corecction = DateTime.Now.AddMinutes(5);
                                    }
                                }
                                #endregion

                                if (Meter206_arr[i].DataTime_nextPoint_recordSQL < DateTime.Now)
                                {
                                    for (byte per = 0; per <= 12; per++)
                                    {
                                        Sqlhandler_.ConnectOpen();
                                        if (Sqlhandler_.GiveSQLrecordingPeriod(Meter206_arr[i], "meter206", per).Rows.Count == 0)
                                        {
                                            int[] energy = (per == 0) ? Meter206_arr[i].CallAccumulEnergy_activ() : Meter206_arr[i].CallAccumulEnergy_activ_month((byte)((int)per - 1));
                                            if (energy.Length == 4)
                                            {
                                                Sqlhandler_.writeAccumulEnergy(energy, Meter206_arr[i], per);
                                                logger.Debug("Запись счетчика произведена. Счетчик {0}, ПериодКод {1}", Meter206_arr[i].i_addr, per);
                                            }
                                        }
                                        Sqlhandler_.ConnectClose();
                                        Meter206_arr[i].DataTime_nextPoint_recordSQL = DateTime.Now.AddSeconds(30);
                                    }
                                }
                            }
                            //if (DateTime.Now > Meter206_arr[i].DataTime_nextPoint_recordSQL)
                            //{
                            //    Sqlhandler_.ConnectOpen();
                            //        int[] energy = Meter206_arr[i].CallAccumulEnergy_activ();
                            //        if (energy.Length == 4)
                            //        {
                            //            Sqlhandler_.writeAccumulEnergy(energy, Meter206_arr[i], 0);
                            //            //Mercury230.accumulEnergy energy2 = Meter230_arr[i].CallAccumulEnergy(Mercury230.peroidQuery.afterReset, j, 1);
                            //            //Sqlhandler_.writeAccumulEnergy(energy2, j, Mercury230.peroidQuery.afterReset, Meter230_arr[i]);

                            //            logger.Debug("Запись счетчика произведена. Счетчик {0} Время {1}", Meter206_arr[i].i_addr, DateTime.Now);
                            //            // myConnection.Close();
                            //            DateTime dt = DateTime.Now;
                            //            // Делаем записи в 00:30 . Писать в 00:00 рисковано - счетчик может не перейти на новую дату
                            //            DateTime dt_beginday = new DateTime(dt.Year, dt.Month, dt.Day, 0, 0, 30);
                            //            Meter206_arr[i].DataTime_nextPoint_recordSQL = dt_beginday.AddDays(1);
                            //        }
                            //    Sqlhandler_.ConnectClose();
                            //}
                        }
                        logger.Trace("Устройство {0} : {1}", Meter206_arr[i].i_addr, error);
                        //stop_quierMutex.ReleaseMutex();
                    }
                    #endregion
                }
                catch (Exception ex)
                {
                    logger.Error(ex);
                }
            }
        }