/// <summary>Import one flash block from ECU</summary> /// <param name="Data">Referece to target byte array</param> /// <param name="protocol">Reference to protocol to connected ECU</param> public void ImportSector(ref byte[] Data, ref ProtocolBase protocol) { if (mRowLength == 0) { return; } // parse 1 32-K-Sektor //file string[] ValueString = new string[1 + (mRowLength - 1) / 2]; int FilledData = 32768 / mRowLength; FilledData = FilledData * mRowLength; int ItemCount = mItem.Length; for (UInt16 ByteInData = 0; ByteInData < FilledData; ByteInData += mRowLength) { if (mRowLength > 3) { // ignore empty or erased items if (((Data[ByteInData] == 0x00) && (Data[ByteInData + 1] == 0x00) && (Data[ByteInData + 2] == 0x00) && (Data[ByteInData + 3] == 0x00) && (Data[ByteInData + 4] == 0x00)) || ((Data[ByteInData] == 0xFF) && (Data[ByteInData + 1] == 0xFF) && (Data[ByteInData + 2] == 0xFF) && (Data[ByteInData + 3] == 0xFF) && (Data[ByteInData + 4] == 0xFF))) { // ignore this item } else { Array.Resize(ref mItem, ItemCount + 1); mItem[ItemCount] = new AcquisitionItem(); // date time UInt32 MinuteSinceProgramming = (UInt32)(((Data[ByteInData + 2] * 256) + Data[ByteInData + 1]) * 256) + Data[ByteInData]; DateTime RowTime = protocol.GetDateTimeFromMinute(MinuteSinceProgramming); // string nach locale zeit? ValueString[0] = RowTime.ToString(); //.ToString("s"); mItem[ItemCount].Row[0] = ValueString[0]; //for (int i = 0; i <= ((mRowLength - 1) / 2) - 1; i++) for (int i = 0; i < mHead.Length; i++) { ValueString[i + 1] = protocol.GetValueString(mValuePosition[i], (UInt16)((Data[ByteInData + 4 + (i * 2)] * 256) + Data[ByteInData + 3 + (i * 2)])); mItem[ItemCount].Row[i + 1] = ValueString[i + 1]; } ItemCount++; } } } }
/// <summary> /// Get new data from ECU /// </summary> /// <returns>True on success, false on error, then old data will be available</returns> public ReturnValue RefreshValues() { ReturnValue ret = mProtocol.ReadActualValues(out mReadBuffer); if (ret == ReturnValue.NoError) { for (byte i = 0; i < mValueNumber; i++) { UInt16 uiValue = (UInt16)(mReadBuffer[(i * 2) + 1] * 256); uiValue += mReadBuffer[(i * 2)]; if (Item[i] == null) { Item[i] = new ActualValueItem(); } Item[i].ValueString = mProtocol.GetValueString(i, uiValue); } } return(ret); }
/// <summary>Export error ring data to a CSV file</summary> /// <param name="Filename">Target file name</param> /// <param name="protocol">Reference to protocol to connected ECU</param> public void CsvExport(string Filename, ref ProtocolBase protocol) { System.IO.StreamWriter writer = new System.IO.StreamWriter(Filename, false); string _ProgDate = ""; if (protocol.LocalTime) { _ProgDate = protocol.DateOfProgramming.ToLocalTime().ToString("dd.MM.yyyy HH:mm"); } else { _ProgDate = protocol.DateOfProgramming.ToUniversalTime().ToString("dd.MM.yyyy HH:mm UTC"); } // string header = String.Format("Production date: {0} SN: {1} HW:V{2}.{3}.{4} SW:V{5}.{6}.{7} CFG:V{8}.{9}.{10}", _ProgDate, protocol.SerialNumber, protocol.HardwareVersion.Hauptversion, protocol.HardwareVersion.Nebenversion, protocol.HardwareVersion.Revision, protocol.SoftwareVersion.Hauptversion, protocol.SoftwareVersion.Nebenversion, protocol.SoftwareVersion.Revision, protocol.ConfigurationVersion.Hauptversion, protocol.ConfigurationVersion.Nebenversion, protocol.ConfigurationVersion.Revision ); writer.WriteLine(header); string title = String.Format("\"Datum/Zeit\"{0}\"Task No.\"{0}\"Lfd. No.\"{0}\"Fehler No.\"{0}\"Fehlername\"{0}\"Fehler/Ereignis\"{0}\"Zustand\"{0}\"Name 1\"{0}\"Wert 1\"{0}\"Einheit 1\"{0}\"Name 2\"{0}\"Wert 2\"{0}\"Einheit 2\"{0}\"Name 3\"{0}\"Wert 3\"{0}\"Einheit 3\"", System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator); writer.WriteLine(title); string _row_start = ""; string _row_tail = ""; for (int item = 0; item < mItem.Length; item++) { if (protocol.LocalTime) { _ProgDate = mItem[item].Date.ToLocalTime().ToString("dd.MM.yyyy HH:mm"); } else { _ProgDate = mItem[item].Date.ToUniversalTime().ToString("dd.MM.yyyy HH:mm UTC"); } _row_start = String.Format("\"{1}\"{0}{2}{0}{3}{0}{4}{0}\"{5}\"{0}\"{6}\"", System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator, _ProgDate, mItem[item].TaskId, mItem[item].LfdNo, mItem[item].ErrorNo, protocol.GetErrorName(mItem[item].ErrorNo), protocol.IsEventOrError(mItem[item].ErrorNo) ? "Event" : "Fehler"); if (mItem[item].TaskId == 255) { // Verhalten aenderung _row_tail = String.Format("{0}\"aktiv\"{0}\"Intern\"{0}\"{1}\"", System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator, mItem[item].Wert1); } else { // Fehler / Event aufgetreten if (mItem[item].ErrorNo > 63) { _row_tail = String.Format("{0}\"sporadisch\"{0}\"\"{0}\"{1}\"{0}\"\"{0}\"\"{0}\"{2}\"{0}\"\"{0}\"\"{0}\"{3}\"{0}\"\"", System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator, mItem[item].Wert1, mItem[item].Wert2, mItem[item].Wert3); } else { _row_tail = String.Format("{0}\"sporadisch\"{0}\"{1}\"{0}\"{2}\"{0}\"{3}\"{0}\"{4}\"{0}\"{5}\"{0}\"{6}\"{0}\"{7}\"{0}\"{8}\"{0}\"{9}\"", System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator, protocol.GetValueName(protocol.GetValuePosition(protocol.ErrorRingFigure(mItem[item].ErrorNo, 0))), protocol.GetValueString(protocol.GetValuePosition(protocol.ErrorRingFigure(mItem[item].ErrorNo, 0)), mItem[item].Wert1), protocol.GetValueUnit(protocol.GetValuePosition(protocol.ErrorRingFigure(mItem[item].ErrorNo, 0))), protocol.GetValueName(protocol.GetValuePosition(protocol.ErrorRingFigure(mItem[item].ErrorNo, 1))), protocol.GetValueString(protocol.GetValuePosition(protocol.ErrorRingFigure(mItem[item].ErrorNo, 1)), mItem[item].Wert2), protocol.GetValueUnit(protocol.GetValuePosition(protocol.ErrorRingFigure(mItem[item].ErrorNo, 1))), protocol.GetValueName(protocol.GetValuePosition(protocol.ErrorRingFigure(mItem[item].ErrorNo, 2))), protocol.GetValueString(protocol.GetValuePosition(protocol.ErrorRingFigure(mItem[item].ErrorNo, 2)), mItem[item].Wert3), protocol.GetValueUnit(protocol.GetValuePosition(protocol.ErrorRingFigure(mItem[item].ErrorNo, 2)))); } } writer.WriteLine(String.Format("{0}{1}", _row_start, _row_tail)); } writer.Close(); }
/// <summary>Export error ring data to a XML file</summary> /// <param name="Filename">Target file name</param> /// <param name="protocol">Reference to protocol to connected ECU</param> public void XmlExport(string Filename, ref ProtocolBase protocol) { XmlWriter xf = null; XmlWriterSettings settings = new XmlWriterSettings(); settings.OmitXmlDeclaration = false; settings.ConformanceLevel = ConformanceLevel.Document; settings.Encoding = System.Text.Encoding.UTF8; //"iso-8859-1"; settings.Indent = true; settings.IndentChars = "\t"; settings.NewLineOnAttributes = false; try { xf = XmlWriter.Create(Filename, settings); xf.WriteStartElement("err_ring_root"); xf.WriteStartElement("ECU"); xf.WriteStartElement("Serialnumber"); xf.WriteValue(protocol.SerialNumber); xf.WriteEndElement(); // S/N xf.WriteStartElement("Hardware"); xf.WriteValue(string.Format("{0}.{1}.{2}", protocol.HardwareVersion.Hauptversion, protocol.HardwareVersion.Nebenversion, protocol.HardwareVersion.Revision)); xf.WriteEndElement(); // HW V xf.WriteStartElement("Software"); xf.WriteValue(string.Format("{0}.{1}.{2}", protocol.SoftwareVersion.Hauptversion, protocol.SoftwareVersion.Nebenversion, protocol.SoftwareVersion.Revision)); xf.WriteEndElement(); // SW V xf.WriteStartElement("Configuration"); xf.WriteValue(string.Format("{0}.{1}.{2}", protocol.ConfigurationVersion.Hauptversion, protocol.ConfigurationVersion.Nebenversion, protocol.ConfigurationVersion.Revision)); xf.WriteEndElement(); // CFG V //xf.WriteStartElement("Datamap"); //xf.WriteValue(string.Format("{0}.{1}.{2}", protocol.DatamapVersion.Hauptversion, protocol.DatamapVersion.Nebenversion, protocol.DatamapVersion.Revision)); //xf.WriteEndElement(); // KF V xf.WriteEndElement(); // ECU xf.WriteStartElement("ring_data"); for (int item = 0; item < mItem.Length; item++) { xf.WriteStartElement("item"); xf.WriteAttributeString("row", String.Format("{0}", item)); xf.WriteStartElement("date"); xf.WriteValue(mItem[item].Date); xf.WriteEndElement(); xf.WriteStartElement("error_no"); xf.WriteValue(mItem[item].ErrorNo); xf.WriteEndElement(); xf.WriteStartElement("error_name"); xf.WriteValue(protocol.GetErrorName(mItem[item].ErrorNo)); xf.WriteEndElement(); xf.WriteStartElement("error_type"); xf.WriteValue(protocol.IsEventOrError((UInt16)item) ? "Event" : "Fehler"); xf.WriteEndElement(); if (mItem[item].TaskId == 255) { // Verhalten aenderung xf.WriteStartElement("task"); xf.WriteValue(mItem[item].TaskId); xf.WriteEndElement(); xf.WriteStartElement("lfd_no"); xf.WriteValue(mItem[item].LfdNo); xf.WriteEndElement(); xf.WriteStartElement("mask"); xf.WriteValue(mItem[item].Wert1); xf.WriteEndElement(); } else { // Fehler / Event aufgetreten xf.WriteStartElement("task"); xf.WriteValue(mItem[item].TaskId); xf.WriteEndElement(); xf.WriteStartElement("lfd_no"); xf.WriteValue(mItem[item].LfdNo); xf.WriteEndElement(); if (mItem[item].ErrorNo > 63) { xf.WriteStartElement("value_1_value"); xf.WriteValue(mItem[item].Wert1); xf.WriteEndElement(); xf.WriteStartElement("value_2_value"); xf.WriteValue(mItem[item].Wert2); xf.WriteEndElement(); xf.WriteStartElement("value_3_value"); xf.WriteValue(mItem[item].Wert3); xf.WriteEndElement(); } else { xf.WriteStartElement("value_1_name"); xf.WriteValue(protocol.GetValueName(protocol.GetValuePosition(protocol.ErrorRingFigure(mItem[item].ErrorNo, 0)))); xf.WriteEndElement(); xf.WriteStartElement("value_1_value"); xf.WriteValue(protocol.GetValueString(protocol.GetValuePosition(protocol.ErrorRingFigure(mItem[item].ErrorNo, 0)), mItem[item].Wert1)); xf.WriteEndElement(); xf.WriteStartElement("value_1_unit"); xf.WriteValue(protocol.GetValueUnit(protocol.GetValuePosition(protocol.ErrorRingFigure(mItem[item].ErrorNo, 0)))); xf.WriteEndElement(); xf.WriteStartElement("value_2_name"); xf.WriteValue(protocol.GetValueName(protocol.GetValuePosition(protocol.ErrorRingFigure(mItem[item].ErrorNo, 1)))); xf.WriteEndElement(); xf.WriteStartElement("value_2_value"); xf.WriteValue(protocol.GetValueString(protocol.GetValuePosition(protocol.ErrorRingFigure(mItem[item].ErrorNo, 1)), mItem[item].Wert2)); xf.WriteEndElement(); xf.WriteStartElement("value_2_unit"); xf.WriteValue(protocol.GetValueUnit(protocol.GetValuePosition(protocol.ErrorRingFigure(mItem[item].ErrorNo, 1)))); xf.WriteEndElement(); xf.WriteStartElement("value_3_name"); xf.WriteValue(protocol.GetValueName(protocol.GetValuePosition(protocol.ErrorRingFigure(mItem[item].ErrorNo, 2)))); xf.WriteEndElement(); xf.WriteStartElement("value_3_value"); xf.WriteValue(protocol.GetValueString(protocol.GetValuePosition(protocol.ErrorRingFigure(mItem[item].ErrorNo, 2)), mItem[item].Wert3)); xf.WriteEndElement(); xf.WriteStartElement("value_3_unit"); xf.WriteValue(protocol.GetValueUnit(protocol.GetValuePosition(protocol.ErrorRingFigure(mItem[item].ErrorNo, 2)))); xf.WriteEndElement(); } } xf.WriteEndElement(); // item } xf.WriteEndElement(); // data xf.WriteEndElement(); // root xf.Flush(); } catch (Exception ex) { Console.WriteLine("Exception during opening XML file: {0}", ex.Message); } finally { xf.Close(); } }