private static void Initialize() { settings = new DataSet(); settings.ReadXml($"{AppDomain.CurrentDomain.BaseDirectory}Settings.xml"); //Read the database DBManager db = new DBManager(); PlcManager.Controllers = db.GetPlcList(); PlcManager.DistinctIPs = PlcManager.Controllers.Select(i => i.Ip).Distinct().ToList(); PlcManager.DeviceSetting = db.GetDeviceSettings(); //Disconnect from the database db.Disconnect(); //Get general settings DataRow generalSettings = settings.Tables["tblGeneral"].Rows[0]; PlcManager.StartReg = Convert.ToInt32(generalSettings["fldStartRegister"]); PlcManager.AmoutToRead = Convert.ToInt32(generalSettings["fldAmountToRead"]); //Set the timer timer = new System.Timers.Timer(5000); timer.Elapsed += Timer_Elapsed; timer.Enabled = true; timer.AutoReset = true; //Set to -1 to avoid reading skip, if the app is started at midnight lastHour = -1; }
public static void StartReading(ReadingType rType) { foreach (Task task in tasks) { //Start the thread task.Start(); try { task.Wait(); } catch { } Thread.Sleep(100); } Task t = Task.WhenAll(tasks); try { t.Wait(); } catch { } //TODO Move this code to higher level if (t.IsCompleted) { string query = ""; switch (rType) { case ReadingType.Hourly: { query += DBManager.AssembleTableQuery("tblwatermeters1h"); } break; case ReadingType.Daily: { query += DBManager.AssembleTableQuery("tblwatermeters1h"); query += DBManager.AssembleTableQuery("tblwatermeters"); } break; default: throw new NotImplementedException($"Type '{rType.ToString()}' not implemented."); } //Execute the query DBManager db = new DBManager(); db.Execute(query); Output.Report("Database updated."); //TODO Add database cleanup db.Disconnect(); //Release resources foreach (Task task in tasks) { task.Dispose(); } t.Dispose(); } }