/// <summary>
        /// 解析PF,Fr参数
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static List<BaseElecData> GetBaseElecData(MeterList data)
        {
            List<BaseElecData> baseElecDataList = new List<BaseElecData>();

            foreach (var item in data.Meters)
            {
                BaseElecData baseElec = new BaseElecData();
                baseElec.BuildID = data.BuildId;
                baseElec.MeterCode = item.MeterId;
                baseElec.Time = data.CollectTime;

                MeterParam pf = item.MeterParams.Find(m => m.ParamName.ToLower() == "PF".ToLower());
                MeterParam fr = item.MeterParams.Find(m => m.ParamName.ToLower() == "Fr".ToLower());

                if (pf != null)
                    baseElec.PF = pf.ParamValue;

                if (fr != null)
                    baseElec.Fr = fr.ParamValue;

                baseElecDataList.Add(baseElec);
            }

            return baseElecDataList;
        }
        /// <summary>
        /// 获取能耗值List
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static List<OriginEnergyData> GetEnergyData(MeterList data)
        {
            List<OriginEnergyData> energyDataList = new List<OriginEnergyData>();
            foreach (var item in data.Meters)
            {
                MeterParam param = item.MeterParams.Find(meterParam => meterParam.ParamName.ToLower() == "EPI".ToLower() || meterParam.ParamName == "LJLL".ToLower()
                                                || meterParam.ParamName.ToLower() == "LLHeat".ToLower());

                if (param == null)
                    continue;

                //判断param.ParamError是否为错误状态,如果为错误状态则表示当前仪表通讯中断

                energyDataList.Add(new OriginEnergyData()
                {
                    BuildID = data.BuildId,
                    MeterCode = item.MeterId,
                    Time = data.CollectTime,
                    Value = param.ParamValue,
                    Calced = false
                });
            }

            return energyDataList;
        }
        /// <summary>
        /// 获取电流数据
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static List<CurrentData> GetCurrentData(MeterList data)
        {
            List<CurrentData> currentDataList = new List<CurrentData>();

            foreach (var item in data.Meters)
            {
                CurrentData current = new CurrentData();
                current.BuildID = data.BuildId;
                current.MeterCode = item.MeterId;
                current.Time = data.CollectTime;

                MeterParam i = item.MeterParams.Find(m => m.ParamName.ToLower() == "I".ToLower());
                MeterParam ia = item.MeterParams.Find(m => m.ParamName.ToLower() == "Ia".ToLower());
                MeterParam ib = item.MeterParams.Find(m => m.ParamName.ToLower() == "Ib".ToLower());
                MeterParam ic = item.MeterParams.Find(m => m.ParamName.ToLower() == "Ic".ToLower());

                if (i != null)
                    current.I = i.ParamValue;

                if (ia != null)
                    current.Ia = ia.ParamValue;

                if (ib != null)
                    current.Ib = ib.ParamValue;

                if (ic != null)
                    current.Ic = ic.ParamValue;

                currentDataList.Add(current);
            }

            return currentDataList;
        }
        /// <summary>
        /// 解析功率数据
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static List<PowerData> GetPowerData(MeterList data)
        {
            List<PowerData> powerDataList = new List<PowerData>();

            foreach (var item in data.Meters)
            {
                PowerData power = new PowerData();
                power.BuildID = data.BuildId;
                power.MeterCode = item.MeterId;
                power.Time = data.CollectTime;

                MeterParam p = item.MeterParams.Find(m => m.ParamName.ToLower() == "P".ToLower());
                MeterParam pa = item.MeterParams.Find(m => m.ParamName.ToLower() == "Pa".ToLower());
                MeterParam pb = item.MeterParams.Find(m => m.ParamName.ToLower() == "Pb".ToLower());
                MeterParam pc = item.MeterParams.Find(m => m.ParamName.ToLower() == "Pc".ToLower());

                MeterParam q = item.MeterParams.Find(m => m.ParamName.ToLower() == "Q".ToLower());
                MeterParam qa = item.MeterParams.Find(m => m.ParamName.ToLower() == "Qa".ToLower());
                MeterParam qb = item.MeterParams.Find(m => m.ParamName.ToLower() == "Qb".ToLower());
                MeterParam qc = item.MeterParams.Find(m => m.ParamName.ToLower() == "Qc".ToLower());

                MeterParam s = item.MeterParams.Find(m => m.ParamName.ToLower() == "S".ToLower());
                MeterParam sa = item.MeterParams.Find(m => m.ParamName.ToLower() == "Sa".ToLower());
                MeterParam sb = item.MeterParams.Find(m => m.ParamName.ToLower() == "Sb".ToLower());
                MeterParam sc = item.MeterParams.Find(m => m.ParamName.ToLower() == "Sc".ToLower());

                if (p != null)
                    power.P = p.ParamValue;
                if (pa != null)
                    power.Pa = pa.ParamValue;
                if (pb != null)
                    power.Pb = pb.ParamValue;
                if (pc != null)
                    power.Pc = pc.ParamValue;

                if (q != null)
                    power.Q = q.ParamValue;
                if (qa != null)
                    power.Qa = qa.ParamValue;
                if (qb != null)
                    power.Qb = qb.ParamValue;
                if (qc != null)
                    power.Qc = qc.ParamValue;

                if (s != null)
                    power.S = s.ParamValue;
                if (sa != null)
                    power.Sa = sa.ParamValue;
                if (sb != null)
                    power.Sb = sb.ParamValue;
                if (sc != null)
                    power.Sc = sc.ParamValue;

                powerDataList.Add(power);
            }

            return powerDataList;
        }
