Exemple #1
0
        /// <summary>
        /// Преобразует дату в идентификатор архивной записи и возвращает значение в соответствии с 
        /// указанным param. Правильное преобразование не гарантируется. 
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="param"></param>
        /// <param name="tarif"></param>
        /// <param name="recordValue"></param>
        /// <returns></returns>
        public bool ReadDailyValuesPT(DateTime dt, ushort param, ushort tarif, ref float recordValue)
        {
            ArchiveValue resArchVal = new ArchiveValue();
            ArchiveValue lastArchiveVal = new ArchiveValue();
            lastArchiveVal.id = -1;

            int recCount = -1, lastRecId = -1;

            if (ReadArchiveValCountId(ref recCount, ref lastRecId))
            {
                if (ReadArchiveValById((uint)lastRecId, ref lastArchiveVal))
                    goto SUCCESS;
            }

            /*
            if (ReadArchiveLastVal(ref lastArchiveVal))
            {
                if (lastArchiveVal.dt.Date == dt.Date)
                    goto SUCCESS;
            }

            if (dt.Date == DateTime.Now.Date && DateTime.Now.Hour >= 16)
            {
                if (ReadCurrentValues(param, tarif, ref recordValue))
                    return true;
            }
             * */

            WriteToLog("ReadDailyValuesPT: fail...");
            return false;

            SUCCESS:
            int lastid = lastArchiveVal.id;
            if (lastid == -1) return false;

            DateTime lastRecDt = lastArchiveVal.dt;

            if (dt.Date > lastRecDt.Date)
            {
                WriteToLog("ReadDailyValues: на указанную дату записей не обнаружено: " + dt.ToShortDateString());
                return false;
            }

            WriteToLog("ReadDailyValues: lastRecDt: " + lastRecDt.ToShortDateString());
            WriteToLog("ReadDailyValues: lastId: " + lastid.ToString());
            WriteToLog("ReadDailyValues: requiredDt: " + dt.ToShortDateString());

            //преобразуем dt в id
            TimeSpan ts = lastRecDt.Date - dt.Date;
            if (ts.TotalDays == 0)
            {
                resArchVal = lastArchiveVal;
            }
            else
            {
                uint resRecId = (uint)(lastid - ts.TotalDays);
                WriteToLog("ReadDailyValues: requiredId: " + resRecId.ToString());
                try
                {
                    if (!ReadArchiveValById(resRecId, ref resArchVal))
                    {
                        string str = String.Format("ReadDailyValues: запись от числа {0} c id {1} не найдена",
                            dt.ToShortDateString(), resRecId.ToString());
                        WriteToLog(str);
                        return false;
                    }
                }
                catch (Exception ex)
                {
                    WriteToLog("ReadDailyValues: ReadArchiveValById ex: " + ex.Message);
                }
            }

            switch (param)
            {
                case 1:
                    {
                        recordValue = resArchVal.energy;
                        break;
                    }
                case 2:
                    {
                        recordValue = resArchVal.volume;
                        break;
                    }
                case 3:
                    {
                        recordValue = resArchVal.timeOn;
                        break;
                    }
                case 4:
                    {
                        recordValue = resArchVal.timeErr;
                        break;
                    }
                default:
                    {
                        WriteToLog("ReadDailyValues: для параметра " + param.ToString() + " нет обработчика");
                        return false;
                    }

            }

            return true;
        }
Exemple #2
0
        bool ReadArchiveValById(uint id, ref ArchiveValue archVal)
        {
            byte[] cmd = { m_addr, 0x2f, 0x05, 0x00 };
            byte[] cmd_data = new byte[0x05];

            //преобразуем целочисленные id в посл.байт от младшему к старшему
            byte[] id_bytes = BitConverter.GetBytes(id);
            if (!BitConverter.IsLittleEndian)
                Array.Reverse(id_bytes);

            //сформируем команду, где первый байт 0х02 - на начало суток (С2)
            cmd_data[0] = 0x02;
            Array.Copy(id_bytes, 0, cmd_data, 1, id_bytes.Length);

            byte[] data_arr = null;

            if (!SendPT01_CMD(cmd, ref data_arr, cmd_data)) return false;

            byte crc_check = CRC8(data_arr, data_arr.Length);
            if (crc_check != 0x0)
            {
                WriteToLog("ReadArchiveValById: check sum error");
                return false;
            }

            try
            {
                ArchiveValueParser avp = new ArchiveValueParser(data_arr, this.m_address, this.m_vport);
                return avp.GetArchiveValue(ref archVal);
            }
            catch(Exception ex)
            {
                WriteToLog("ReadArchiveValById: " + ex.Message);
                return false;
            }
        }
Exemple #3
0
 public bool GetArchiveValue(ref ArchiveValue archVal)
 {
     if (isOk)
     {
         archVal = this.archVal;
         return true;
     }
     else
     {
         return false;
     }
 }
Exemple #4
0
        bool ReadArchiveLastVal(ref ArchiveValue archVal)
        {
            byte[] cmd = { m_addr, 0x2e, 0x02, 0x00 };
            byte[] cmd_data = { 0x02, 0x01 };

            byte[] data_arr = null;

            if (!SendPT01_CMD(cmd, ref data_arr, cmd_data)) return false;

            byte crc_check = CRC8(data_arr, data_arr.Length);
            if (crc_check != 0x0)
            {
                WriteToLog("ReadLastArchiveVal: данные приняты неверно");
                return false;
            }

            try
            {
                ArchiveValueParser avp = new ArchiveValueParser(data_arr, this.m_address, this.m_vport);
                avp.GetArchiveValue(ref archVal);
            }
            catch (Exception ex)
            {
                WriteToLog("ReadArchiveLastVal: " + ex.Message);
                return false;
            }

            return true;
        }