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>(); }
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); }
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>(); } } } }