DDEAutoLLA_D50M57E1.ccpage 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500
  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="HOME" display-mode="grid" fontsize="medium" gauges-portrait="3" gauges-landscape="5" logfile="DME_DDE.log">
  4. <strings lang="de">
  5. <string name="HOME">HOME</string>
  6. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_KUEHLMITTELTEMPERATUR_WERT"> Kühlmitteltemperatur [°C]</string>
  7. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LADELUFTTEMPERATUR_WERT"> Ladelufttemp. [°C]</string>
  8. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_MOTORDREHZAHL_WERT"> Drehzahl [U/min]</string>
  9. <string name="!JOB#LLA_ABGLEICH_LESEN_WERT"> Anhebung Leerlaufdrehzahl [u/min]</string>
  10. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_MOTORMOMENT_AKTUELL_WERT"> Drehmoment [Nm]:</string>
  11. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_UBATT_WERT"> Batteriespannung [V]</string>
  12. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_GENERATORLAST_WERT"> Generatorlast [%]</string>
  13. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_ZUHEIZER_ANSTEUERUNG_WERT"> Zuheizer PWM [%]</string>
  14. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LADEDRUCK_WERT"> Ladedruck Ist [mbar]</string>
  15. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LADEDRUCK_SOLL_WERT"> Ladedruck Soll [mbar]</string>
  16. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LUFTMASSE_PRO_HUB_WERT"> Luftmasse [mg/Hub]</string>
  17. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_UMGEBUNGSDRUCK_WERT"> Luftdruck [mbar]</string>
  18. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_RAILDRUCK_WERT"> Raildruck Ist [bar]</string>
  19. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_GESCHWINDIGKEIT_WERT"> Geschwindigkeit [km/h]</string>
  20. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_FAHRZEUGBESCHLEUNIGUNG_WERT"> Beschleunigung [m/s²]</string>
  21. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_KUPPLUNGSSCHALTER_ROH_WERT"> Kupplungsschalter</string>
  22. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_KLIMAKOMPRESSOR_STATUS_WERT"> Klimakompressor</string>
  23. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_BEREITSCHAFT_KLIMA_WERT"> Klima Bereitschaft</string>
  24. <string name="!JOB#STATUS_TOENS_IO#STAT_TOG_HIGH_WERT"> TÖNS Heizzeit [ms]</string>
  25. <string name="!JOB#STATUS_TOENS_IO#STAT_TOG_LOW_WERT"> TÖNS Kühlzeit [ms]</string>
  26. </strings>
  27. <strings>
  28. <string name="HOME">HOME</string>
  29. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_KUEHLMITTELTEMPERATUR_WERT"> coolant [°C]</string>
  30. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LADELUFTTEMPERATUR_WERT"> charge air temperature [°C]</string>
  31. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_MOTORDREHZAHL_WERT"> engine speed [U/min]</string>
  32. <string name="!JOB#LLA_ABGLEICH_LESEN_WERT"> increase idle speed [rpm]</string>
  33. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_MOTORMOMENT_AKTUELL_WERT"> torque [Nm]:</string>
  34. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_UBATT_WERT"> voltage [V]</string>
  35. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_GENERATORLAST_WERT"> alternator load [%]</string>
  36. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_ZUHEIZER_ANSTEUERUNG_WERT"> aux heater PWM [%]</string>
  37. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LADEDRUCK_WERT"> act. boost pressure [mbar]</string>
  38. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LADEDRUCK_SOLL_WERT"> target boost pressure [mbar]</string>
  39. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LUFTMASSE_PRO_HUB_WERT"> air mass [mg/stroke]</string>
  40. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_UMGEBUNGSDRUCK_WERT"> air pressure [mbar]</string>
  41. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_RAILDRUCK_WERT"> act. rail pressure [bar]</string>
  42. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_GESCHWINDIGKEIT_WERT"> speed [km/h]</string>
  43. <string name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_FAHRZEUGBESCHLEUNIGUNG_WERT"> acceleration [m/s²]</string>
  44. <string name="!JOB#STATUS_TOENS_IO#STAT_TOG_HIGH_WERT"> TÖNS heating time [ms]</string>
  45. <string name="!JOB#STATUS_TOENS_IO#STAT_TOG_LOW_WERT"> TÖNS cooling time [ms]</string>
  46. </strings>
  47. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_KUEHLMITTELTEMPERATUR_WERT" result="STAT_KUEHLMITTELTEMPERATUR_WERT" grid-type="simple-gauge-round" min-value="-20" max-value="120" log_tag="STAT_KUEHLMITTELTEMPERATUR_WERT" />
  48. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LADELUFTTEMPERATUR_WERT" result="STAT_LADELUFTTEMPERATUR_WERT" format=".1R" grid-type="simple-gauge-round" min-value="-20" max-value="80" log_tag="STAT_LADELUFTTEMPERATUR_WERT" />
  49. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_MOTORDREHZAHL_WERT" result="STAT_MOTORDREHZAHL_WERT" grid-type="simple-gauge-round" min-value="0" max-value="5000" log_tag="STAT_MOTORDREHZAHL_WERT" />
  50. <display name="!JOB#LLA_ABGLEICH_LESEN_WERT" result="LLA_ABGLEICH_LESEN_WERT" format="L" display-order="0" grid-type="simple-gauge-round" min-value="0" max-value="250" log_tag="LLA" />
  51. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_MOTORMOMENT_AKTUELL_WERT" result="STAT_MOTORMOMENT_AKTUELL_WERT" format="L" grid-type="simple-gauge-round" min-value="0" max-value="600" log_tag="STAT_MOTORMOMENT_AKTUELL_WERT" />
  52. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_UBATT_WERT" result="STAT_UBATT_WERT" grid-type="simple-gauge-round" min-value="0" max-value="15" log_tag="STAT_UBATT_WERT" />
  53. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_GENERATORLAST_WERT" result="STAT_GENERATORLAST_WERT" grid-type="simple-gauge-round" min-value="0" max-value="100" log_tag="STAT_GENERATORLAST_WERT" />
  54. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_ZUHEIZER_ANSTEUERUNG_WERT" result="STAT_ZUHEIZER_ANSTEUERUNG_WERT" grid-type="simple-gauge-round" min-value="0" max-value="100" log_tag="STAT_ZUHEIZER_ANSTEUERUNG_WERT" />
  55. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LADEDRUCK_WERT" result="STAT_LADEDRUCK_WERT" format="4.1R" grid-type="simple-gauge-round" min-value="0" max-value="2500" log_tag="STAT_LADEDRUCK_WERT" />
  56. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LADEDRUCK_SOLL_WERT" result="STAT_LADEDRUCK_SOLL_WERT" format="4.1R" grid-type="simple-gauge-round" min-value="0" max-value="2500" log_tag="STAT_LADEDRUCK_SOLL_WERT" />
  57. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_LUFTMASSE_PRO_HUB_WERT" result="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" />
  58. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_UMGEBUNGSDRUCK_WERT" result="STAT_UMGEBUNGSDRUCK_WERT" format="4.1R" grid-type="simple-gauge-round" min-value="800" max-value="1300" log_tag="STAT_UMGEBUNGSDRUCK_WERT" />
  59. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_RAILDRUCK_WERT" result="STAT_RAILDRUCK_WERT" format="L" grid-type="simple-gauge-round" min-value="0" max-value="1400" log_tag="STAT_RAILDRUCK_WERT" />
  60. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_GESCHWINDIGKEIT_WERT" result="STAT_GESCHWINDIGKEIT_WERT" format="L" grid-type="simple-gauge-round" min-value="0" max-value="250" log_tag="STAT_GESCHWINDIGKEIT_WERT" />
  61. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_FAHRZEUGBESCHLEUNIGUNG_WERT" result="STAT_FAHRZEUGBESCHLEUNIGUNG_WERT" format="2.3R" grid-type="simple-gauge-round" min-value="-15" max-value="15" log_tag="STAT_FAHRZEUGBESCHLEUNIGUNG_WERT" />
  62. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_KUPPLUNGSSCHALTER_ROH_WERT" result="STAT_KUPPLUNGSSCHALTER_ROH_WERT" format="L" grid-type="simple-gauge-round" min-value="0" max-value="1" log_tag="STAT_KUPPLUNGSSCHALTER_ROH_WERT" />
  63. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_KLIMAKOMPRESSOR_STATUS_WERT" result="STAT_KLIMAKOMPRESSOR_STATUS_WERT" format="L" grid-type="simple-gauge-round" min-value="0" max-value="1" log_tag="STAT_KLIMAKOMPRESSOR_STATUS_WERT" />
  64. <display name="!JOB#STATUS_MESSWERTBLOCK_LESEN#STAT_BEREITSCHAFT_KLIMA_WERT" result="STAT_BEREITSCHAFT_KLIMA_WERT" format="L" grid-type="simple-gauge-round" min-value="0" max-value="1" log_tag="STAT_BEREITSCHAFT_KLIMA_WERT" />
  65. <display name="!JOB#STATUS_TOENS_IO#STAT_TOG_HIGH_WERT" result="STAT_TOG_HIGH_WERT" format="L" grid-type="simple-gauge-round" min-value="0" max-value="1000" log_tag="STAT_TOG_HIGH_WERT" />
  66. <display name="!JOB#STATUS_TOENS_IO#STAT_TOG_LOW_WERT" result="STAT_TOG_LOW_WERT" format="L" grid-type="simple-gauge-round" min-value="0" max-value="1000" log_tag="STAT_TOG_LOW_WERT" />
  67. <jobs sgbd="D50M57E1" />
  68. <code show_warnings="true">
  69. <![CDATA[
  70. class PageClass
  71. {
  72. // PWM-Wert Ansteuerung Zuheizer, ab dem dieser als AN erkannt wird
  73. private double conf_ZuheizerAnAb = 25;
  74. // PWM-Wert Generatorlast, ab dem eine LL-Anhebung erfolgt
  75. private double conf_GeneratorlastHochAb = 60;
  76. private double conf_GeneratorlastSehrHochAb = 80;
  77. // Motortemperaturen
  78. private double conf_Temp_MotorSehrKaltBis = 25;
  79. private double conf_Temp_MotorKaltBis = 65;
  80. private double conf_Temp_MotorBetriebstempAb = 75;
  81. private double conf_Temp_MotorBetriebstempBis = 95;
  82. private double conf_Temp_MotorHeissAb = 100;
  83. // Ziel-Leerlaufanhebungswerte - es "gewinnt" immer der höchste Wert für die aktuellen Betriebsbedingungen
  84. private int conf_LLA_Basis = 0; // wenn die Kupplung nicht betätigt und auch sonst keine höhere Anhebung aktiv ist
  85. private int conf_LLA_Kupplung = 150;
  86. private int conf_LLA_Zuheizer = 200;
  87. private int conf_LLA_MotorSehrKalt = 150;
  88. private int conf_LLA_MotorKalt = 100;
  89. private int conf_LLA_MotorVorBetriebstemp = 70;
  90. private int conf_LLA_MotorBetriebstemp = 50;
  91. private int conf_LLA_MotorHeiss = 200;
  92. private int conf_LLA_KlimaBereitschaft = 90;
  93. private int conf_LLA_Klimakompressor = 120;
  94. private int conf_LLA_GeneratorlastHoch = 90;
  95. private int conf_LLA_GeneratorlastSehrHoch = 120;
  96. // Konfiguration für Zähler (Anzahl Durchläufe bis eine Aktion eintritt)
  97. private int conf_countdown_ZuheizerAn_max = 5;
  98. private int conf_countdown_Kupplung_max = 5;
  99. private int conf_countdown_Generatorlast_max = 5;
  100. private int conf_countdown_LLA_aus = 15;
  101. private int conf_countdown_Job2_max = 10;
  102. // Statusvariablen
  103. private bool status_MotorHeiss = false;
  104. private bool status_Kupplung = false;
  105. private bool status_Zuheizer = false;
  106. //private bool status_Klima = false;
  107. private bool status_GeneratorlastHoch = false;
  108. private bool status_GeneratorlastSehrHoch = false;
  109. // Zähler
  110. private int countdown_ZuheizerAn = 0;
  111. private int countdown_Kupplung = 0;
  112. private int countdown_Generatorlast = 0;
  113. private int countdown_LLA_aus = 0;
  114. private int countdown_Job2 = 0;
  115. // Globale Variablen für Leerlaufanhebung
  116. private int LLA_momentan = 0;
  117. List<Dictionary<string, EdiabasNet.ResultData>> resultSets_Abgleich;
  118. public void ExecuteJob(EdiabasNet ediabas, ref MultiMap<string, EdiabasNet.ResultData> resultDict, bool firstCall)
  119. {
  120. List<Dictionary<string, EdiabasNet.ResultData>> resultSets;
  121. // Job 1 - ständig zu aktualisierende Werte
  122. ediabas.ArgString = "JA;ILMMG;IPLAD;IPUMG;IUBAT;IMOAK;INMOT;SPLAD;ITKUM;ITLAL;IPRDR;IAFZG;IVKMH;ITZUH;IGENL;RSKUP;IKLIS;IBKLI";
  123. ediabas.ArgBinaryStd = null;
  124. ediabas.ResultsRequests = string.Empty;
  125. ediabas.ExecuteJob("STATUS_MESSWERTBLOCK_LESEN");
  126. resultSets = ediabas.ResultSets;
  127. if (resultSets != null && resultSets.Count >= 2)
  128. {
  129. EdiabasThread.MergeResultDictionarys(ref resultDict, resultSets[1]);
  130. }
  131. // Job 2 - wird nur bei jedem X-ten Durchlauf ausgeführt (definiert von [conf_countdown_Job2_max])
  132. if(countdown_Job2 == 0) {
  133. ediabas.ArgString = "lla";
  134. ediabas.ArgBinaryStd = null;
  135. ediabas.ResultsRequests = string.Empty;
  136. ediabas.ExecuteJob("ABGLEICH_LESEN");
  137. resultSets_Abgleich = ediabas.ResultSets;
  138. }
  139. else if(countdown_Job2 >= conf_countdown_Job2_max) {
  140. countdown_Job2 = 0;
  141. }
  142. else {
  143. countdown_Job2++;
  144. }
  145. // da diese Werte nicht in jedem Durchlauf vom Steuergerät gelesen werden sind die Ergebnisdaten in einer
  146. // globalen Variablen gespeichert und werden jedesmal übernommen, auch wenn nicht ganz aktuell
  147. if (resultSets_Abgleich != null && resultSets_Abgleich.Count >= 2)
  148. {
  149. EdiabasThread.MergeResultDictionarys(ref resultDict, resultSets_Abgleich[1], "LLA_");
  150. }
  151. // Werte für automatische Leerlaufanhebung holen
  152. EdiabasNet.ResultData resultData;
  153. // Kupplungsschalter
  154. bool mom_Kupplung = false;
  155. if (resultSets[1].TryGetValue("STAT_KUPPLUNGSSCHALTER_ROH_WERT", out resultData))
  156. {
  157. if (resultData.OpData is Double) {
  158. if(((Double)resultData.OpData) > 0.0) mom_Kupplung = true;
  159. }
  160. }
  161. // Klimakompressor
  162. bool mom_Klimakompressor = false;
  163. if (resultSets[1].TryGetValue("STAT_KLIMAKOMPRESSOR_STATUS_WERT", out resultData))
  164. {
  165. if (resultData.OpData is Double) {
  166. if(((Double)resultData.OpData) > 0.0) mom_Klimakompressor = true;
  167. }
  168. }
  169. // Klima-Bereitschaft
  170. bool mom_KlimaBereitschaft = false;
  171. if (resultSets[1].TryGetValue("STAT_BEREITSCHAFT_KLIMA_WERT", out resultData))
  172. {
  173. if (resultData.OpData is Double) {
  174. if(((Double)resultData.OpData) > 0.0) mom_KlimaBereitschaft = true;
  175. }
  176. }
  177. // Zuheizer-Ansteuerung
  178. Double mom_Zuheizer_PWM = 0;
  179. if (resultSets[1].TryGetValue("STAT_ZUHEIZER_ANSTEUERUNG_WERT", out resultData))
  180. {
  181. if (resultData.OpData is Double)
  182. {
  183. mom_Zuheizer_PWM = ((Double)resultData.OpData);
  184. }
  185. }
  186. // Generatorlast
  187. Double mom_Generatorlast_PWM = 0;
  188. if (resultSets[1].TryGetValue("STAT_GENERATORLAST_WERT", out resultData))
  189. {
  190. if (resultData.OpData is Double)
  191. {
  192. mom_Generatorlast_PWM = ((Double)resultData.OpData);
  193. }
  194. }
  195. // Motortemperatur
  196. Double mom_MotorTemp = 0;
  197. if (resultSets[1].TryGetValue("STAT_KUEHLMITTELTEMPERATUR_WERT", out resultData))
  198. {
  199. if (resultData.OpData is Double)
  200. {
  201. mom_MotorTemp = ((Double)resultData.OpData);
  202. }
  203. }
  204. // Abgleichwert Leerlaufanhebung
  205. if (resultSets_Abgleich[1].TryGetValue("LLA_ABGLEICH_LESEN_WERT", out resultData))
  206. {
  207. if (resultData.OpData is Double)
  208. {
  209. LLA_momentan = (int)((Double)resultData.OpData);
  210. }
  211. }
  212. // Automatische Leerlaufanhebung
  213. int LLA_neu = 0;
  214. // Kupplungsschalter
  215. // der countdown dient dazu dass die Leerlaufanhebung erst zurückgenommen wird,
  216. // wenn die Kupplung schon eine Zeit lang nicht betätigt ist
  217. if (mom_Kupplung || status_Kupplung) {
  218. if(mom_Kupplung) countdown_Kupplung = conf_countdown_Kupplung_max;
  219. if(!status_Kupplung) status_Kupplung = true;
  220. if(conf_LLA_Kupplung > LLA_neu) LLA_neu = conf_LLA_Kupplung;
  221. }
  222. if (countdown_Kupplung > 0){
  223. countdown_Kupplung--;
  224. }
  225. else if (countdown_Kupplung == 0){
  226. status_Kupplung = false;
  227. if(conf_LLA_Basis > LLA_neu) LLA_neu = conf_LLA_Basis;
  228. }
  229. // Zuheizer
  230. // der countdown dient dazu dass die Leerlaufanhebung erst zurückgenommen wird,
  231. // wenn der Zuheizer schon eine Zeit lang inaktiv ist (also z.B. nicht nur kurz wegen zu hoher Generatorlast abgeschaltet wurde)
  232. if (mom_Zuheizer_PWM > conf_ZuheizerAnAb || status_Zuheizer) {
  233. if(mom_Zuheizer_PWM > conf_ZuheizerAnAb) countdown_ZuheizerAn = conf_countdown_ZuheizerAn_max;
  234. if(!status_Zuheizer) status_Zuheizer = true;
  235. if(conf_LLA_Zuheizer > LLA_neu) LLA_neu = conf_LLA_Zuheizer;
  236. }
  237. if (countdown_ZuheizerAn > 0) {
  238. countdown_ZuheizerAn--;
  239. }
  240. else if (countdown_ZuheizerAn == 0) {
  241. status_Zuheizer = false;
  242. if(conf_LLA_Basis > LLA_neu) LLA_neu = conf_LLA_Basis;
  243. }
  244. // Generatorlast
  245. if (mom_Generatorlast_PWM > conf_GeneratorlastSehrHochAb || status_GeneratorlastSehrHoch) {
  246. if(mom_Generatorlast_PWM > conf_GeneratorlastSehrHochAb) countdown_Generatorlast = conf_countdown_Generatorlast_max;
  247. if(!status_GeneratorlastSehrHoch) status_GeneratorlastSehrHoch = true;
  248. if(conf_LLA_GeneratorlastSehrHoch > LLA_neu) LLA_neu = conf_LLA_GeneratorlastSehrHoch;
  249. }
  250. else if (mom_Generatorlast_PWM > conf_GeneratorlastHochAb || status_GeneratorlastHoch) {
  251. if(mom_Generatorlast_PWM > conf_GeneratorlastHochAb) countdown_Generatorlast = conf_countdown_Generatorlast_max;
  252. if(!status_GeneratorlastHoch) status_GeneratorlastHoch = true;
  253. if(conf_LLA_GeneratorlastHoch > LLA_neu) LLA_neu = conf_LLA_GeneratorlastHoch;
  254. }
  255. if (countdown_Generatorlast > 0) {
  256. countdown_Generatorlast--;
  257. }
  258. else if (countdown_Generatorlast == 0) {
  259. status_GeneratorlastHoch = false;
  260. status_GeneratorlastSehrHoch = false;
  261. if(conf_LLA_Basis > LLA_neu) LLA_neu = conf_LLA_Basis;
  262. }
  263. // Klimakompressor und Klimabereitschaft
  264. if (mom_Klimakompressor) {
  265. if(conf_LLA_Klimakompressor > LLA_neu) LLA_neu = conf_LLA_Klimakompressor;
  266. }
  267. else if (mom_KlimaBereitschaft) {
  268. if(conf_LLA_KlimaBereitschaft > LLA_neu) LLA_neu = conf_LLA_KlimaBereitschaft;
  269. }
  270. // Drehzahlanhebung je nach Motortemperatur,
  271. if(mom_MotorTemp < conf_Temp_MotorSehrKaltBis) {
  272. // Motor ist sehr kalt
  273. if(conf_LLA_MotorSehrKalt > LLA_neu) LLA_neu = conf_LLA_MotorSehrKalt;
  274. }
  275. else if(mom_MotorTemp < conf_Temp_MotorKaltBis) {
  276. // Motor ist kalt
  277. if(conf_LLA_MotorKalt > LLA_neu) LLA_neu = conf_LLA_MotorKalt;
  278. }
  279. else if(mom_MotorTemp >= conf_Temp_MotorKaltBis && mom_MotorTemp < conf_Temp_MotorBetriebstempAb) {
  280. // Motor ist nicht mehr kalt, aber noch nicht auf Betriebstemperatur
  281. if(conf_LLA_MotorVorBetriebstemp > LLA_neu) LLA_neu = conf_LLA_MotorVorBetriebstemp;
  282. }
  283. else if(mom_MotorTemp >= conf_Temp_MotorBetriebstempAb && mom_MotorTemp < conf_Temp_MotorHeissAb && !status_MotorHeiss) {
  284. // Motor ist auf Betriebstemperatur
  285. if(conf_LLA_MotorBetriebstemp > LLA_neu) LLA_neu = conf_LLA_MotorBetriebstemp;
  286. }
  287. else if(mom_MotorTemp >= conf_Temp_MotorBetriebstempAb && mom_MotorTemp < conf_Temp_MotorBetriebstempBis && status_MotorHeiss) {
  288. // Temperatur ist nachdem Status HEISS wieder weit genug gefallen -> Betriebstemperatur
  289. status_MotorHeiss = false;
  290. if(conf_LLA_MotorBetriebstemp > LLA_neu) LLA_neu = conf_LLA_MotorBetriebstemp;
  291. }
  292. else if(mom_MotorTemp >= conf_Temp_MotorHeissAb) {
  293. // Motor ist HEISS -> weitere LL Anhebung um die Kühlung zu verbessern aktivieren
  294. // deaktivierung sobald die Temperatur wieder unter [conf_Temp_MotorBetriebstempBis] gefallen ist
  295. status_MotorHeiss = true;
  296. if(conf_LLA_MotorHeiss > LLA_neu) LLA_neu = conf_LLA_MotorHeiss;
  297. }
  298. // Motor auf Betriebstemperatur - reduziere LL auf minimum nach einiger Zeit
  299. if(LLA_neu == conf_LLA_MotorBetriebstemp) {
  300. if(countdown_LLA_aus == 0) {
  301. LLA_neu = conf_LLA_Basis;
  302. }
  303. else if(countdown_LLA_aus > 0) {
  304. countdown_LLA_aus--;
  305. }
  306. }
  307. else {
  308. countdown_LLA_aus = conf_countdown_LLA_aus;
  309. }
  310. // wenn der Ziel-LLA-Wert sich vom aktuell eingestellten unterscheidet -> Abgleich verstellen
  311. if (LLA_momentan != LLA_neu) {
  312. ediabas.ArgString = "lla;" + LLA_neu;
  313. ediabas.ArgBinaryStd = null;
  314. ediabas.ResultsRequests = "JOB_STATUS";
  315. ediabas.ExecuteJob("ABGLEICH_VERSTELLEN");
  316. //resultSets = ediabas.ResultSets;
  317. //if (resultSets != null && resultSets.Count >= 2)
  318. //{
  319. // EdiabasThread.MergeResultDictionarys(ref resultDict, resultSets[1]);
  320. //}
  321. // Ablaufvariable wieder zurücksetzen, sonst würde diese funktion nun bei jedem folgenden durchlauf ausgeführt werden...
  322. LLA_momentan = LLA_neu;
  323. conf_countdown_Job2_max = 0;
  324. }
  325. }
  326. public string FormatResult(JobReader.PageInfo pageInfo, MultiMap<string, EdiabasNet.ResultData> resultDict, string resultName, ref Android.Graphics.Color? textColor)
  327. {
  328. string result = string.Empty;
  329. double value;
  330. bool found;
  331. switch (resultName)
  332. {
  333. case "STAT_MOTORDREHZAHL_WERT":
  334. value = ActivityMain.GetResultDouble(resultDict, resultName, 0, out found);
  335. // result format: {0,[DIGITS TOTAL INCL COMMA],[0|0.0|0.00|0.000...]}
  336. result = string.Format(ActivityMain.Culture, "{0,4:0}", value);
  337. // Liste der möglichen Farbnamen: https://docs.microsoft.com/en-us/dotnet/api/android.graphics.color?view=xamarin-android-sdk-9
  338. if (found && value <= 4000) textColor = Android.Graphics.Color.White;
  339. else if (found && value <= 4250) textColor = Android.Graphics.Color.Yellow;
  340. else if (found && value <= 4500) textColor = Android.Graphics.Color.Orange;
  341. else if (found && value > 4500) textColor = Android.Graphics.Color.Red;
  342. else textColor = Android.Graphics.Color.Gray;
  343. break;
  344. case "STAT_UBATT_WERT":
  345. value = ActivityMain.GetResultDouble(resultDict, resultName, 0, out found);
  346. // result format: {0,[DIGITS TOTAL INCL COMMA],[0|0.0|0.00|0.000...]}
  347. result = string.Format(ActivityMain.Culture, "{0,4:0.0}", value);
  348. if (found && value < 10.5) textColor = Android.Graphics.Color.Red;
  349. else if (found && value < 11.5) textColor = Android.Graphics.Color.Orange;
  350. else if (found && value <= 12.5) textColor = Android.Graphics.Color.Yellow;
  351. else if (found && value <= 13.2) textColor = Android.Graphics.Color.Gray;
  352. else if (found && value <= 14.5) textColor = Android.Graphics.Color.White;
  353. else if (found && value > 14.5) textColor = Android.Graphics.Color.Red;
  354. else textColor = Android.Graphics.Color.Gray;
  355. break;
  356. case "STAT_GENERATORLAST_WERT":
  357. value = ActivityMain.GetResultDouble(resultDict, resultName, 0, out found);
  358. // result format: {0,[DIGITS TOTAL INCL COMMA],[0|0.0|0.00|0.000...]}
  359. result = string.Format(ActivityMain.Culture, "{0,3:0}", value);
  360. if (found && value <= 60) textColor = Android.Graphics.Color.White;
  361. else if (found && value <= 70) textColor = Android.Graphics.Color.Yellow;
  362. else if (found && value <= 80) textColor = Android.Graphics.Color.Orange;
  363. else if (found && value > 80) textColor = Android.Graphics.Color.Red;
  364. else textColor = Android.Graphics.Color.Gray;
  365. break;
  366. case "STAT_ZUHEIZER_ANSTEUERUNG_WERT":
  367. value = ActivityMain.GetResultDouble(resultDict, resultName, 0, out found);
  368. // result format: {0,[DIGITS TOTAL INCL COMMA],[0|0.0|0.00|0.000...]}
  369. result = string.Format(ActivityMain.Culture, "{0,3:0}", value);
  370. if (found && value <= 60) textColor = Android.Graphics.Color.White;
  371. else if (found && value <= 70) textColor = Android.Graphics.Color.Yellow;
  372. else if (found && value <= 80) textColor = Android.Graphics.Color.Orange;
  373. else if (found && value > 80) textColor = Android.Graphics.Color.Red;
  374. else textColor = Android.Graphics.Color.Gray;
  375. break;
  376. case "STAT_KUEHLMITTELTEMPERATUR_WERT":
  377. value = ActivityMain.GetResultDouble(resultDict, resultName, 0, out found);
  378. result = string.Format(ActivityMain.Culture, "{0,3:0}", value);
  379. if (found && value < 75) textColor = Android.Graphics.Color.Blue;
  380. else if (found && value <= 105) textColor = Android.Graphics.Color.White;
  381. else if (found && value <= 110) textColor = Android.Graphics.Color.Yellow;
  382. else if (found && value <= 115) textColor = Android.Graphics.Color.Orange;
  383. else if (found && value > 115) textColor = Android.Graphics.Color.Red;
  384. else textColor = Android.Graphics.Color.Gray;
  385. break;
  386. case "STAT_LADELUFTTEMPERATUR_WERT":
  387. value = ActivityMain.GetResultDouble(resultDict, resultName, 0, out found);
  388. result = string.Format(ActivityMain.Culture, "{0,3:0}", value);
  389. if (found && value <= 55) textColor = Android.Graphics.Color.White;
  390. else if (found && value <= 65) textColor = Android.Graphics.Color.Yellow;
  391. else if (found && value <= 75) textColor = Android.Graphics.Color.Orange;
  392. else if (found && value > 85) textColor = Android.Graphics.Color.Red;
  393. else textColor = Android.Graphics.Color.Gray;
  394. break;
  395. }
  396. return result;
  397. }
  398. }
  399. ]]>
  400. </code>
  401. </page>
  402. </fragment>