Example #5
0
        /// <summary>
        /// 一直运行,将有新的数据存储到MySql数据库中
        /// </summary>
        private static void SaveDataToMysql()
        {
            ShowLog("数据转存线程启动,线程ID:{0}.", Thread.CurrentThread.ManagedThreadId.ToString());
            Runtime.m_Logger.Info("数据转存线程启动,线程ID:{0}.", Thread.CurrentThread.ManagedThreadId.ToString());

            while (true)
            {
                if (DateTime.Now.Minute % 5 == 1)
                {
                    ShowLog("检查是否有需要存储的数据?");
                    Runtime.m_Logger.Info("检查是否有需要存储的数据?");
                    List <SourceDataHeader> headerList = Energy.Common.DAL.SQLiteHelper.GetUnStoreList();
                    if (headerList.Count < 1000 && headerList.Count >= 0)
                    {
                        ShowLog("共有{0}个报文需要存储到数据中.", headerList.Count.ToString());
                        Runtime.m_Logger.Info("共有{0}个报文需要存储到数据中.", headerList.Count.ToString());
                    }
                    else
                    {
                        ShowLog("当前需要存储1000个报文.");
                        Runtime.m_Logger.Info("当前需要存储1000个报文.");
                    }


                    ShowLog("开始存储文件...");
                    Runtime.m_Logger.Info("开始存储文件...");
                    foreach (SourceDataHeader header in headerList)
                    {
                        SourceData source = SQLiteHelper.GetSourceByHeader(header);

                        MeterList meterList = JsonConvert.DeserializeObject <MeterList>(source.JsonData);

                        try
                        {
                            SaveDataFromSqliteToMySql.ExecuteInsertTransactions(meterList, header);
                        }
                        catch (Exception e)
                        {
                            ShowLog("错误信息:{0}", e.Message);
                            Runtime.m_Logger.Error("错误信息:{0}", e.Message);
                        }
                    }
                    ShowLog("完成当前周期文件的存储。");
                    Runtime.m_Logger.Info("完成当前周期文件的存储。");

                    Thread.Sleep(1000 * 60);
                }
                else
                {
                    ShowLog("当前无数据需要处理,进行下一个周期的数据扫描...");
                    Runtime.m_Logger.Info("当前无数据需要处理,进行下一个周期的数据扫描...");
                    Thread.Sleep(1000 * 60);
                }
            }
        }
