Пример #1
0
 /// <summary>Set ecu time</summary>
 /// <param name="NewTime">Date time object of new ecu time</param>
 /// <returns>True in success</returns>
 public ReturnValue SetTime(DateTime NewTime)
 {
     byte[] TimeBuffer = new byte[7];
     // Achtung ! Uhrzeit ist in UTC (ohne DST) !
     NewTime       = NewTime.ToUniversalTime();
     TimeBuffer[0] = BinaryCodedDecimals.ByteToBCD((byte)NewTime.Second);       // Sekunde in BCD
     TimeBuffer[1] = BinaryCodedDecimals.ByteToBCD((byte)NewTime.Minute);       // Minute in BCD
     TimeBuffer[2] = BinaryCodedDecimals.ByteToBCD((byte)NewTime.Hour);         // Stunde in BCD
     TimeBuffer[3] = BinaryCodedDecimals.ByteToBCD((byte)NewTime.DayOfWeek);    // Wochentag in BCD
     TimeBuffer[4] = BinaryCodedDecimals.ByteToBCD((byte)NewTime.Day);          // Tag (im Monat) in BCD
     TimeBuffer[5] = BinaryCodedDecimals.ByteToBCD((byte)NewTime.Month);        // Monat in BCD
     TimeBuffer[6] = BinaryCodedDecimals.ByteToBCD((byte)(NewTime.Year % 100)); // Jahr (ohne Jahrzehnt) in BCD
     return(mEcu.Write(Comm.OrderByte.SetTime, (UInt16)TimeBuffer.Length, ref TimeBuffer, 10));
 }
