/// <summary> /// Получить таблицу записей за конкретные период /// </summary> /// <param name="device"></param> /// <param name="table"></param> /// <param name="period"></param> /// <returns></returns> public DataTable GiveSQLrecordingPeriod(Mercury206_Database device, string table, byte period) { ConnectionState firstSTate = ConnectionState.Open; DateTime dt = DateTime.Now; try { if (myConnec.State != ConnectionState.Open) { myConnec.Open(); firstSTate = ConnectionState.Closed; } //DateTime dt_beginday = (period == 0) ? new DateTime(dt.Year, dt.Month, dt.Day, 0, 0, 0) : new DateTime(dt.Year, 1, 1, 0, 0, 0); DateTime dt_beginday = new DateTime(); DateTime dt_ending = new DateTime(); if (period == 0) { dt_beginday = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0); dt = DateTime.Now.AddDays(1); dt_ending = new DateTime(dt.Year, dt.Month, dt.Day, 0, 0, 0); } else { dt_beginday = (period > dt.Month) ? new DateTime(dt.AddYears(-1).Year, period, 1, 0, 0, 0) : new DateTime(dt.Year, period, 1, 0, 0, 0); dt_ending = (period > dt.Month) ? new DateTime(dt.Year, 1, 1, 0, 0, 0) : new DateTime(dt.Year, dt.Month, dt.Day, 0, 0, 0); } string CommandText = "SELECT * FROM " + table + " WHERE `addr` =" + device.i_addr + " AND `oleDT` >= " + dt_beginday.ToOADate() + " AND `oleDT` <= " + dt_ending.ToOADate() + " AND `period` = " + period; MySqlCommand myCommand = new MySqlCommand(CommandText, myConnec); //myConnec.Open(); //Устанавливаем соединение с базой данных. DataTable dtable = new DataTable(); MySqlDataReader dr = myCommand.ExecuteReader(); dtable.Load(dr); if (firstSTate == ConnectionState.Closed) { myConnec.Close(); } return(dtable); } catch (Exception e) { Console.WriteLine("Ошибка БД {0}", e.Message); return(null); } }
/// <summary> /// Запись помесячных срезов со счетчика /// </summary> /// <param name="buffer">`tarif1`, `tarif2`, `tarif3`, `tarif4`</param> /// <param name="device"></param> /// <param name="period">0 - содержимого тарифных аккумуляторов активной энергии /// 01...12 номер месяца. Например 01 - на начало января</param> public void writeAccumulEnergy(int[] buffer, Mercury206_Database device, byte period) { DateTime datetime = new DateTime(); if (period == 0) { datetime = DateTime.Now; } else { datetime = (period > DateTime.Now.Month) ? new DateTime(DateTime.Now.AddYears(-1).Year, period, 1, 0, 0, 0) : new DateTime(DateTime.Now.Year, period, 1, 0, 0, 0); } string CommandText = "INSERT INTO meter206 ( `addr`, `tarif1`, `tarif2`, `tarif3`, `tarif4`, `oleDT` , `id`, `period`) VALUES (" + device.i_addr + ", " + buffer[0] + ", " + buffer[1] + ", " + buffer[2] + ", " + buffer[3] + ", " + datetime.ToOADate() + ", " + device.serial_number + ", " + period + " )"; SendData(CommandText); }
/// <summary> /// Чтение конфигурационного файла /// </summary> static int readXMLdocument() { SerialPort rs_port = new SerialPort(); XmlDocument xmlDocument = new XmlDocument(); try { xmlDocument.Load("Meter_conf.xml"); //meterTable = new DataTable("Meters"); //meterTable.Columns.Add("Тип", typeof(string)); //meterTable.Columns.Add("Адрес", typeof(string)); //meterTable.Columns.Add("Статус", typeof(string)); // rs_port = new System.IO.Ports.SerialPort(); XmlNodeList devices = xmlDocument.SelectNodes("/Meters/DataBaseSQL"); //Sqlhandler_ = new SQLhandler(devices[0].Attributes["Database"].Value, devices[0].Attributes["DataSource"].Value, devices[0].Attributes["UserId"].Value, devices[0].Attributes["Password"].Value); if (devices.Count > 0) { Sqlhandler_ = new SQLhandler(devices[0].Attributes["Database"].Value, devices[0].Attributes["DataSource"].Value, devices[0].Attributes["UserId"].Value, devices[0].Attributes["Password"].Value); progSettings.tblName_meter206 = devices[0].Attributes["tbl_206"].Value; progSettings.tblName_meter230 = devices[0].Attributes["tbl_230"].Value; } devices = xmlDocument.SelectNodes("/Meters/autostart"); if (devices.Count > 0) { Console.WriteLine("Чтение параметров автозапуска"); string com = devices[0].Attributes["defaultCOMport"].Value; progSettings.TCPport = Convert.ToInt32(devices[0].Attributes["TCPport"].Value); progSettings.timeoutSerial = Convert.ToInt32(devices[0].Attributes["timeout"].Value); Int32 baudrate = Convert.ToInt32(devices[0].Attributes["baudRate"].Value); System.IO.Ports.Parity parity = (Parity)Enum.Parse(typeof(Parity), devices[0].Attributes["parity"].Value, true); System.IO.Ports.StopBits stopbits = (StopBits)Enum.Parse(typeof(StopBits), devices[0].Attributes["stopBits"].Value, true); int dataBits = Convert.ToInt32(devices[0].Attributes["dataBits"].Value); rs_port = new System.IO.Ports.SerialPort(com, baudrate, parity, dataBits, stopbits); Console.WriteLine("Работа по последовательному порту " + com + "..."); // progSettings.start = devices[0].Attributes["serverStart"].Value == "yes"; //this.WindowState = WindowState.Normal; } int i = xmlDocument.SelectNodes("//meter[@type = 'Merc234']").Count; Meter230_arr = new Mercury230_DatabaseSignals[i]; i = xmlDocument.SelectNodes("//meter[@type = 'Merc206']").Count; Meter206_arr = new Mercury206_Database[i]; i = -1; foreach (XmlNode device in xmlDocument.SelectNodes("//meter[@type = 'Merc234']")) { i++; //meterTable.Rows.Add("Меркурий 234", device.Attributes["addr"].Value, ""); byte addr = Convert.ToByte(device.Attributes["addr"].Value); string[] str_pasw_buf = device.Attributes["password_lvl1"].Value.Split(','); byte[][] byte_pass = new byte[2][]; byte_pass[0] = new byte[str_pasw_buf.Length]; for (int j = 0; j < str_pasw_buf.Length; j++) { byte_pass[0][j] = Convert.ToByte(str_pasw_buf[j]); } str_pasw_buf = device.Attributes["password_lvl2"].Value.Split(','); byte_pass[1] = new byte[str_pasw_buf.Length]; for (int j = 0; j < str_pasw_buf.Length; j++) { byte_pass[1][j] = Convert.ToByte(str_pasw_buf[j]); } int serialnumber = Convert.ToInt32(device.Attributes["id"].Value); Meter230_arr[i] = new Mercury230_DatabaseSignals(rs_port, addr, serialnumber, byte_pass, progSettings.timeoutSerial); Meter230_arr[i].ReloadData += ReloadDataGrid; // Meter230_arr[i].DataTime_nextPoint_recordSQL = DateTime.FromOADate(Sqlhandler_.NextTimetoSQLwrite(Meter230_arr[i], "meter230")); } i = -1; foreach (XmlNode device in xmlDocument.SelectNodes("//meter[@type = 'Merc206']")) { i++; uint addr = Convert.ToUInt32(device.Attributes["addr"].Value); int serialnumber = Convert.ToInt32(device.Attributes["id"].Value); Meter206_arr[i] = new Mercury206_Database(rs_port, addr, serialnumber, progSettings.timeoutSerial); // Meter206_arr[i].ReloadData += ReloadDataGrid; // Meter206_arr[i].DataTime_nextPoint_recordSQL = DateTime.FromOADate(Sqlhandler_.NextTimetoSQLwrite(Meter206_arr[i], "meter206", 0)); } // XmlDocument xmlDocument = new XmlDocument(); // xmlDocument.Load("Meter_conf.xml"); // dataGrid_meter.ItemsSource = "Meters"; Console.WriteLine("Файл считан..."); return(0); } catch (Exception e) { logger.Error("Ошибка загрузки настроек: {0}", e.Message); return(-1); //MessageBoxResult ti = MessageBox.Show(e.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); // ti = MessageBox.Show(e.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); // MessageBoxResult ti = MessageBox.Show("Проблема при старте сервера", "Ошибка сервера", MessageBoxButton.OK, MessageBoxImage.Error); //if (MessageBox.Show(e.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error) == MessageBoxResult.OK) //{ // return; //} } }