Example #6
0
 /// <summary>
 /// Callback in the event of a successful file received operation from a MeterBoard32
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void Client_OnFileReceived(object sender, FileReceivedEventArgs e)
 {
     if (e.Result == FileOperationResult.Success)
     {
         string jsonString = Encoding.UTF8.GetString(e.Data);
         meters.Clear();
         MeterList meterList = (MeterList)JsonConvert.DeserializeObject(jsonString, typeof(MeterList));
         meters.AddRange(meterList);
         Invoke((MethodInvoker) delegate
         {
             ShowInfo(string.Format("File '{0}' ({1} bytes) received successfully", e.Name, e.Data.Count()));
             updateGUI();
         });
     }
 }
        /// <summary>
        /// 事务:将实时数据按照要求存入mysql数据库中,存储成功,则更新原始数据
        /// </summary>
        /// <param name="meters"></param>
        /// <param name="header"></param>
        public static void ExecuteInsertTransactions(MeterList meters,SourceDataHeader header)
        {
            
            List<string> insertSqls = Energy.Common.DAL.MySQLHelper.GetInsertSqls(GetEnergyData(meters),GetVoltageData(meters),
                GetCurrentData(meters),GetPowerData(meters),GetBaseElecData(meters));

            int count = 0;
            MySqlConnection connection = new MySqlConnection(Runtime.MySqlConnectString);
            SQLiteConnection sqliteConnection = new SQLiteConnection("Data Source=TempData;Version=3;");
            SQLiteCommand sQLiteCommand = new SQLiteCommand(SQLiteHelper.GetUpdateStatusSQL(header),sqliteConnection);

            connection.Open();
            sqliteConnection.Open();

            SQLiteTransaction sqliteTrans = sqliteConnection.BeginTransaction();
            MySqlTransaction mySqlTrans = connection.BeginTransaction();
            try
            {
                foreach (var sql in insertSqls)
                {
                    MySqlCommand mySqlCommand = new MySqlCommand(sql, connection, mySqlTrans);

                    count += mySqlCommand.ExecuteNonQuery();
                }
                count += sQLiteCommand.ExecuteNonQuery();

                sqliteTrans.Commit();
                mySqlTrans.Commit();

                Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "<" + Thread.CurrentThread.ManagedThreadId.ToString() + "> -> " + "事务执行成功,共影响{0}条数据。",count);
            }
            catch (Exception e)
            {
                Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "<" + Thread.CurrentThread.ManagedThreadId.ToString() + "> -> " + "事务执行失败,正在回滚操作,失败内容为:{0}。",e.Message);
                sqliteTrans.Rollback();
                mySqlTrans.Rollback();
                Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "<" + Thread.CurrentThread.ManagedThreadId.ToString() + "> -> " + "事务回滚成功!");
            }
            finally
            { 
                sQLiteCommand.Connection.Close();
                connection.Close();
                Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "<" + Thread.CurrentThread.ManagedThreadId.ToString() + "> -> " + "已关闭数据库连接!");
            }
        }
        /// <summary>
        /// 获取电压数据
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        public static List<VoltageData> GetVoltageData(MeterList data)
        {
            List<VoltageData> voltageDataList = new List<VoltageData>();

            foreach (var item in data.Meters)
            {
                VoltageData voltage = new VoltageData();
                voltage.BuildID = data.BuildId;
                voltage.MeterCode = item.MeterId;
                voltage.Time = data.CollectTime;

                MeterParam u = item.MeterParams.Find(m=>m.ParamName.ToLower() == "U".ToLower());
                MeterParam ua = item.MeterParams.Find(m => m.ParamName.ToLower() == "Ua".ToLower());
                MeterParam ub = item.MeterParams.Find(m => m.ParamName.ToLower() == "Ub".ToLower());
                MeterParam uc = item.MeterParams.Find(m => m.ParamName.ToLower() == "Uc".ToLower());
                MeterParam uab = item.MeterParams.Find(m => m.ParamName.ToLower() == "Uab".ToLower());
                MeterParam ubc = item.MeterParams.Find(m => m.ParamName.ToLower() == "Ubc".ToLower());
                MeterParam uca = item.MeterParams.Find(m => m.ParamName.ToLower() == "Uca".ToLower());

                if (u != null)
                    voltage.U = u.ParamValue;

                if (ua != null)
                    voltage.Ua = ua.ParamValue;

                if (ub != null)
                    voltage.Ub = ub.ParamValue;

                if (uc != null)
                    voltage.Uc = uc.ParamValue;

                if (uab != null)
                    voltage.Uab = uab.ParamValue;

                if (ubc != null)
                    voltage.Ubc = ubc.ParamValue;

                if (uca != null)
                    voltage.Uca = uca.ParamValue;

                voltageDataList.Add(voltage);
            }

            return voltageDataList;
        }
        private IEnumerable <InfluxDbEntry> ProcessMeterList(Site site, MeterList meterList, string measurement)
        {
            foreach (var dateGroup in from m in meterList.Meters
                     from v in m.Values
                     group new { m.Type, v.Value } by v.Date into groupByDate
                     select groupByDate)
            {
                var fields = dateGroup.ToLookup(x => x.Type);

                yield return(new InfluxDbEntry
                {
                    Time = TimeZoneInfo.ConvertTimeToUtc(dateGroup.Key, site.Location.TimeZoneInfo),
                    Fields = fields.Select(x => new InfluxDbEntryField
                    {
                        Name = x.Key,
                        Value = x.FirstOrDefault().Value
                    }).ToArray(),
                    Tags = new[]
                    {
                        new InfluxDbEntryField
                        {
                            Name = "Site",
                            Value = site.Id
                        },
                        new InfluxDbEntryField
                        {
                            Name = "SiteName",
                            Value = site.Name
                        },
                        new InfluxDbEntryField
                        {
                            Name = "Unit",
                            Value = meterList.Unit
                        },
                        new InfluxDbEntryField
                        {
                            Name = "TimeUnit",
                            Value = meterList.TimeUnit
                        },
                    },
                    Measurement = measurement
                });
            }
        }