Пример #2
0
        /// <summary>Parse byte array buffer to item list</summary>
        private void Parse()
        {
            Items = new List <InternalDataItem>();
            int Pos = 0;

            InternalDataItem it_time = new InternalDataItem();
            byte             y       = BinaryCodedDecimals.BCDToByte(mRawData[6]);
            byte             mo      = BinaryCodedDecimals.BCDToByte((byte)(mRawData[5] & 0x1F));
            byte             d       = BinaryCodedDecimals.BCDToByte((byte)(mRawData[4] & 0x3F));
            byte             h       = BinaryCodedDecimals.BCDToByte((byte)(mRawData[2] & 0x1F));
            byte             mi      = BinaryCodedDecimals.BCDToByte((byte)(mRawData[1] & 0x7F));
            byte             s       = BinaryCodedDecimals.BCDToByte((byte)(mRawData[0] & 0x7F));

            mo = mo > 12 ? (byte)0 : mo;
            d  = d > 31 ? (byte)0 : d;
            h  = h > 23 ? (byte)0 : h;
            mi = mi > 59 ? (byte)0 : mi;
            s  = s > 59 ? (byte)0 : s;
            DateTime dt = new DateTime(y + 2000, mo, d, h, mi, s);

            it_time.Group       = "RTC";
            it_time.Name        = "ECU Zeit [UTC]";
            it_time.ValueString = dt.ToString("dd.MM.yyyy HH:mm:ss");
            Items.Add(it_time);
            Pos = Pos + 6;

            InternalDataItem it_RtcControl = new InternalDataItem();

            it_RtcControl.Group       = "RTC";
            it_RtcControl.Name        = "RtcControl";
            it_RtcControl.ValueString = (mRawData[Pos]).ToString();
            Items.Add(it_RtcControl);
            Pos = Pos + 1;

            InternalDataItem it_EcuStatus = new InternalDataItem();

            it_EcuStatus.Group       = "RTC";
            it_EcuStatus.Name        = "EcuStatus";
            it_EcuStatus.ValueString = (mRawData[Pos]).ToString();
            Items.Add(it_EcuStatus);
            Pos = Pos + 1;

            InternalDataItem it_LastThermRegeneration = new InternalDataItem();

            it_LastThermRegeneration.Group       = "RTC";
            it_LastThermRegeneration.Name        = "LastThermRegeneration";
            it_LastThermRegeneration.ValueString = BitConverter.ToUInt32(mRawData, Pos).ToString();
            Items.Add(it_LastThermRegeneration);
            Pos = Pos + 4;

            InternalDataItem it_FlashAqRingPos = new InternalDataItem();

            it_FlashAqRingPos.Group       = "RTC";
            it_FlashAqRingPos.Name        = "FlashAqRingPos";
            it_FlashAqRingPos.ValueString = (mRawData[Pos]).ToString();
            Items.Add(it_FlashAqRingPos);
            Pos = Pos + 1;

            InternalDataItem it_FlashAqStepPos = new InternalDataItem();

            it_FlashAqStepPos.Group       = "RTC";
            it_FlashAqStepPos.Name        = "FlashAqStepPos";
            it_FlashAqStepPos.ValueString = BitConverter.ToUInt16(mRawData, Pos).ToString();
            Items.Add(it_FlashAqStepPos);
            Pos = Pos + 2;

            InternalDataItem it_FlashErrRingSector = new InternalDataItem();

            it_FlashErrRingSector.Group       = "RTC";
            it_FlashErrRingSector.Name        = "FlashErrRingSector";
            it_FlashErrRingSector.ValueString = (mRawData[16]).ToString();
            Items.Add(it_FlashErrRingSector);
            Pos = Pos + 1;

            InternalDataItem it_FlashErrRingAddress = new InternalDataItem();

            it_FlashErrRingAddress.Group       = "RTC";
            it_FlashErrRingAddress.Name        = "FlashErrRingAddress";
            it_FlashErrRingAddress.ValueString = BitConverter.ToUInt16(mRawData, Pos).ToString();
            Items.Add(it_FlashErrRingAddress);
            Pos = Pos + 2;

            InternalDataItem it_IstKonzentration = new InternalDataItem();

            it_IstKonzentration.Group       = "RTC";
            it_IstKonzentration.Name        = "IstKonzentration";
            it_IstKonzentration.ValueString = BitConverter.ToUInt32(mRawData, Pos).ToString();
            Items.Add(it_IstKonzentration);
            Pos = Pos + 4;

            InternalDataItem it_Tankinhalt = new InternalDataItem();

            it_Tankinhalt.Group = "RTC";
            it_Tankinhalt.Name  = "Tankinhalt";
            if (mSoftwareRevision == 8)
            {
                it_Tankinhalt.ValueString = BitConverter.ToUInt16(mRawData, Pos).ToString();
                Pos = Pos + 2;
            }
            else
            {
                it_Tankinhalt.ValueString = BitConverter.ToUInt32(mRawData, Pos).ToString();
                Pos = Pos + 4;
            }
            Items.Add(it_Tankinhalt);

            InternalDataItem it_Dosierimpulse = new InternalDataItem();

            it_Dosierimpulse.Group       = "RTC";
            it_Dosierimpulse.Name        = "Dosierimpulse";
            it_Dosierimpulse.ValueString = BitConverter.ToUInt32(mRawData, Pos).ToString();
            Items.Add(it_Dosierimpulse);
            Pos = Pos + 4;

            InternalDataItem it_PowerUpCounter = new InternalDataItem();

            it_PowerUpCounter.Group       = "RTC";
            it_PowerUpCounter.Name        = "PowerUpCounter";
            it_PowerUpCounter.ValueString = BitConverter.ToUInt16(mRawData, Pos).ToString();
            Items.Add(it_PowerUpCounter);
            Pos = Pos + 2;

            InternalDataItem it_BetriebsMinuten = new InternalDataItem();

            it_BetriebsMinuten.Group       = "RTC";
            it_BetriebsMinuten.Name        = "BetriebsMinuten";
            it_BetriebsMinuten.ValueString = BitConverter.ToUInt32(mRawData, Pos).ToString();
            Items.Add(it_BetriebsMinuten);
            Pos = Pos + 4;

            InternalDataItem it_DosierimpulseTank = new InternalDataItem();

            it_DosierimpulseTank.Group       = "RTC";
            it_DosierimpulseTank.Name        = "DosierimpulseTank";
            it_DosierimpulseTank.ValueString = BitConverter.ToUInt32(mRawData, Pos).ToString();
            Items.Add(it_DosierimpulseTank);
            Pos = Pos + 4;

            InternalDataItem it_DosierimpulseFilter = new InternalDataItem();

            it_DosierimpulseFilter.Group       = "RTC";
            it_DosierimpulseFilter.Name        = "DosierimpulseFilter";
            it_DosierimpulseFilter.ValueString = BitConverter.ToUInt32(mRawData, Pos).ToString();
            Items.Add(it_DosierimpulseFilter);
            Pos = Pos + 4;

            InternalDataItem it_Beladungssumme = new InternalDataItem();

            it_Beladungssumme.Group       = "RTC";
            it_Beladungssumme.Name        = "Beladungssumme";
            it_Beladungssumme.ValueString = BitConverter.ToUInt32(mRawData, Pos).ToString();
            Items.Add(it_Beladungssumme);
            Pos = Pos + 4;

            InternalDataItem it_PressureOffset = new InternalDataItem();

            it_PressureOffset.Group       = "RTC";
            it_PressureOffset.Name        = "PressureOffset";
            it_PressureOffset.ValueString = (mRawData[Pos]).ToString();
            Items.Add(it_PressureOffset);
            Pos = Pos + 1;

            InternalDataItem it_LastADOffset = new InternalDataItem();

            it_LastADOffset.Group       = "RTC";
            it_LastADOffset.Name        = "LastADOffset";
            it_LastADOffset.ValueString = BitConverter.ToUInt16(mRawData, Pos).ToString();
            Items.Add(it_LastADOffset);
            Pos = Pos + 2;

            InternalDataItem it_LoadNotCfgFlag = new InternalDataItem();

            it_LoadNotCfgFlag.Group       = "RTC";
            it_LoadNotCfgFlag.Name        = "LoadNotCfgFlag";
            it_LoadNotCfgFlag.ValueString = (mRawData[Pos]).ToString();
            Items.Add(it_LoadNotCfgFlag);
            Pos = Pos + 1;

            InternalDataItem it_SpiFlashDebug = new InternalDataItem();

            it_SpiFlashDebug.Group       = "RTC";
            it_SpiFlashDebug.Name        = "SpiFlashDebug";
            it_SpiFlashDebug.ValueString = BitConverter.ToUInt16(mRawData, Pos).ToString();
            Items.Add(it_SpiFlashDebug);
            Pos = Pos + 2;

            // free bytes

            InternalDataItem it_Checksum = new InternalDataItem();

            it_Checksum.Group       = "RTC";
            it_Checksum.Name        = "Checksum";
            it_Checksum.ValueString = String.Format("0x{0:X4}", BitConverter.ToUInt16(mRawData, Pos));
            Items.Add(it_Checksum);
            Pos = Pos + 2;
        }