private void button1_Click(object sender, EventArgs e) { textBox_login.BackColor = SystemColors.Window; textBox_password.BackColor = SystemColors.Window; if (textBox_login.Text == "") { MessageBox.Show("Введите логин!", "", MessageBoxButtons.OK, MessageBoxIcon.Error); textBox_login.BackColor = Color.Yellow; return; } sqlHandler = new SQLhandler(Database, DataSource, textBox_login.Text, textBox_password.Text); try { sqlHandler.ConnectOpen(); sqlHandler.ConnectClose(); } catch { MessageBox.Show("Проверьте подключение, логин и пароль", "Проблема с авторизацией", MessageBoxButtons.OK, MessageBoxIcon.Error); textBox_login.BackColor = Color.Red; textBox_password.BackColor = Color.Red; return; } MessageBox.Show("Успешно", "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); authoriz.Login(textBox_login.Text, textBox_password.Text, checkBox_startTimer.Checked, Convert.ToDouble(numericUpDown_intervalTime.Value)); this.Close(); }
static void RefreshMetersLimits() { refreshTimer.Enabled = false; if (Sqlhandler_ == null) { return; } try { var sqlhandlerlocal_ = new SQLhandler(Sqlhandler_.database, Sqlhandler_.DataSource, Sqlhandler_.UserId, Sqlhandler_.Password); //sqlhandler2_.myConnec. DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Mercury230_DatabaseSignals)); foreach (Mercury230_DatabaseSignals meter in Meter230_arr) { string sqlselect = String.Format("select * from dumpmeters where addr={0} and id={1}", meter.address, meter.serial_number); DataTable dt = sqlhandlerlocal_.ReadSqlTable(sqlselect); if (dt.Rows.Count > 0) { string objSerStr = dt.Rows[0]["dump"].ToString(); try { Mercury230_DatabaseSignals meterLocal = (Mercury230_DatabaseSignals)serializer.ReadObject(new System.IO.MemoryStream(Encoding.ASCII.GetBytes(objSerStr))); meter.Phases[0].current.CopyLimits(meterLocal.Phases[0].current); meter.Phases[1].current.CopyLimits(meterLocal.Phases[1].current); meter.Phases[2].current.CopyLimits(meterLocal.Phases[2].current); meter.Phases[0].voltage.CopyLimits(meterLocal.Phases[0].voltage); meter.Phases[1].voltage.CopyLimits(meterLocal.Phases[1].voltage); meter.Phases[2].voltage.CopyLimits(meterLocal.Phases[2].voltage); meter.Phases[0].power.CopyLimits(meterLocal.Phases[0].power); meter.Phases[1].power.CopyLimits(meterLocal.Phases[1].power); meter.Phases[2].power.CopyLimits(meterLocal.Phases[2].power); meter.CommonActivePower.CopyLimits(meterLocal.CommonActivePower); meter.CommonPower.CopyLimits(meterLocal.CommonPower); } catch (Exception exc) { Console.WriteLine("Ошибка чтения БД : {0}", exc.Message); } } } //else //{ // MessageBox.Show("Будут взяты данные по умолчанию\n\r", "Нет информации в БД", MessageBoxButtons.OK, MessageBoxIcon.Error); //} } catch (Exception exc) { logger.Error("Ошибка при чтении БД " + exc.Message); return; } logger.Debug("-----------Лимиты счетчиков обновлены--------------"); }
private void EditMeterForm_Load(object sender, EventArgs e) { for (int i = 0; i < meter_elem_arr_.Length; i++) { comboBox_addressMeter.Items.Add(meter_elem_arr_[i].ADDR_dgvCell.Value.ToString()); comboBox_serialNumber.Items.Add(meter_elem_arr_[i].ID_dgvCell.Value.ToString()); if (meter_elem_arr_[i].ADDR_dgvCell.Selected) { comboBox_serialNumber.SelectedIndex = i; comboBox_addressMeter.SelectedIndex = i; } } comboBox_serialNumber.SelectedIndexChanged += new EventHandler(comboBox_serialNumber_SelectedIndexChanged); comboBox_serialNumber.SelectedIndexChanged += new EventHandler(comboBox_serialNumber_SelectedIndexChanged2); comboBox_addressMeter.SelectedIndexChanged += new EventHandler(comboBox_addressMeter_SelectedIndexChanged); ControlsOffON(); ShowZoneOnLabel(); XmlNodeList xmlnode = xmldocument_.SelectNodes("//MeterServer"); if (xmlnode.Count > 0) { try { TCP_Host_s = xmlnode[0].Attributes["ipaddr"].Value; TCP_port_i = int.Parse(xmlnode[0].Attributes["port"].Value); } catch (Exception exp) { MessageBox.Show(exp.Message); } } else { MessageBox.Show("Ошибка чтения данных для связи с сервером", "", MessageBoxButtons.OK, MessageBoxIcon.Error); } XmlNodeList Nodes = xmldocument_.SelectNodes("//DataBaseSQL"); if (Nodes.Count > 0) { sqlhandler_ = new SQLhandler(Nodes[0].Attributes["Database"].Value, Nodes[0].Attributes["DataSource"].Value, Nodes[0].Attributes["UserId"].Value, Nodes[0].Attributes["Password"].Value); } else { MessageBox.Show("Ошибка в данных для подключения к БД", "", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <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; //} } }
public void LoadWaterMeters() { Action <DataGridViewTextBoxCell, XmlNode, string> writeCellsValue = (datagridCell, nodes, atr) => { //if (nodes.Count == 0) // return; try { datagridCell.Value = nodes.Attributes[atr].Value; } catch (ArgumentException) { datagridCell.Value = "#error#"; return; } catch (NullReferenceException) { datagridCell.Value = "н/д"; return; } }; XmlDocument xmlDocument = new XmlDocument(); // try // { xmlDocument.Load("waterMeter_conf.xml"); // Настройка связи с БД XmlNodeList Nodes = xmlDocument.SelectNodes("//DataBaseSQL"); if (Nodes.Count > 0) { sqlHandler = new SQLhandler(Nodes[0].Attributes["Database"].Value, Nodes[0].Attributes["DataSource"].Value, Nodes[0].Attributes["UserId"].Value, Nodes[0].Attributes["Password"].Value); TableWatermetersData = Nodes[0].Attributes["tabledata"].Value; TableWatermetersNameLink = Nodes[0].Attributes["tableLinkName"].Value; } // Nodes = xmlDocument.SelectNodes("//watermeter"); WaterMeters = new WaterMeter_Cells[Nodes.Count]; DataGridViewRow row; if (Nodes.Count > 0) { for (int i = 0; i < Nodes.Count; i++) { row = new DataGridViewRow(); WaterMeters[i] = new WaterMeter_Cells(); row.Cells.AddRange( //WaterMeters[i].Status, WaterMeters[i].NameNode, WaterMeters[i].Watermeter_SerialNumber, WaterMeters[i].LocationNode, WaterMeters[i].Consumer, WaterMeters[i].Function, WaterMeters[i].Data ); this.dataGridView_watermeter.Rows.Add(row); writeCellsValue(WaterMeters[i].NameNode, Nodes[i].ParentNode /*для имени нужен родительский узел*/, "name"); writeCellsValue(WaterMeters[i].LocationNode, Nodes[i].ParentNode /*нужен родительский узел*/, "location"); writeCellsValue(WaterMeters[i].Consumer, Nodes[i].ParentNode, "consumer"); writeCellsValue(WaterMeters[i].Watermeter_SerialNumber, Nodes[i], "snumber"); writeCellsValue(WaterMeters[i].Function, Nodes[i], "function"); // Подчитаываем сдвиг показаний if (Nodes[i].ChildNodes != null) { foreach (XmlNode nd in Nodes[i].ChildNodes) { if (nd.Name == "point") { try { WaterMeters[i].offsetPoint.SetTimePointFromStrings(nd.Attributes["time"].Value, nd.Attributes["data"].Value); } catch (ArgumentException) { Console.WriteLine("Ошибка чтения сдвига для счетчика №{0}", WaterMeters[i].Watermeter_SerialNumber.Value); } } } } } } dataGridView_watermeter.AutoResizeColumns(); /* * Перекресный запрос по номеру счетчика * SELECT mdate.* FROM meternamelink mlink, float_watermeter_table_test mdate * where locate('55144578', mlink.NameMeter) > 0 and mlink.ChID = mdate.chID and flagsMask = 0 ; * * * */ // Корректируем сдвиг показаний, сопоставля показания с прибора учета и базы данных Task readOffsetFromSql = Task.Factory.StartNew(delegate { for (int i = 0; i < WaterMeters.Length; i++) { string sqlselect = "SELECT mdate.* FROM " + TableWatermetersNameLink + " mlink, " + TableWatermetersData + " mdate where locate('" + WaterMeters[i].Watermeter_SerialNumber.Value.ToString() + "', mlink.NameMeter) > 0 and mlink.ChID = mdate.chID and mdate.flagsMask = 0 and mdate.oleDT < " + WaterMeters[i].offsetPoint.TimePoint.ToOADate().ToString(System.Globalization.CultureInfo.InvariantCulture) + " order by Id desc limit 1"; DataTable dt = new DataTable(); try { dt = sqlHandler.ReadSqlTable(sqlselect); } catch (Exception e) { Console.WriteLine("Ошибка чтения к базе {0}", e.Message); break; } if (dt.Rows.Count > 0) { //Console.WriteLine(" Счетчик {0} - Значение доп сдвига {1} время {2}", WaterMeters[i].Watermeter_SerialNumber.Value, // dt.Rows[0]["Value"], // DateTime.FromOADate((double)dt.Rows[0]["oleDT"])); WaterMeters[i].offsetPoint.OffSetFromBase = (float)dt.Rows[0]["Value"]; } } Console.WriteLine("Сдвиги водосчетчиков считаны"); }); ReloadWaterMetersTimer = new System.Timers.Timer(3000); ReloadWaterMetersTimer.Elapsed += this.OnReloadWaterMetersFromMySql; ReloadWaterMetersTimer.AutoReset = false; //XmlNodeList devices = xmlDocument.SelectNodes("/watermeters/DataBaseSQL"); //if (devices.Count > 0) }
public void ReadWaterBase(DateTime dateTime_start, DateTime dateTime_end) { var dt_start_local = new DateTime(dateTime_start.Year, dateTime_start.Month, dateTime_start.Day); var dt_end_local = new DateTime(dateTime_end.Year, dateTime_end.Month, dateTime_end.Day); string jsTamplateAdminGroup = "adminGroupsArr.push(new AdminGroup(\"$name\", \"$idgroup\"));\n"; string jsTamplateWaterNode = "arr.push(new WaterNode(\"$nameid\", \"$info\", \"$idgroup\"));\n"; string jsTamplateWatermeter = "arr[arr.length - 1].waterMeters.push(new Watermeter(\"$id\", \"$type\", $startdata, $enddata));\n"; var xmlDocument = new XmlDocument(); xmlDocument.Load("waterMeter_conf.xml"); XmlNodeList Nodes = xmlDocument.SelectNodes("//DataBaseSQL"); if (Nodes.Count > 0) { sqlHandler = new SQLhandler(Nodes[0].Attributes["Database"].Value, Nodes[0].Attributes["DataSource"].Value, Nodes[0].Attributes["UserId"].Value, Nodes[0].Attributes["Password"].Value); TableWatermetersData = Nodes[0].Attributes["tabledata"].Value; TableWatermetersNameLink = Nodes[0].Attributes["tableLinkName"].Value; } else { Console.WriteLine("Отсутствуют данные к подключению к базе!"); return; } // получаем группы водомерных узлов XmlNodeList watermeterunits = xmlDocument.SelectNodes("watermeters/node"); int ComNumOfMeters = xmlDocument.SelectNodes("//watermeter").Count; if (setMaxLevelProgressbar != null) { setMaxLevelProgressbar(ComNumOfMeters); } if (watermeterunits.Count > 0) { string jsString = ""; foreach (XmlNode admingroup in xmlDocument.SelectNodes("watermeters/admin_groups/adgroup")) { jsString += jsTamplateAdminGroup .Replace("$name", admingroup.Attributes["name"].Value) .Replace("$idgroup", admingroup.Attributes["idgroup"].Value); } foreach (XmlNode metersunit in watermeterunits) { jsString += jsTamplateWaterNode .Replace("$nameid", metersunit.Attributes["name"].Value) .Replace("$info", metersunit.Attributes["consumer"].Value) .Replace("$idgroup", metersunit.Attributes["idgroup"].Value); foreach (XmlNode watermeter in metersunit.ChildNodes) { WaterMeterConsumption localmeter = GiveWaterData(watermeter, dt_start_local, dt_end_local); jsString += jsTamplateWatermeter .Replace("$id", localmeter.meterId) .Replace("$type", localmeter.waterType) .Replace("$startdata", localmeter.ConsumptionStartPoint.ToString(CultureInfo.InvariantCulture)) .Replace("$enddata", localmeter.ConsumptionEndPoint.ToString(CultureInfo.InvariantCulture)); if (invokeIncrementProgressbar != null) { invokeIncrementProgressbar(); } } } string rangeStr = String.Format("c {0} по {1}", dateTime_start.ToString("dd.MM.yyyy"), dateTime_end.ToString("dd.MM.yyyy")); string tamplateStr = System.IO.File.ReadAllText(@"tamplates\WaterTamplate.report"); tamplateStr = tamplateStr .Replace("$comment", String.Format("Показания за период {0} <br>Общее количество счетчиков {1}", rangeStr, ComNumOfMeters.ToString())) .Replace("$jscode", jsString); string nameFile = customSavePath ?? @"Reports\" + String.Format("Водосчетчики_за_Период_{0}_", rangeStr) + String.Format("-{0}_{1}_{2}", DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second) + ".html"; System.IO.File.WriteAllText(nameFile, tamplateStr); if (openReportAfter) { System.Diagnostics.Process.Start(nameFile); } } }
public void ReadElectricBase(DateTime dateTime_start, DateTime dateTime_end, bool forMonth = false, bool alldaysum = false) { string jsTamplateAdminGroup = "adminGroupsArr.push(new AdminGroup(\"$name\", \"$idgroup\"));\n"; //DateTime date = new DateTime((int)Year_numericUpDown1.Value, month_comboBox.SelectedIndex + 1, 1); var xmlDocument = new XmlDocument(); xmlDocument.Load("Meter_conf.xml"); XmlNodeList Nodes = xmlDocument.SelectNodes("//DataBaseSQL"); if (Nodes.Count > 0) { sqlHandler = new SQLhandler(Nodes[0].Attributes["Database"].Value, Nodes[0].Attributes["DataSource"].Value, Nodes[0].Attributes["UserId"].Value, Nodes[0].Attributes["Password"].Value); } else { Console.WriteLine("Отсутствуют данные к подключению к базе!"); return; } var admingroups_nodes = xmlDocument.SelectNodes(@"//adgroup"); int ComNumOfMeters = xmlDocument.SelectNodes("//meter").Count; if (setMaxLevelProgressbar != null) { setMaxLevelProgressbar(ComNumOfMeters); } DateTime dt_start = dateTime_start; DateTime dt_end = dateTime_end; // Хранилище выходного файла StringBuilder strbu = new StringBuilder(); if (ComNumOfMeters > 0) { //string jsString = ""; // Генерация списков с административными зонами foreach (XmlNode admingroup in admingroups_nodes /*xmlDocument.SelectNodes("watermeters/admin_groups/adgroup")*/) { strbu.Append(jsTamplateAdminGroup .Replace("$name", admingroup.Attributes["name"].Value) .Replace("$idgroup", admingroup.Attributes["idgroup"].Value) ); } strbu.Append(";electricGrid ="); ReadElectGrid(dateTime_start, dateTime_end, xmlDocument.SelectNodes("/Meters/group"), strbu, forMonth, alldaysum); // Удалить последнюю запятую strbu.Remove(strbu.Length - 1, 1); } string rangeStr = $"c {dateTime_start.ToString("dd.MM.yyyy")} по {dateTime_end.ToString("dd.MM.yyyy")}"; string tamplateStr = System.IO.File.ReadAllText(@"tamplates\electric_tamplate.report"); tamplateStr = tamplateStr .Replace("$comment", String.Format("Показания за период {0} <br>Общее количество счетчиков {1}", rangeStr, ComNumOfMeters)) .Replace("$arhive", strbu.ToString()); string nameFile = customSavePath ?? @"Reports\" + String.Format("Электросчетчики_за_Период_{0}_", rangeStr) + String.Format("-{0}_{1}_{2}", DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second) + ".html"; System.IO.File.WriteAllText(nameFile, tamplateStr); if (openReportAfter) { System.Diagnostics.Process.Start(nameFile); } }