Example #10
0
        protected override bool Execute(CodeActivityContext context)
        {
            DataTable TempTable = null;
            string    sql       = @"set nocount on;set transaction isolation level read uncommitted;select Meter_ID from Hard_MetersE422_Links where E422_ID=" + E422_ID.Get(context).ToString();

            try
            {
                var serverData = ARM_Service.REP_Query_Report(
                    sql, new List <QueryParameter>());

                if (!string.IsNullOrEmpty(serverData.Value))
                {
                    Error.Set(context, serverData.Value);
                }
                else if (serverData.Key != null)
                {
                    TempTable = serverData.Key;

                    var result = new List <int>();
                    foreach (DataRow r in TempTable.Rows)
                    {
                        if (r.ItemArray != null && r.ItemArray.Length > 0)
                        {
                            result.Add((int)r.ItemArray[0]);
                        }
                    }
                    MeterList.Set(context, result);
                }
            }

            catch (Exception ex)
            {
                Error.Set(context, ex.Message);
                if (!HideException.Get(context))
                {
                    throw ex;
                }
            }

            return(string.IsNullOrEmpty(Error.Get(context)));
        }
Example #11
0
        /// <summary>
        /// Loads a configuration from disc
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnLoadConfiguration_Click(object sender, EventArgs e)
        {
            OpenFileDialog loadFileDialog = new OpenFileDialog
            {
                Filter = "Meter Configuration File|*.meter",
                Title  = "Load Meter Configuration"
            };

            string fileName = loadFileDialog.FileName;

            if (loadFileDialog.ShowDialog() == DialogResult.OK)
            {
                ShowInfo(string.Format("Loading configuration file {0} from disc..", fileName));
                StreamReader sr   = new StreamReader(fileName);
                string       json = sr.ReadToEnd();
                sr.Close();
                ShowInfo(string.Format("Configuration file {0} successfully loaded from disc", fileName));
                meters.Clear();
                MeterList meterList = (MeterList)JsonConvert.DeserializeObject(json, typeof(MeterList));
                meters.AddRange(meterList);
                updateGUI();
            }
        }