示例#1
0
 /// <summary>
 /// Записывает в бинарный файл fileShort пакет типа binaryReport
 /// </summary>
 /// <param name="writer">Бинарный файл fileShort</param>
 /// <param name="binaryReport">Пакет данных</param>
 private void WriteBinaryReport(BinaryWriter writer, BinaryReport binaryReport)
 {
     writer.Write(binaryReport.timestamp);
     writer.Write(binaryReport.id);
     writer.Write(binaryReport.is29bit);
     writer.Write(binaryReport.vallen);
     for (int i = 0; i < binaryReport.vallen; i++)
     {
         writer.Write(binaryReport.val[i]);
     }
     writer.Write(binaryReport.colorspec);
     writer.Write(binaryReport.colors[0]);
     writer.Write(binaryReport.colors[1]);
     writer.Write(binaryReport.colors[2]);
     writer.Write(binaryReport.colors[3]);
     writer.Write(binaryReport.colors[4]);
 }
示例#2
0
        public bool AddActivity(DateTime timeStart, DateTime timeFinish, TypeActivity activity, int value)
        {
            string       localReport = "";
            BinaryWriter fileShort   = new BinaryWriter(File.Open(puthShortReport, FileMode.Open), System.Text.Encoding.Default);
            StreamWriter fileFull    = new StreamWriter(puthFullReport, true, System.Text.Encoding.Default);
            int          ms          = Convert.ToInt32((timeFinish - timeStart).Ticks / TimeSpan.TicksPerMillisecond);
            uint         stepMs      = 200;
            int          startFuel   = fuel;
            //Показание счетчика для отчета, с погрешностью
            int valueFuel = fuel;
            //id пакета данный
            int id = 0;

            // Расход топлива за данный промежуток времени (мл)
            double fuelConsumption = 0;

            if (activity == TypeActivity.Ride)
            {
                fuelConsumption  = FuelConsumption(value, d);
                fuelConsumption *= 1.0 * ms / 3600000 * 1000;
            }

            //Проверка на переполнение топливного бака или досрочное окончание топлива
            if ((fuelConsumption > fuel && activity == TypeActivity.Ride) ||
                activity == TypeActivity.ReFuel && fuel + value > maxFuel)
            {
                return(false);
            }

            timeNow = Convert.ToUInt32(((timeStart.Hour * 60 + timeStart.Minute) * 60 + timeStart.Second) * 1000 + timeStart.Millisecond);

            uint         startTime = timeNow;
            BinaryReport binaryReport;

            for (uint i = stepMs; i <= ms; i += stepMs)
            {
                binaryReport           = new BinaryReport();
                timeNow                = startTime + i;
                binaryReport.timestamp = timeNow;

                //Формирование пакета с id = 125: уровень топлива в баке
                id              = 125;
                localReport     = ToHex(id, 4) + "\t";
                binaryReport.id = Convert.ToUInt32(id);

                if (activity == TypeActivity.ReFuel)
                {
                    fuel = startFuel + Convert.ToInt32(Math.Truncate(1.0 * value / ms * i));
                    //Показание счетчика для отчета, с погрешностью
                    valueFuel = NoizeFuel(NoizeReFuel);
                }
                else if (activity == TypeActivity.Ride)
                {
                    fuel = startFuel - Convert.ToInt32(Math.Truncate(fuelConsumption / ms * i));
                    //Показание счетчика для отчета, с погрешностью
                    valueFuel = NoizeFuel(NoizeRide);
                }
                else if (activity == TypeActivity.Stay)
                {
                    //Показание счетчика для отчета, с погрешностью
                    valueFuel = NoizeFuel(NoizeStay);
                }

                const byte leng = 8;
                binaryReport.vallen = leng;
                binaryReport.val    = new byte[leng];
                random.NextBytes(binaryReport.val);
                binaryReport.val[5] = FuelInPercentage(valueFuel);
                for (int j = 0; j < leng; j++)
                {
                    localReport += ToHex(binaryReport.val[j], 2);
                }

                localReport += "\t" + (timeStart.AddMilliseconds(i)).ToString();
                localReport += "\t" + id.ToString() + "\t" + (1.0 * FuelInPercentage(valueFuel) / 2).ToString() + " %";
                localReport += "\t\t" + (1.0 * fuel / 1000).ToString() + " л";
                localReport += "\t" + (1.0 * FuelInPercentage(fuel) / 2).ToString() + " %";
                localReport += "\n";

                fileFull.Write(localReport);

//ОТКЛЮЧИЛА ВЫВОД НА ЭКРАН
//report += localReport;

                binaryReport.colorspec = 1;
                binaryReport.colors    = new ushort[] { 0xfdfd, 0xfdfd, 0xfdfd, 0xfdfd, 0 };
                WriteBinaryReport(fileShort, binaryReport);

                if (i % 500 == 0)
                {
                    //рандомные пакеты каждые 30 мс
                    binaryReport           = new BinaryReport();
                    binaryReport.timestamp = timeNow;

                    id              = 77;
                    localReport     = ToHex(id, 4) + "\t";
                    binaryReport.id = Convert.ToUInt32(id);

                    const byte len = 8;
                    binaryReport.vallen = len;
                    binaryReport.val    = new byte[len];
                    random.NextBytes(binaryReport.val);

                    for (int j = 0; j < len; j++)
                    {
                        localReport += ToHex(binaryReport.val[j], 2);
                    }

                    localReport += "\t" + (timeStart.AddMilliseconds(i)).ToString() + "\n";
                    fileFull.Write(localReport);

//ОТКЛЮЧИЛА ВЫВОД НА ЭКРАН
//report += localReport;

                    binaryReport.colorspec = 1;
                    binaryReport.colors    = new ushort[] { 0xfdfd, 0xfdfd, 0xfdfd, 0xfdfd, 0 };
                    WriteBinaryReport(fileShort, binaryReport);
                }

                if (i % 1000 == 0)
                {
                    //рандомные пакеты каждые 0,5 сек
                    binaryReport           = new BinaryReport();
                    binaryReport.timestamp = timeNow;

                    id              = 88;
                    localReport     = ToHex(id, 4) + "\t";
                    binaryReport.id = Convert.ToUInt32(id);

                    const byte len = 6;
                    binaryReport.vallen = len;
                    binaryReport.val    = new byte[len];
                    random.NextBytes(binaryReport.val);

                    for (int j = 0; j < len; j++)
                    {
                        localReport += ToHex(binaryReport.val[j], 2);
                    }

                    localReport += "\t\t" + (timeStart.AddMilliseconds(i)).ToString() + "\n";
                    fileFull.Write(localReport);

//ОТКЛЮЧИЛА ВЫВОД НА ЭКРАН
//report += localReport;

                    binaryReport.colorspec = 1;
                    binaryReport.colors    = new ushort[] { 0xfdfd, 0xfdfd, 0xfdfd, 0xfdfd, 0 };
                    WriteBinaryReport(fileShort, binaryReport);
                }

                if (i % 3000 == 0)
                {
                    //рандомные пакеты каждую секунду
                    binaryReport           = new BinaryReport();
                    binaryReport.timestamp = timeNow;

                    id              = 99;
                    localReport     = ToHex(id, 4) + "\t";
                    binaryReport.id = Convert.ToUInt32(id);

                    const byte len = 6;
                    binaryReport.vallen = len;
                    binaryReport.val    = new byte[len];
                    random.NextBytes(binaryReport.val);

                    for (int j = 0; j < len; j++)
                    {
                        localReport += ToHex(binaryReport.val[j], 2);
                    }

                    localReport += "\t\t" + (timeStart.AddMilliseconds(i)).ToString() + "\n";
                    fileFull.Write(localReport);

                    //ОТКЛЮЧИЛА ВЫВОД НА ЭКРАН
                    //report += localReport;

                    binaryReport.colorspec = 1;
                    binaryReport.colors    = new ushort[] { 0xfdfd, 0xfdfd, 0xfdfd, 0xfdfd, 0 };
                    WriteBinaryReport(fileShort, binaryReport);
                }
            }
            fileFull.Close();
            fileShort.Close();
            return(true);
        }