Example #1
0
 public DataDBRecord(string header, ModbusInitData init)
 {
     this.Header = header;
     this.Init = init;
     Min = 10e10;
     Max = -10e10;
     Avg = 0;
     Count = 0;
     DiffVals = new SortedList<DateTime, double>();
     Vals = new SortedList<DateTime, double>();
 }
Example #2
0
 public void call(string name, ModbusInitData data)
 {
     double val=Double.NaN;
     try {
         MethodInfo mi = typeof(ModbusCalc).GetMethod(name, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
         val = (double)mi.Invoke(this, new object[] { });
     } catch (Exception e) {
         if (!e.ToString().Contains("FlagError")) {
             Logger.Error("Ошибка при расчете метода " + name);
             Logger.Error(e.ToString());
         }
         val = Double.NaN;
     }
     Data[InitCalc.ID + "_" + data.ID] = val;
     ResultData.Add(data.ID, val);
 }
Example #3
0
        public void writeData(RWModeEnum mode)
        {
            SortedList <string, List <string> > inserts = new SortedList <string, List <string> >();
            SortedList <string, List <string> > deletes = new SortedList <string, List <string> >();
            string insertIntoHeader = "INSERT INTO Data (parnumber,object,item,value0,objtype,data_date,rcvstamp,season)";
            string frmt             = "SELECT {0}, {1}, {2}, {3}, {4}, '{5}', '{6}', {7}";
            string frmDel           = "(parnumber={0} and object={1} and objType={2} and item={3} and data_date='{4}')";

            foreach (DataDBRecord rec in Data.Values)
            {
                ModbusInitData init = InitArray.FullData[rec.Header];
                if (init.WriteToDBHH || init.WriteToDBMin)
                {
                    if (init.WriteToDBMin && mode == RWModeEnum.min)
                    {
                        string insert = String.Format(frmt, init.ParNumberMin, init.Obj, init.Item, rec.Avg, init.ObjType, Date.AddMinutes(1), DateTime.Now, 0);
                        string delete = String.Format(frmDel, init.ParNumberMin, init.Obj, init.ObjType, init.Item, Date.AddMinutes(1));
                        if (!inserts.ContainsKey(init.DBNameMin))
                        {
                            inserts.Add(init.DBNameMin, new List <string>());
                            deletes.Add(init.DBNameMin, new List <string>());
                        }

                        inserts[init.DBNameMin].Add(insert);
                        deletes[init.DBNameMin].Add(delete);
                    }

                    if (init.WriteToDBHH && mode == RWModeEnum.hh)
                    {
                        string insert = String.Format(frmt, init.ParNumberHH, init.Obj, init.Item, rec.Avg, init.ObjType, Date.AddMinutes(30), DateTime.Now, 0);
                        string delete = String.Format(frmDel, init.ParNumberHH, init.Obj, init.ObjType, init.Item, Date.AddMinutes(30));
                        if (!inserts.ContainsKey(init.DBNameHH))
                        {
                            inserts.Add(init.DBNameHH, new List <string>());
                            deletes.Add(init.DBNameHH, new List <string>());
                        }
                        inserts[init.DBNameHH].Add(insert);
                        deletes[init.DBNameHH].Add(delete);
                    }
                }
            }

            foreach (KeyValuePair <string, List <string> > de in deletes)
            {
                List <string> qDels = new List <string>();
                for (int i = 0; i < de.Value.Count; i++)
                {
                    qDels.Add(de.Value[i]);
                    if ((i + 1) % 20 == 0 || i == de.Value.Count - 1)
                    {
                        string     deletesSQL = String.Join(" OR ", qDels);
                        string     deleteSQL  = String.Format("{0}\n{1}", "DELETE from DATA where", deletesSQL);
                        SqlCommand command    = null;
                        command             = PiramidaAccess.getConnection(de.Key).CreateCommand();
                        command.CommandText = deleteSQL;
                        //Logger.Info(deleteSQL);
                        try {
                            command.ExecuteNonQuery();
                        } catch (Exception e) {
                            Logger.Error("Ошибка в запросе " + e);
                            Logger.Info(deleteSQL);
                        }
                        qDels = new List <string>();
                    }
                }
            }

            foreach (KeyValuePair <string, List <string> > de in inserts)
            {
                List <string> qInserts = new List <string>();
                for (int i = 0; i < de.Value.Count; i++)
                {
                    qInserts.Add(de.Value[i]);
                    if ((i + 1) % 20 == 0 || i == de.Value.Count - 1)
                    {
                        string     insertsSQL = String.Join("\nUNION ALL\n", qInserts);
                        string     insertSQL  = String.Format("{0}\n{1}", insertIntoHeader, insertsSQL);
                        SqlCommand command    = null;
                        command             = PiramidaAccess.getConnection(de.Key).CreateCommand();
                        command.CommandText = insertSQL;
                        //Logger.Info(insertSQL);
                        try{
                            command.ExecuteNonQuery();
                        } catch (Exception e) {
                            Logger.Error("Ошибка в запросе " + e);
                            Logger.Info(insertSQL);
                        }
                        qInserts = new List <string>();
                    }
                }
            }
        }