Exemplo n.º 1
0
        protected virtual void OnThresholdReached(ReloadDataArgs e)
        {
            EventHandler <ReloadDataArgs> handler = ReloadData;

            if (handler != null)
            {
                handler(this, e);
            }
        }
Exemplo n.º 2
0
 static void ReloadDataGrid(object sender, MercuryMeter.ReloadDataArgs e)
 {
     //console.WriteLine("{0} : {1}", e.addr, e.error);
     logger.Trace("Устройство {0} : {1}", e.addr, e.error);
 }
Exemplo n.º 3
0
        public error_type RefreshData()
        {
            InitRs();
            //try
            //{
            //    if (rs_port.IsOpen == false)
            //    if (rs_port.IsOpen == true)
            //        rs_port.Close();

            //    rs_port.Open();
            //}
            //catch
            //{
            //    return -1;
            //}
            //return 0;
            DateTime_lastTime_connection = DateTime.Now;
            ReloadDataArgs args = new ReloadDataArgs();

            args.addr = address;

            if (testCon() == 0)
            {
                //Console.WriteLine("Тест связи успешен");


                if (OpenChannel(Convert.ToByte(level), password[level - 1]) == 0)
                {
                    //Console.WriteLine("Доступ разрешен");
                    byte[] btbuf = GiveSerialNumber();
                    //Console.WriteLine("Серийный номер");
                    if (btbuf == null)
                    {
                        args.error = error_type.NoConnect;
                        OnThresholdReached(args);
                        error_meter = error_type.NoConnect;
                        return(error_type.NoConnect);
                    }
                    args.error  = error_type.none;
                    error_meter = error_type.none;
                    try
                    {
                        int buf = 0;

                        for (int z = 0; z < 4; z++)
                        {
                            buf += (int)((double)btbuf[3 - z] * System.Math.Pow(10, 2 * z));
                        }
                        if (buf != serial_number)
                        {
                            args.error  = error_type.WrongId;
                            error_meter = error_type.WrongId;
                            OnThresholdReached(args);
                            return(error_type.WrongId);
                        }

                        int[] int1 = CallAdditionalParameters(Mercury230.BWIR_param.voltage, 1, Mercury230.AdditionalParameters_query.h16);
                        Console.Write("Вольтаж:");
                        //voltage = new float[3];
                        //int i = -1;


                        for (int i = 0; i <= 2; i++)
                        {
                            Phases[i].voltage.Value = Convert.ToSingle(int1[i]) / 100;
                            Console.Write(" {0}-{1} ", i, Phases[i].voltage.Value);
                        }
                        Console.WriteLine();

                        int1 = CallAdditionalParameters(Mercury230.BWIR_param.current, 1, Mercury230.AdditionalParameters_query.h16);
                        Console.Write("Амперы:");
                        //current = new float[3];
                        //i = -1;

                        for (int i = 0; i <= 2; i++)
                        {
                            Phases[i].current.Value = Convert.ToSingle(int1[i]) / 1000; //правка от 07.09.2016  показания тока делим не на 100 а на 1000
                            Console.Write(" {0}-{1} ", i, Phases[i].current.Value);
                        }
                        Console.WriteLine();

                        int1      = CallAdditionalParameters(Mercury230.BWIR_param.frequency, 0);
                        frequency = Convert.ToSingle(int1[0]) / 100;
                        Console.WriteLine("Частота:{0}", frequency);


                        int1 = CallAdditionalParameters(Mercury230.BWIR_param.power_factor, 0, Mercury230.AdditionalParameters_query.h16);
                        //power_factor = new float[int1.Length];
                        //Console.WriteLine("Масссив размером: {0}", int1.Count());
                        Console.Write("Коэфф мощности:");
                        for (int i = 1; i <= 3; i++)
                        {
                            // Ответ происходит по виду Сумма - 1ф -2ф -3ф . Потому сдвигаем на один индекс
                            // чтобы получить - 1ф -2ф -3ф
                            Phases[i - 1].power_factor.Value = Convert.ToSingle(int1[i]) / 1000;
                            Console.Write(" {0}-{1} ", i, Phases[i - 1].power_factor.Value);
                        }

                        CommonPower.Value = 0;
                        for (int i = 0; i < 3; i++)
                        {
                            CommonPower.Value += Phases[i].power.Value;
                        }

                        CommonActivePower.Value = 0;
                        for (int i = 0; i < 3; i++)
                        {
                            CommonActivePower.Value += Phases[i].power.Value * Phases[i].power_factor.Value;
                        }

                        Console.WriteLine();
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine("Ошибка при ответе:{0}", e.Message);
                        args.error  = error_type.AnswError;
                        error_meter = error_type.AnswError;
                        return(error_meter);
                    }

                    //DataTime_last_contact = DateTime.Now;

                    OnThresholdReached(args);
                    error_meter = error_type.none;
                    return(error_type.none);
                }
                // Console.WriteLine("{0} : отказ", address);
                args.error  = error_type.NoAnsw;
                error_meter = error_type.NoAnsw;
                OnThresholdReached(args);
                return(error_type.NoAnsw);
            }
            // Console.WriteLine("Ошибка");
            args.error  = error_type.NoConnect;
            error_meter = error_type.NoConnect;
            OnThresholdReached(args);
            return(error_type.NoConnect);
        }