Home.ccpage 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <fragment xmlns="http://www.holeschak.de/BmwDeepObd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.holeschak.de/BmwDeepObd BmwDeepObd.xsd">
  3. <page name="IBUS_App" display-mode="grid" fontsize="medium" gauges-portrait="3" gauges-landscape="5" logfile="DME_DDE.log">
  4. <strings lang="de">
  5. <string name="IBUS_App">IBUS_App</string>
  6. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LUFTMASSE_PRO_HUB_WERT"> Luftmasse [mg/Hub]</string>
  7. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LADEDRUCK_WERT"> Ladedruck Ist [mbar]</string>
  8. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_UBATT_WERT"> Batteriespannung [V]</string>
  9. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_KUEHLMITTELTEMPERATUR_WERT"> Kühlmitteltemperatur [°C]</string>
  10. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_MOTORMOMENT_AKTUELL_WERT"> Drehmoment [Nm]:</string>
  11. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_MOTORDREHZAHL_WERT"> Drehzahl [U/min]</string>
  12. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_KRAFTSTOFFTEMPERATURK_WERT"> Kraftstofftemperatur [°C]</string>
  13. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LADELUFTTEMPERATUR_WERT"> Ladelufttemp. [°C]</string>
  14. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_EINSPRITZMENGE_AKTUELL_WERT"> Einspritzmenge [mg]</string>
  15. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_ABGASTEMPERATUR_VOR_KATALYSATOR_WERT"> Abgastemp. vor Kat [°C]</string>
  16. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LADEDRUCK_SOLL_WERT"> Ladedruck Soll [mbar]</string>
  17. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_RAILDRUCK_WERT"> Raildruck Ist [bar]</string>
  18. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_RAILDRUCK_SOLL_WERT"> Raildruck Soll [bar]</string>
  19. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_FAHRZEUGBESCHLEUNIGUNG_WERT"> Beschleunigung [m/s²]</string>
  20. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_GESCHWINDIGKEIT_WERT"> Geschwindigkeit [km/h]</string>
  21. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_UMGEBUNGSDRUCK_WERT"> Luftdruck [mbar]</string>
  22. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_GENERATORLAST_WERT"> Generatorlast [%]</string>
  23. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_ZUHEIZER_ANSTEUERUNG_WERT"> Zuheizer PWM [%]</string>
  24. <string name="!JOB#ABGLEICH_LESEN#STAT_LLA_ABGLEICH_LESEN_WERT"> Anhebung Leerlaufdrehzahl [u/min]</string>
  25. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_KUPPLUNGSSCHALTER_ROH_WERT"> Kupplungsschalter</string>
  26. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_KLIMAKOMPRESSOR_STATUS_WERT"> Klimakompressor</string>
  27. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_BEREITSCHAFT_KLIMA_WERT"> Klima Bereitschaft</string>
  28. <string name="!JOB#STATUS_TOENS_IO#STAT_TOG_HIGH_WERT"> TÖNS Heizzeit [ms]</string>
  29. <string name="!JOB#STATUS_TOENS_IO#STAT_TOG_LOW_WERT"> TÖNS Kühlzeit [ms]</string>
  30. </strings>
  31. <strings>
  32. <string name="IBUS_App">IBUS_App</string>
  33. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LUFTMASSE_PRO_HUB_WERT"> air mass [mg/stroke]</string>
  34. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LADEDRUCK_WERT"> act. boost pressure [mbar]</string>
  35. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_UBATT_WERT"> voltage [V]</string>
  36. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_KUEHLMITTELTEMPERATUR_WERT"> coolant [°C]</string>
  37. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_MOTORMOMENT_AKTUELL_WERT"> torque [Nm]:</string>
  38. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_MOTORDREHZAHL_WERT"> engine speed [U/min]</string>
  39. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_KRAFTSTOFFTEMPERATURK_WERT"> fuel temperature [°C]</string>
  40. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LADELUFTTEMPERATUR_WERT"> charge air temperature [°C]</string>
  41. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_EINSPRITZMENGE_AKTUELL_WERT"> Einspritzmenge [mg]</string>
  42. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_ABGASTEMPERATUR_VOR_KATALYSATOR_WERT"> exhaust before cat [°C]</string>
  43. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LADEDRUCK_SOLL_WERT"> target boost pressure [mbar]</string>
  44. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_RAILDRUCK_WERT"> act. rail pressure [bar]</string>
  45. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_RAILDRUCK_SOLL_WERT"> Raildruck Soll [bar]</string>
  46. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_FAHRZEUGBESCHLEUNIGUNG_WERT"> acceleration [m/s²]</string>
  47. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_GESCHWINDIGKEIT_WERT"> speed [km/h]</string>
  48. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_UMGEBUNGSDRUCK_WERT"> air pressure [mbar]</string>
  49. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_GENERATORLAST_WERT"> alternator load [%]</string>
  50. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_ZUHEIZER_ANSTEUERUNG_WERT"> aux heater PWM [%]</string>
  51. <string name="!JOB#ABGLEICH_LESEN#STAT_LLA_ABGLEICH_LESEN_WERT"> increase idle speed [rpm]</string>
  52. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_KUPPLUNGSSCHALTER_ROH_WERT"> Clutch switch</string>
  53. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_KLIMAKOMPRESSOR_STATUS_WERT"> AC compressor</string>
  54. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_BEREITSCHAFT_KLIMA_WERT"> AC in standby</string>
  55. <string name="!JOB#STATUS_TOENS_IO#STAT_TOG_HIGH_WERT"> TÖNS heating time [ms]</string>
  56. <string name="!JOB#STATUS_TOENS_IO#STAT_TOG_LOW_WERT"> TÖNS cooling time [ms]</string>
  57. </strings>
  58. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LUFTMASSE_PRO_HUB_WERT" result="STATUS_MESSWERTBLOCK_LESEN#STAT_LUFTMASSE_PRO_HUB_WERT" format="L" grid-type="simple-gauge-round" min-value="0" max-value="1500" log_tag="STAT_LUFTMASSE_PRO_HUB_WERT" />
  59. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LADEDRUCK_WERT" result="STATUS_MESSWERTBLOCK_LESEN#STAT_LADEDRUCK_WERT" format="4.1R" grid-type="simple-gauge-round" min-value="0" max-value="2500" log_tag="STAT_LADEDRUCK_WERT" />
  60. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_UBATT_WERT" result="STATUS_MESSWERTBLOCK_LESEN#STAT_UBATT_WERT" grid-type="simple-gauge-round" min-value="0" max-value="15" log_tag="STAT_UBATT_WERT" />
  61. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_KUEHLMITTELTEMPERATUR_WERT" result="STATUS_MESSWERTBLOCK_LESEN#STAT_KUEHLMITTELTEMPERATUR_WERT" grid-type="simple-gauge-round" min-value="-20" max-value="120" log_tag="STAT_KUEHLMITTELTEMPERATUR_WERT" />
  62. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_MOTORMOMENT_AKTUELL_WERT" result="STATUS_MESSWERTBLOCK_LESEN#STAT_MOTORMOMENT_AKTUELL_WERT" grid-type="simple-gauge-round" min-value="0" max-value="600" log_tag="STAT_MOTORMOMENT_AKTUELL_WERT" />
  63. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_MOTORDREHZAHL_WERT" result="STATUS_MESSWERTBLOCK_LESEN#STAT_MOTORDREHZAHL_WERT" grid-type="simple-gauge-round" min-value="0" max-value="5000" log_tag="STAT_MOTORDREHZAHL_WERT" />
  64. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_KRAFTSTOFFTEMPERATURK_WERT" result="STATUS_MESSWERTBLOCK_LESEN#STAT_KRAFTSTOFFTEMPERATURK_WERT" format="2.1R" grid-type="simple-gauge-round" min-value="-20" max-value="80" log_tag="STAT_KRAFTSTOFFTEMPERATURK_WERT" />
  65. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LADELUFTTEMPERATUR_WERT" result="STATUS_MESSWERTBLOCK_LESEN#STAT_LADELUFTTEMPERATUR_WERT" format=".1R" grid-type="simple-gauge-round" min-value="-20" max-value="80" log_tag="STAT_LADELUFTTEMPERATUR_WERT" />
  66. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_EINSPRITZMENGE_AKTUELL_WERT" result="STATUS_MESSWERTBLOCK_LESEN#STAT_EINSPRITZMENGE_AKTUELL_WERT" format="L" grid-type="simple-gauge-round" min-value="0" max-value="100" log_tag="STAT_EINSPRITZMENGE_AKTUELL_WERT" />
  67. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_ABGASTEMPERATUR_VOR_KATALYSATOR_WERT" result="STATUS_MESSWERTBLOCK_LESEN#STAT_ABGASTEMPERATUR_VOR_KATALYSATOR_WERT" format="L" grid-type="simple-gauge-round" min-value="0" max-value="500" log_tag="STAT_ABGASTEMPERATUR_VOR_KATALYSATOR_WERT" />
  68. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LADEDRUCK_SOLL_WERT" result="STATUS_MESSWERTBLOCK_LESEN#STAT_LADEDRUCK_SOLL_WERT" format="4.1R" grid-type="simple-gauge-round" min-value="0" max-value="2500" log_tag="STAT_LADEDRUCK_SOLL_WERT" />
  69. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_RAILDRUCK_WERT" result="STATUS_MESSWERTBLOCK_LESEN#STAT_RAILDRUCK_WERT" format="L" grid-type="simple-gauge-round" min-value="0" max-value="1400" log_tag="STAT_RAILDRUCK_WERT" />
  70. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_RAILDRUCK_SOLL_WERT" result="STATUS_MESSWERTBLOCK_LESEN#STAT_RAILDRUCK_SOLL_WERT" format="L" grid-type="simple-gauge-round" min-value="0" max-value="1400" log_tag="STAT_RAILDRUCK_SOLL_WERT" />
  71. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_FAHRZEUGBESCHLEUNIGUNG_WERT" result="STATUS_MESSWERTBLOCK_LESEN#STAT_FAHRZEUGBESCHLEUNIGUNG_WERT" format="2.3R" grid-type="simple-gauge-round" min-value="-15" max-value="15" log_tag="STAT_FAHRZEUGBESCHLEUNIGUNG_WERT" />
  72. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_GESCHWINDIGKEIT_WERT" result="STATUS_MESSWERTBLOCK_LESEN#STAT_GESCHWINDIGKEIT_WERT" format="L" grid-type="simple-gauge-round" min-value="0" max-value="250" log_tag="STAT_GESCHWINDIGKEIT_WERT" />
  73. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_UMGEBUNGSDRUCK_WERT" result="STATUS_MESSWERTBLOCK_LESEN#STAT_UMGEBUNGSDRUCK_WERT" format="4.1R" grid-type="simple-gauge-round" min-value="800" max-value="1300" log_tag="STAT_UMGEBUNGSDRUCK_WERT" />
  74. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_GENERATORLAST_WERT" result="STATUS_MESSWERTBLOCK_LESEN#STAT_GENERATORLAST_WERT" grid-type="simple-gauge-round" min-value="0" max-value="100" log_tag="STAT_GENERATORLAST_WERT" />
  75. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_ZUHEIZER_ANSTEUERUNG_WERT" result="STATUS_MESSWERTBLOCK_LESEN#STAT_ZUHEIZER_ANSTEUERUNG_WERT" grid-type="simple-gauge-round" min-value="0" max-value="100" log_tag="STAT_ZUHEIZER_ANSTEUERUNG_WERT" />
  76. <display name="!JOB#ABGLEICH_LESEN#STAT_LLA_ABGLEICH_LESEN_WERT" result="ABGLEICH_LESEN#STAT_LLA_ABGLEICH_LESEN_WERT" format="L" display-order="0" grid-type="simple-gauge-round" min-value="0" max-value="250" log_tag="LLA_ABGLEICH_LESEN_WERT" />
  77. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_KUPPLUNGSSCHALTER_ROH_WERT" result="STATUS_MESSWERTBLOCK_LESEN#STAT_KUPPLUNGSSCHALTER_ROH_WERT" format="L" grid-type="simple-gauge-round" min-value="0" max-value="1" log_tag="STAT_KUPPLUNGSSCHALTER_ROH_WERT" />
  78. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_KLIMAKOMPRESSOR_STATUS_WERT" result="STATUS_MESSWERTBLOCK_LESEN#STAT_KLIMAKOMPRESSOR_STATUS_WERT" format="L" grid-type="simple-gauge-round" min-value="0" max-value="1" log_tag="STAT_KLIMAKOMPRESSOR_STATUS_WERT" />
  79. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_BEREITSCHAFT_KLIMA_WERT" result="STATUS_MESSWERTBLOCK_LESEN#STAT_BEREITSCHAFT_KLIMA_WERT" format="L" grid-type="simple-gauge-round" min-value="0" max-value="1" log_tag="STAT_BEREITSCHAFT_KLIMA_WERT" />
  80. <display name="!JOB#STATUS_TOENS_IO#STAT_TOG_HIGH_WERT" result="STATUS_TOENS_IO#STAT_TOG_HIGH_WERT" format="L" grid-type="simple-gauge-round" min-value="0" max-value="1000" log_tag="STAT_TOG_HIGH_WERT" />
  81. <display name="!JOB#STATUS_TOENS_IO#STAT_TOG_LOW_WERT" result="STATUS_TOENS_IO#STAT_TOG_LOW_WERT" format="L" grid-type="simple-gauge-round" min-value="0" max-value="1000" log_tag="STAT_TOG_LOW_WERT" />
  82. <jobs />
  83. <code show_warnings="true">
  84. <![CDATA[
  85. class PageClass
  86. {
  87. // PWM-Wert Ansteuerung Zuheizer, ab dem dieser als AN erkannt wird
  88. private double conf_ZuheizerAnAb = 25;
  89. // PWM-Wert Generatorlast, ab dem eine LL-Anhebung erfolgt
  90. private double conf_GeneratorlastHochAb = 60;
  91. private double conf_GeneratorlastSehrHochAb = 80;
  92. // Motortemperaturen
  93. private double conf_Temp_MotorSehrKaltBis = 25;
  94. private double conf_Temp_MotorKaltBis = 65;
  95. private double conf_Temp_MotorBetriebstempAb = 75;
  96. private double conf_Temp_MotorBetriebstempBis = 95;
  97. private double conf_Temp_MotorHeissAb = 100;
  98. // Ziel-Leerlaufanhebungswerte - es "gewinnt" immer der höchste Wert für die aktuellen Betriebsbedingungen
  99. private int conf_LLA_Basis = 0; // wenn die Kupplung nicht betätigt und auch sonst keine höhere Anhebung aktiv ist
  100. private int conf_LLA_Kupplung = 150;
  101. private int conf_LLA_Zuheizer = 200;
  102. private int conf_LLA_MotorSehrKalt = 150;
  103. private int conf_LLA_MotorKalt = 100;
  104. private int conf_LLA_MotorVorBetriebstemp = 70;
  105. private int conf_LLA_MotorBetriebstemp = 50;
  106. private int conf_LLA_MotorHeiss = 200;
  107. private int conf_LLA_KlimaBereitschaft = 90;
  108. private int conf_LLA_Klimakompressor = 120;
  109. private int conf_LLA_GeneratorlastHoch = 90;
  110. private int conf_LLA_GeneratorlastSehrHoch = 150;
  111. // Konfiguration für Zähler (Anzahl Durchläufe bis eine Aktion eintritt)
  112. // Noch genauer zu ermitteln wie viele Abfragen pro Sekunde bei der DDE5 mit dieser
  113. // Konfiguration im Durchschnitt anfallen.
  114. // alle 5 Durchläufe ergibt ca. 1 Sekunde Verzögerung
  115. private int conf_countdown_ZuheizerAn_max = 10;
  116. private int conf_countdown_Kupplung_max = 10;
  117. private int conf_countdown_Generatorlast_max = 10;
  118. private int conf_countdown_LLA_aus = 15;
  119. // wie häufig sollen zusätzliche Jobs ausgeführt werden?
  120. private int conf_counter_Job2_max = 20; // Job2 = am selben Steuergerät wie der Hauptjob
  121. private int conf_counter_JobSgbd2_max = 98; // JobSgbd2 = auf einem anderen Steuergerät
  122. // Steuergeräte SGBD files für Multijob definieren
  123. public static string[] conf_sgbds = {"D50M57E1", "kombi46r"};
  124. // Statusvariablen
  125. private bool status_MotorHeiss = false;
  126. private bool status_MotorBetriebstemp = false;
  127. private bool status_Kupplung = false;
  128. private bool status_Zuheizer = false;
  129. //private bool status_Klima = false;
  130. private bool status_GeneratorlastHoch = false;
  131. private bool status_GeneratorlastSehrHoch = false;
  132. private int currSgbd = 0; // momentan aktiv abgefragtes Steuergerät, für switch zwischen mehreren
  133. // Zähler
  134. private int countdown_ZuheizerAn = 0;
  135. private int countdown_Kupplung = 0;
  136. private int countdown_Generatorlast = 0;
  137. private int countdown_LLA_aus = 0;
  138. private int counter_Job2 = 0;
  139. private int counter_JobSgbd2 = 0;
  140. // Globale Variablen für Leerlaufanhebung
  141. private int LLA_momentan = 0;
  142. // Globale Variablen - sonstige
  143. private int mom_N = 0;
  144. //private int mom_Nm = 0;
  145. // result objekte für die zusätzlichen Jobs, die nicht in jedem Durchlauf abgefragt werden
  146. // muss global deklariert sein damit trotzdem in jedem Durchlauf die letzten Werte ausgegeben werden können
  147. List<Dictionary<string, EdiabasNet.ResultData>> resultSets_Abgleich;
  148. List<Dictionary<string, EdiabasNet.ResultData>> resultSets_JobSgbd2;
  149. public void ExecuteJob(EdiabasNet ediabas, ref MultiMap<string, EdiabasNet.ResultData> resultDict, bool firstCall)
  150. {
  151. List<Dictionary<string, EdiabasNet.ResultData>> resultSets;
  152. if(firstCall || currSgbd != 0) {
  153. currSgbd = 0;
  154. ediabas.ResolveSgbdFile(conf_sgbds[0]);
  155. //ediabas.ArgString = string.Empty;
  156. //ediabas.ArgBinaryStd = null;
  157. //ediabas.ResultsRequests = string.Empty;
  158. //ediabas.ExecuteJob("INITIALISIERUNG");
  159. }
  160. // Job 1 - ständig zu aktualisierende Werte
  161. ediabas.ArgString = "JA;ILMMG;IPLAD;IPUMG;IUBAT;IMOAK;INMOT;SPLAD;ITKUM;ITLAL;ITKRS;IPRDR;IAFZG;IVKMH;ITZUH;IGENL;RSKUP;IKLIS;IBKLI;SPRDR;IMEIA;ITAVO";
  162. ediabas.ArgBinaryStd = null;
  163. ediabas.ResultsRequests = string.Empty;
  164. ediabas.ExecuteJob("STATUS_MESSWERTBLOCK_LESEN");
  165. resultSets = ediabas.ResultSets;
  166. if (resultSets != null && resultSets.Count >= 2)
  167. {
  168. EdiabasThread.MergeResultDictionarys(ref resultDict, resultSets[1], "STATUS_MESSWERTBLOCK_LESEN#");
  169. }
  170. // Job 2 - wird nur bei jedem X-ten Durchlauf ausgeführt (definiert von [conf_counter_Job2_max])
  171. // Ergebnisse werden in globaler Variable vorgehalten und die letzten Werte in jedem Durchlauf ausgegeben
  172. if(counter_Job2 == 0) {
  173. ediabas.ArgString = "lla";
  174. ediabas.ArgBinaryStd = null;
  175. ediabas.ResultsRequests = string.Empty;
  176. ediabas.ExecuteJob("ABGLEICH_LESEN");
  177. resultSets_Abgleich = ediabas.ResultSets;
  178. counter_Job2++;
  179. }
  180. else if(counter_Job2 >= conf_counter_Job2_max) {
  181. counter_Job2 = 0;
  182. }
  183. else {
  184. counter_Job2++;
  185. }
  186. // da diese Werte nicht in jedem Durchlauf vom Steuergerät gelesen werden sind die Ergebnisdaten in einer
  187. // globalen Variablen gespeichert und werden jedesmal übernommen, auch wenn nicht ganz aktuell
  188. if (resultSets_Abgleich != null && resultSets_Abgleich.Count >= 2)
  189. {
  190. EdiabasThread.MergeResultDictionarys(ref resultDict, resultSets_Abgleich[1], "ABGLEICH_LESEN#STAT_LLA_");
  191. }
  192. // Eingangswerte für automatische Leerlaufanhebung holen
  193. EdiabasNet.ResultData resultData;
  194. // Kupplungsschalter
  195. bool mom_Kupplung = false;
  196. if (resultSets[1].TryGetValue("STAT_KUPPLUNGSSCHALTER_ROH_WERT", out resultData))
  197. {
  198. if (resultData.OpData is Double) {
  199. if(((Double)resultData.OpData) > 0.0) mom_Kupplung = true;
  200. }
  201. }
  202. // Klimakompressor
  203. bool mom_Klimakompressor = false;
  204. if (resultSets[1].TryGetValue("STAT_KLIMAKOMPRESSOR_STATUS_WERT", out resultData))
  205. {
  206. if (resultData.OpData is Double) {
  207. if(((Double)resultData.OpData) > 0.0) mom_Klimakompressor = true;
  208. }
  209. }
  210. // Klima-Bereitschaft
  211. bool mom_KlimaBereitschaft = false;
  212. if (resultSets[1].TryGetValue("STAT_BEREITSCHAFT_KLIMA_WERT", out resultData))
  213. {
  214. if (resultData.OpData is Double) {
  215. if(((Double)resultData.OpData) > 0.0) mom_KlimaBereitschaft = true;
  216. }
  217. }
  218. // Zuheizer-Ansteuerung
  219. Double mom_Zuheizer_PWM = 0;
  220. if (resultSets[1].TryGetValue("STAT_ZUHEIZER_ANSTEUERUNG_WERT", out resultData))
  221. {
  222. if (resultData.OpData is Double)
  223. {
  224. mom_Zuheizer_PWM = ((Double)resultData.OpData);
  225. }
  226. }
  227. // Generatorlast
  228. Double mom_Generatorlast_PWM = 0;
  229. if (resultSets[1].TryGetValue("STAT_GENERATORLAST_WERT", out resultData))
  230. {
  231. if (resultData.OpData is Double)
  232. {
  233. mom_Generatorlast_PWM = ((Double)resultData.OpData);
  234. }
  235. }
  236. // Motortemperatur
  237. Double mom_MotorTemp = 0;
  238. if (resultSets[1].TryGetValue("STAT_KUEHLMITTELTEMPERATUR_WERT", out resultData))
  239. {
  240. if (resultData.OpData is Double)
  241. {
  242. mom_MotorTemp = ((Double)resultData.OpData);
  243. }
  244. }
  245. // Abgleichwert Leerlaufanhebung
  246. if (resultSets_Abgleich[1].TryGetValue("ABGLEICH_LESEN_WERT", out resultData))
  247. {
  248. if (resultData.OpData is Double)
  249. {
  250. LLA_momentan = (int)((Double)resultData.OpData);
  251. }
  252. }
  253. // Momentane Drehzahl
  254. if (resultSets_Abgleich[1].TryGetValue("STAT_MOTORDREHZAHL_WERT", out resultData))
  255. {
  256. if (resultData.OpData is Double)
  257. {
  258. mom_N = (int)((Double)resultData.OpData);
  259. }
  260. }
  261. // Momentanes Drehmoment
  262. // if (resultSets_Abgleich[1].TryGetValue("STAT_MOTORMOMENT_AKTUELL_WERT", out resultData))
  263. // {
  264. // if (resultData.OpData is Double)
  265. // {
  266. // mom_Nm = (int)((Double)resultData.OpData);
  267. // }
  268. // }
  269. // Automatische Leerlaufanhebung
  270. int LLA_neu = 0;
  271. // Kupplungsschalter
  272. // der countdown dient dazu dass die Leerlaufanhebung erst zurückgenommen wird,
  273. // wenn die Kupplung schon eine Zeit lang nicht betätigt ist
  274. if (mom_Kupplung || status_Kupplung) {
  275. if(mom_Kupplung) countdown_Kupplung = conf_countdown_Kupplung_max;
  276. if(!status_Kupplung) status_Kupplung = true;
  277. if(conf_LLA_Kupplung > LLA_neu) LLA_neu = conf_LLA_Kupplung;
  278. }
  279. if (countdown_Kupplung > 0){
  280. countdown_Kupplung--;
  281. }
  282. else {
  283. countdown_Kupplung = 0;
  284. status_Kupplung = false;
  285. if(conf_LLA_Basis > LLA_neu) LLA_neu = conf_LLA_Basis;
  286. }
  287. // Zuheizer
  288. // der countdown dient dazu dass die Leerlaufanhebung erst zurückgenommen wird,
  289. // wenn der Zuheizer schon eine Zeit lang inaktiv ist (also z.B. nicht nur kurz wegen zu hoher Generatorlast abgeschaltet wurde)
  290. if (mom_Zuheizer_PWM > conf_ZuheizerAnAb || status_Zuheizer) {
  291. if(mom_Zuheizer_PWM > conf_ZuheizerAnAb) countdown_ZuheizerAn = conf_countdown_ZuheizerAn_max;
  292. if(!status_Zuheizer) status_Zuheizer = true;
  293. if(conf_LLA_Zuheizer > LLA_neu) LLA_neu = conf_LLA_Zuheizer;
  294. }
  295. if (countdown_ZuheizerAn > 0) {
  296. countdown_ZuheizerAn--;
  297. }
  298. else {
  299. countdown_ZuheizerAn = 0;
  300. status_Zuheizer = false;
  301. if(conf_LLA_Basis > LLA_neu) LLA_neu = conf_LLA_Basis;
  302. }
  303. // Generatorlast
  304. if (mom_Generatorlast_PWM > conf_GeneratorlastSehrHochAb || status_GeneratorlastSehrHoch) {
  305. if(mom_Generatorlast_PWM > conf_GeneratorlastSehrHochAb) countdown_Generatorlast = conf_countdown_Generatorlast_max;
  306. if(!status_GeneratorlastSehrHoch) status_GeneratorlastSehrHoch = true;
  307. if(conf_LLA_GeneratorlastSehrHoch > LLA_neu) LLA_neu = conf_LLA_GeneratorlastSehrHoch;
  308. }
  309. else if (mom_Generatorlast_PWM > conf_GeneratorlastHochAb || status_GeneratorlastHoch) {
  310. if(mom_Generatorlast_PWM > conf_GeneratorlastHochAb) countdown_Generatorlast = conf_countdown_Generatorlast_max;
  311. if(!status_GeneratorlastHoch) status_GeneratorlastHoch = true;
  312. if(conf_LLA_GeneratorlastHoch > LLA_neu) LLA_neu = conf_LLA_GeneratorlastHoch;
  313. }
  314. if (countdown_Generatorlast > 0) {
  315. countdown_Generatorlast--;
  316. }
  317. else {
  318. countdown_Generatorlast = 0;
  319. status_GeneratorlastHoch = false;
  320. status_GeneratorlastSehrHoch = false;
  321. if(conf_LLA_Basis > LLA_neu) LLA_neu = conf_LLA_Basis;
  322. }
  323. // Klimakompressor und Klimabereitschaft
  324. if (mom_Klimakompressor) {
  325. if(conf_LLA_Klimakompressor > LLA_neu) LLA_neu = conf_LLA_Klimakompressor;
  326. }
  327. else if (mom_KlimaBereitschaft) {
  328. if(conf_LLA_KlimaBereitschaft > LLA_neu) LLA_neu = conf_LLA_KlimaBereitschaft;
  329. }
  330. // Drehzahlanhebung je nach Motortemperatur,
  331. if(mom_MotorTemp < conf_Temp_MotorSehrKaltBis) {
  332. // Motor ist sehr kalt
  333. status_MotorBetriebstemp = false;
  334. if(conf_LLA_MotorSehrKalt > LLA_neu) LLA_neu = conf_LLA_MotorSehrKalt;
  335. }
  336. else if(mom_MotorTemp < conf_Temp_MotorKaltBis) {
  337. // Motor ist kalt
  338. status_MotorBetriebstemp = false;
  339. if(conf_LLA_MotorKalt > LLA_neu) LLA_neu = conf_LLA_MotorKalt;
  340. }
  341. else if(mom_MotorTemp >= conf_Temp_MotorKaltBis && mom_MotorTemp < conf_Temp_MotorBetriebstempAb) {
  342. // Motor ist nicht mehr kalt, aber noch nicht auf Betriebstemperatur
  343. status_MotorBetriebstemp = false;
  344. if(conf_LLA_MotorVorBetriebstemp > LLA_neu) LLA_neu = conf_LLA_MotorVorBetriebstemp;
  345. }
  346. else if(mom_MotorTemp >= conf_Temp_MotorBetriebstempAb && mom_MotorTemp < conf_Temp_MotorHeissAb && !status_MotorHeiss) {
  347. // Motor ist auf Betriebstemperatur
  348. status_MotorBetriebstemp = true;
  349. if(conf_LLA_MotorBetriebstemp > LLA_neu) LLA_neu = conf_LLA_MotorBetriebstemp;
  350. }
  351. else if(mom_MotorTemp >= conf_Temp_MotorBetriebstempAb && mom_MotorTemp < conf_Temp_MotorBetriebstempBis && status_MotorHeiss) {
  352. // Temperatur ist nachdem Status HEISS wieder weit genug gefallen -> Betriebstemperatur
  353. status_MotorHeiss = false;
  354. status_MotorBetriebstemp = true;
  355. if(conf_LLA_MotorBetriebstemp > LLA_neu) LLA_neu = conf_LLA_MotorBetriebstemp;
  356. }
  357. else if(mom_MotorTemp >= conf_Temp_MotorHeissAb) {
  358. // Motor ist HEISS -> weitere LL Anhebung um die Kühlung zu verbessern aktivieren
  359. // deaktivierung sobald die Temperatur wieder unter [conf_Temp_MotorBetriebstempBis] gefallen ist
  360. status_MotorHeiss = true;
  361. status_MotorBetriebstemp = false;
  362. if(conf_LLA_MotorHeiss > LLA_neu) LLA_neu = conf_LLA_MotorHeiss;
  363. }
  364. // Motor auf Betriebstemperatur - reduziere LL auf minimum "conf_LLA_Basis" nach einiger Zeit
  365. if(status_MotorBetriebstemp && LLA_neu == conf_LLA_MotorBetriebstemp) {
  366. if(countdown_LLA_aus > 0) {
  367. countdown_LLA_aus--;
  368. }
  369. else {
  370. LLA_neu = conf_LLA_Basis;
  371. }
  372. }
  373. else {
  374. countdown_LLA_aus = conf_countdown_LLA_aus;
  375. }
  376. // wenn der Ziel-LLA-Wert sich vom aktuell eingestellten unterscheidet -> Abgleich verstellen
  377. if (LLA_momentan != LLA_neu) {
  378. ediabas.ArgString = "lla;" + LLA_neu;
  379. ediabas.ArgBinaryStd = null;
  380. ediabas.ResultsRequests = "JOB_STATUS";
  381. ediabas.ExecuteJob("ABGLEICH_VERSTELLEN");
  382. //resultSets = ediabas.ResultSets;
  383. //if (resultSets != null && resultSets.Count >= 2)
  384. //{
  385. // EdiabasThread.MergeResultDictionarys(ref resultDict, resultSets[1]);
  386. //}
  387. // Ablaufvariable wieder zurücksetzen, sonst würde diese funktion nun bei jedem folgenden durchlauf ausgeführt werden...
  388. LLA_momentan = LLA_neu;
  389. conf_counter_Job2_max = 0;
  390. }
  391. // Job SGBD 2
  392. if(counter_JobSgbd2 == 0) {
  393. counter_JobSgbd2++;
  394. try {
  395. // try/catch, damit nicht der ganze Durchlauf abgebrochen und
  396. // gar keine Daten zurückgeliefert werden, falls das Steuergerät nicht
  397. // antwortet.
  398. currSgbd = 1;
  399. ediabas.ResolveSgbdFile(conf_sgbds[currSgbd]);
  400. //ediabas.ArgString = string.Empty;
  401. //ediabas.ArgBinaryStd = null;
  402. //ediabas.ResultsRequests = string.Empty;
  403. //ediabas.ExecuteJob("INITIALISIERUNG");
  404. ediabas.ArgString = string.Empty;
  405. ediabas.ArgBinaryStd = null;
  406. ediabas.ResultsRequests = string.Empty;
  407. ediabas.ExecuteJob("STATUS_TOENS_IO");
  408. resultSets_JobSgbd2 = ediabas.ResultSets;
  409. }
  410. catch {
  411. // dann halt nicht
  412. }
  413. }
  414. else if (counter_JobSgbd2 >= conf_counter_JobSgbd2_max) {
  415. counter_JobSgbd2 = 0;
  416. }
  417. else {
  418. counter_JobSgbd2++;
  419. }
  420. if (resultSets_JobSgbd2 != null && resultSets_JobSgbd2.Count >= 2)
  421. {
  422. EdiabasThread.MergeResultDictionarys(ref resultDict, resultSets_JobSgbd2[1], "STATUS_TOENS_IO#");
  423. }
  424. }
  425. public string FormatResult(JobReader.PageInfo pageInfo, MultiMap<string, EdiabasNet.ResultData> resultDict, string resultName, ref Android.Graphics.Color? textColor)
  426. {
  427. string result = string.Empty;
  428. double value;
  429. bool found;
  430. // Liste der möglichen Farbnamen: https://docs.microsoft.com/en-us/dotnet/api/android.graphics.color?view=xamarin-android-sdk-9
  431. switch (resultName)
  432. {
  433. case "STATUS_MESSWERTBLOCK_LESEN#STAT_MOTORDREHZAHL_WERT":
  434. value = ActivityMain.GetResultDouble(resultDict, resultName, 0, out found);
  435. // result format: {0,[DIGITS TOTAL INCL COMMA],[0|0.0|0.00|0.000...]}
  436. result = string.Format(ActivityMain.Culture, "{0,1:0}", value);
  437. if (found && value <= 4000) textColor = Android.Graphics.Color.White;
  438. else if (found && value <= 4250) textColor = Android.Graphics.Color.Yellow;
  439. else if (found && value <= 4500) textColor = Android.Graphics.Color.Orange;
  440. else if (found && value > 4500) textColor = Android.Graphics.Color.Red;
  441. else textColor = Android.Graphics.Color.Gray;
  442. break;
  443. case "STATUS_MESSWERTBLOCK_LESEN#STAT_MOTORMOMENT_AKTUELL_WERT":
  444. value = ActivityMain.GetResultDouble(resultDict, resultName, 0, out found);
  445. // result format: {0,[DIGITS TOTAL INCL COMMA],[0|0.0|0.00|0.000...]}
  446. // DDE5 liefert unplausiblen wert bei nicht laufendem Motor -> überschreibe mit 0
  447. // DDE5 reports invalid value with engine off -> overwrite that with 0
  448. if(mom_N < 600) result = "0";
  449. else result = string.Format(ActivityMain.Culture, "{0,1:0}", value);
  450. /// if (found && value <= 4000) textColor = Android.Graphics.Color.White;
  451. /// else if (found && value <= 4250) textColor = Android.Graphics.Color.Yellow;
  452. /// else if (found && value <= 4500) textColor = Android.Graphics.Color.Orange;
  453. /// else if (found && value > 4500) textColor = Android.Graphics.Color.Red;
  454. /// else textColor = Android.Graphics.Color.Gray;
  455. break;
  456. case "STATUS_MESSWERTBLOCK_LESEN#STAT_EINSPRITZMENGE_AKTUELL_WERT":
  457. value = ActivityMain.GetResultDouble(resultDict, resultName, 0, out found);
  458. // result format: {0,[DIGITS TOTAL INCL COMMA],[0|0.0|0.00|0.000...]}
  459. // DDE5 liefert unplausiblen wert bei nicht laufendem Motor -> überschreibe mit 0
  460. // DDE5 reports invalid value with engine off -> overwrite that with 0
  461. if(mom_N < 600) result = "0";
  462. else result = string.Format(ActivityMain.Culture, "{0,1:0}", value);
  463. /// if (found && value <= 4000) textColor = Android.Graphics.Color.White;
  464. /// else if (found && value <= 4250) textColor = Android.Graphics.Color.Yellow;
  465. /// else if (found && value <= 4500) textColor = Android.Graphics.Color.Orange;
  466. /// else if (found && value > 4500) textColor = Android.Graphics.Color.Red;
  467. /// else textColor = Android.Graphics.Color.Gray;
  468. break;
  469. case "STATUS_MESSWERTBLOCK_LESEN#STAT_UBATT_WERT":
  470. value = ActivityMain.GetResultDouble(resultDict, resultName, 0, out found);
  471. // result format: {0,[DIGITS TOTAL INCL COMMA],[0|0.0|0.00|0.000...]}
  472. result = string.Format(ActivityMain.Culture, "{0,1:0.0}", value);
  473. if (found && value < 10.5) textColor = Android.Graphics.Color.Red;
  474. else if (found && value < 11.5) textColor = Android.Graphics.Color.Orange;
  475. else if (found && value <= 12.5) textColor = Android.Graphics.Color.Yellow;
  476. else if (found && value <= 13.2) textColor = Android.Graphics.Color.Gray;
  477. else if (found && value <= 14.5) textColor = Android.Graphics.Color.White;
  478. else if (found && value > 14.5) textColor = Android.Graphics.Color.Red;
  479. else textColor = Android.Graphics.Color.Gray;
  480. break;
  481. case "STATUS_MESSWERTBLOCK_LESEN#STAT_GENERATORLAST_WERT":
  482. value = ActivityMain.GetResultDouble(resultDict, resultName, 0, out found);
  483. // result format: {0,[DIGITS TOTAL INCL COMMA],[0|0.0|0.00|0.000...]}
  484. result = string.Format(ActivityMain.Culture, "{0,1:0}", value);
  485. if (found && value <= 60) textColor = Android.Graphics.Color.White;
  486. else if (found && value <= 70) textColor = Android.Graphics.Color.Yellow;
  487. else if (found && value <= 80) textColor = Android.Graphics.Color.Orange;
  488. else if (found && value > 80) textColor = Android.Graphics.Color.Red;
  489. else textColor = Android.Graphics.Color.Gray;
  490. break;
  491. case "STATUS_MESSWERTBLOCK_LESEN#STAT_ZUHEIZER_ANSTEUERUNG_WERT":
  492. value = ActivityMain.GetResultDouble(resultDict, resultName, 0, out found);
  493. // result format: {0,[DIGITS TOTAL INCL COMMA],[0|0.0|0.00|0.000...]}
  494. result = string.Format(ActivityMain.Culture, "{0,1:0}", value);
  495. if (found && value <= 60) textColor = Android.Graphics.Color.White;
  496. else if (found && value <= 70) textColor = Android.Graphics.Color.Yellow;
  497. else if (found && value <= 80) textColor = Android.Graphics.Color.Orange;
  498. else if (found && value > 80) textColor = Android.Graphics.Color.Red;
  499. else textColor = Android.Graphics.Color.Gray;
  500. break;
  501. case "STATUS_MESSWERTBLOCK_LESEN#STAT_KUEHLMITTELTEMPERATUR_WERT":
  502. value = ActivityMain.GetResultDouble(resultDict, resultName, 0, out found);
  503. result = string.Format(ActivityMain.Culture, "{0,1:0}", value);
  504. if (found && value < 75) textColor = Android.Graphics.Color.Blue;
  505. else if (found && value <= 105) textColor = Android.Graphics.Color.White;
  506. else if (found && value <= 110) textColor = Android.Graphics.Color.Yellow;
  507. else if (found && value <= 115) textColor = Android.Graphics.Color.Orange;
  508. else if (found && value > 115) textColor = Android.Graphics.Color.Red;
  509. else textColor = Android.Graphics.Color.Gray;
  510. break;
  511. case "STATUS_MESSWERTBLOCK_LESEN#STAT_LADELUFTTEMPERATUR_WERT":
  512. value = ActivityMain.GetResultDouble(resultDict, resultName, 0, out found);
  513. result = string.Format(ActivityMain.Culture, "{0,1:0}", value);
  514. if (found && value <= 55) textColor = Android.Graphics.Color.White;
  515. else if (found && value <= 65) textColor = Android.Graphics.Color.Yellow;
  516. else if (found && value <= 75) textColor = Android.Graphics.Color.Orange;
  517. else if (found && value > 85) textColor = Android.Graphics.Color.Red;
  518. else textColor = Android.Graphics.Color.Gray;
  519. break;
  520. }
  521. return result;
  522. }
  523. }
  524. ]]>
  525. </code>
  526. </page>
  527. </fragment>