コード例 #1
0
ファイル: SQLhandler.cs プロジェクト: r0mer/electric-meter
    /// <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);
        }
    }
コード例 #2
0
ファイル: SQLhandler.cs プロジェクト: r0mer/electric-meter
    /// <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);
    }
コード例 #3
0
        /// <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;
                //}
            }
        }