<?xml version="1.0" encoding="utf-8"?> <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"> <page name="DDE5Abgleich" display-mode="list" fontsize="medium" gauges-portrait="2" gauges-landscape="4" logfile="DDE5E1_Abgleich.log"> <strings> <string name="DDE5Abgleich">DDE5 adjustment</string> <string name="!JOB#AGR_ABGLEICH_LESEN_WERT"> EGR (fresh air rate)</string> <string name="!JOB#LLA_ABGLEICH_LESEN_WERT"> increase idle speed [rpm]</string> </strings> <strings lang="de"> <string name="DDE5Abgleich">DDE5 Abgleich</string> <string name="!JOB#AGR_ABGLEICH_LESEN_WERT"> AGR (Frischluftrate)</string> <string name="!JOB#LLA_ABGLEICH_LESEN_WERT"> Anhebung Leerlaufdrehzahl [u/min]</string> </strings> <display name="!JOB#AGR_ABGLEICH_LESEN_WERT" result="AGR_ABGLEICH_LESEN_WERT" format="L" display-order="0" grid-type="text" min-value="0" max-value="100" log_tag="AGR" /> <display name="!JOB#LLA_ABGLEICH_LESEN_WERT" result="LLA_ABGLEICH_LESEN_WERT" format="L" display-order="0" grid-type="text" min-value="0" max-value="100" log_tag="LLA" /> <jobs sgbd="D50M57E1" /> <code show_warnings="true"> <![CDATA[ class PageClass { // Button deklarieren private Button buttonAGRserie; private Button buttonAGRred; private Button buttonLLA0; private Button buttonLLA50; private Button buttonLLA70; private Button buttonLLA100; // Ablaufvariable deklarieren und initialisieren // diese boolsche Variable wird vom Button auf true gesetzt und in der ExecuteJob Methode ausgewertet // wo dann ggf. der eigentliche Befehl ans Steuergerät ausgeführt wird private bool set_AGR_serie = false; private bool set_AGR_red = false; private bool set_LLA_0 = false; private bool set_LLA_50 = false; private bool set_LLA_70 = false; private bool set_LLA_100 = false; // Seitenaufbau: // <display... tags müssen direkt unter <page... stehen und result="RESULT_NAME" (ohne job name) enthalten // diese werden unterhalb von der Funktion ExecuteJob befüllt // <job... tags wie normalerweise gibt es nicht // Es darf nur ein <jobs> tag in dieser form vorhanden sein: <jobs sgbg="sgbdname" /> // Jedenfalls wurde bei meinen Tests die ExecuteJobs Funktion niemals aufgerufen wenn in der ccpage // jobs im normalen Format enthalten waren. Ob das wirklich so ist oder ich einen anderen Fehler hatte // muss ich erst noch rausfinden. public void CreateLayout(ActivityMain activity, JobReader.PageInfo pageInfo, LinearLayout pageLayout) { LinearLayout buttonLayout = new LinearLayout(activity); buttonLayout.Orientation = Orientation.Horizontal; LinearLayout.LayoutParams buttonLayoutParams = new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent); buttonLayoutParams.Weight = 1; // Button AGR Serie buttonAGRserie = new Button(activity); buttonAGRserie.Text = "AGR \nSerie"; buttonAGRserie.Click += delegate { // button setzt klassenweite variable auf true, diese wird beim durchlauf von ExecuteJob ausgewertet set_AGR_serie = true; //// Benachrichtung anzeigen wenn man will //ActivityMain.ShowNotification(activity, 0, 2, // "DDE Abgleich", // "AGR 0"); }; buttonLayout.AddView(buttonAGRserie, buttonLayoutParams); // Button AGR Reduziert buttonAGRred = new Button(activity); buttonAGRred.Text = "AGR \nmin."; buttonAGRred.Click += delegate { // button setzt klassenweite variable auf true, diese wird beim durchlauf von ExecuteJob ausgewertet set_AGR_red = true; //// Benachrichtung anzeigen wenn man will //ActivityMain.ShowNotification(activity, 0, 2, // "DDE Abgleich", // "AGR 87"); }; buttonLayout.AddView(buttonAGRred, buttonLayoutParams); // Button Leerlauf Serie buttonLLA0 = new Button(activity); buttonLLA0.Text = "LL \n+0"; buttonLLA0.Click += delegate { // button setzt klassenweite variable auf true, diese wird beim durchlauf von ExecuteJob ausgewertet set_LLA_0 = true; //// Benachrichtung anzeigen wenn man will //ActivityMain.ShowNotification(activity, 0, 2, // "DDE Abgleich", // "Leerlaufdrehzahl +0"); }; buttonLayout.AddView(buttonLLA0, buttonLayoutParams); // Button Leerlauf +50 buttonLLA50 = new Button(activity); buttonLLA50.Text = "LL \n+50"; buttonLLA50.Click += delegate { // button setzt klassenweite variable auf true, diese wird beim durchlauf von ExecuteJob ausgewertet set_LLA_50 = true; //// Benachrichtung anzeigen wenn man will //ActivityMain.ShowNotification(activity, 0, 2, // "DDE Abgleich", // "Leerlaufdrehzahl +50"); }; buttonLayout.AddView(buttonLLA50, buttonLayoutParams); // Button Leerlauf +70 buttonLLA70 = new Button(activity); buttonLLA70.Text = "LL \n+70"; buttonLLA70.Click += delegate { // button setzt klassenweite variable auf true, diese wird beim durchlauf von ExecuteJob ausgewertet set_LLA_70 = true; //// Benachrichtung anzeigen wenn man will //ActivityMain.ShowNotification(activity, 0, 2, // "DDE Abgleich", // "Leerlaufdrehzahl +70"); }; buttonLayout.AddView(buttonLLA70, buttonLayoutParams); // Button Leerlauf +100 buttonLLA100 = new Button(activity); buttonLLA100.Text = "LL \n+100"; buttonLLA100.Click += delegate { // button setzt klassenweite variable auf true, diese wird beim durchlauf von ExecuteJob ausgewertet set_LLA_100 = true; //// Benachrichtung anzeigen wenn man will //ActivityMain.ShowNotification(activity, 0, 2, // "DDE Abgleich", // "Leerlaufdrehzahl +100"); }; buttonLayout.AddView(buttonLLA100, buttonLayoutParams); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent); pageLayout.AddView(buttonLayout, layoutParams); } public void DestroyLayout(JobReader.PageInfo pageInfo) { buttonAGRserie = null; buttonAGRred = null; buttonLLA0 = null; buttonLLA50 = null; buttonLLA70 = null; buttonLLA100 = null; } public void ExecuteJob(EdiabasNet ediabas, ref MultiMap<string, EdiabasNet.ResultData> resultDict, bool firstCall) { List<Dictionary<string, EdiabasNet.ResultData>> resultSets; // hier werden die job results zwischengespeichert // unterhalb der/die JOB(s) zur Datenanzeige ediabas.ArgString = "agr"; ediabas.ArgBinaryStd = null; ediabas.ResultsRequests = string.Empty; ediabas.ExecuteJob("ABGLEICH_LESEN"); resultSets = ediabas.ResultSets; if (resultSets != null && resultSets.Count >= 2) { // results der aktuellen Abfrage mit unveränderten result namen übernehmen EdiabasThread.MergeResultDictionarys(ref resultDict, resultSets[1], "AGR_"); } ediabas.ArgString = "lla"; ediabas.ArgBinaryStd = null; ediabas.ResultsRequests = string.Empty; ediabas.ExecuteJob("ABGLEICH_LESEN"); resultSets = ediabas.ResultSets; if (resultSets != null && resultSets.Count >= 2) { // results der aktuellen Abfrage mit unveränderten result namen übernehmen EdiabasThread.MergeResultDictionarys(ref resultDict, resultSets[1], "LLA_"); } // ENDE JOBs // Button JOBs if (set_AGR_serie) { ediabas.ArgString = "agr;0"; ediabas.ArgBinaryStd = null; ediabas.ResultsRequests = "JOB_STATUS"; ediabas.ExecuteJob("ABGLEICH_VERSTELLEN"); ediabas.ArgString = "agr;0"; ediabas.ArgBinaryStd = null; ediabas.ResultsRequests = "JOB_STATUS"; ediabas.ExecuteJob("ABGLEICH_PROG"); // JOB RESULT ermitteln (wird derzeit nicht weiter verwendet weil man es anhand der geänderten Daten // und den blinkenden LEDs im KOMBI eh sofort sieht) //resultSets = ediabas.ResultSets; //if (resultSets != null && resultSets.Count >= 2) //{ // EdiabasThread.MergeResultDictionarys(ref resultDict, resultSets[1]); //} // Ablaufvariable wieder zurücksetzen, sonst würde dieser Befehl nun bei jedem weiteren Durchlauf ausgeführt werden... set_AGR_serie = false; } if (set_AGR_red) { ediabas.ArgString = "agr;87"; ediabas.ArgBinaryStd = null; ediabas.ResultsRequests = "JOB_STATUS"; ediabas.ExecuteJob("ABGLEICH_VERSTELLEN"); ediabas.ArgString = "agr;87"; ediabas.ArgBinaryStd = null; ediabas.ResultsRequests = "JOB_STATUS"; ediabas.ExecuteJob("ABGLEICH_PROG"); // JOB RESULT ermitteln (wird derzeit nicht weiter verwendet weil man es anhand der geänderten Daten // und den blinkenden LEDs im KOMBI eh sofort sieht) //resultSets = ediabas.ResultSets; //if (resultSets != null && resultSets.Count >= 2) //{ // EdiabasThread.MergeResultDictionarys(ref resultDict, resultSets[1]); //} // Ablaufvariable wieder zurücksetzen, sonst würde dieser Befehl nun bei jedem weiteren Durchlauf ausgeführt werden... set_AGR_red = false; } if (set_LLA_0) { ediabas.ArgString = "lla;0"; ediabas.ArgBinaryStd = null; ediabas.ResultsRequests = "JOB_STATUS"; ediabas.ExecuteJob("ABGLEICH_VERSTELLEN"); ediabas.ArgString = "lla;0"; ediabas.ArgBinaryStd = null; ediabas.ResultsRequests = "JOB_STATUS"; ediabas.ExecuteJob("ABGLEICH_PROG"); // JOB RESULT ermitteln (wird derzeit nicht weiter verwendet weil man es anhand der geänderten Daten // und den blinkenden LEDs im KOMBI eh sofort sieht) //resultSets = ediabas.ResultSets; //if (resultSets != null && resultSets.Count >= 2) //{ // EdiabasThread.MergeResultDictionarys(ref resultDict, resultSets[1]); //} // Ablaufvariable wieder zurücksetzen, sonst würde dieser Befehl nun bei jedem weiteren Durchlauf ausgeführt werden... set_LLA_0 = false; } if (set_LLA_50) { ediabas.ArgString = "lla;50"; ediabas.ArgBinaryStd = null; ediabas.ResultsRequests = "JOB_STATUS"; ediabas.ExecuteJob("ABGLEICH_VERSTELLEN"); ediabas.ArgString = "lla;50"; ediabas.ArgBinaryStd = null; ediabas.ResultsRequests = "JOB_STATUS"; ediabas.ExecuteJob("ABGLEICH_PROG"); // JOB RESULT ermitteln (wird derzeit nicht weiter verwendet weil man es anhand der geänderten Daten // und den blinkenden LEDs im KOMBI eh sofort sieht) //resultSets = ediabas.ResultSets; //if (resultSets != null && resultSets.Count >= 2) //{ // EdiabasThread.MergeResultDictionarys(ref resultDict, resultSets[1]); //} // Ablaufvariable wieder zurücksetzen, sonst würde dieser Befehl nun bei jedem weiteren Durchlauf ausgeführt werden... set_LLA_50 = false; } if (set_LLA_70) { ediabas.ArgString = "lla;70"; ediabas.ArgBinaryStd = null; ediabas.ResultsRequests = "JOB_STATUS"; ediabas.ExecuteJob("ABGLEICH_VERSTELLEN"); ediabas.ArgString = "lla;70"; ediabas.ArgBinaryStd = null; ediabas.ResultsRequests = "JOB_STATUS"; ediabas.ExecuteJob("ABGLEICH_PROG"); // JOB RESULT ermitteln (wird derzeit nicht weiter verwendet weil man es anhand der geänderten Daten // und den blinkenden LEDs im KOMBI eh sofort sieht) //resultSets = ediabas.ResultSets; //if (resultSets != null && resultSets.Count >= 2) //{ // EdiabasThread.MergeResultDictionarys(ref resultDict, resultSets[1]); //} // Ablaufvariable wieder zurücksetzen, sonst würde dieser Befehl nun bei jedem weiteren Durchlauf ausgeführt werden... set_LLA_70 = false; } if (set_LLA_100) { ediabas.ArgString = "lla;100"; ediabas.ArgBinaryStd = null; ediabas.ResultsRequests = "JOB_STATUS"; ediabas.ExecuteJob("ABGLEICH_VERSTELLEN"); ediabas.ArgString = "lla;100"; ediabas.ArgBinaryStd = null; ediabas.ResultsRequests = "JOB_STATUS"; ediabas.ExecuteJob("ABGLEICH_PROG"); // JOB RESULT ermitteln (wird derzeit nicht weiter verwendet weil man es anhand der geänderten Daten // und den blinkenden LEDs im KOMBI eh sofort sieht) //resultSets = ediabas.ResultSets; //if (resultSets != null && resultSets.Count >= 2) //{ // EdiabasThread.MergeResultDictionarys(ref resultDict, resultSets[1]); //} // Ablaufvariable wieder zurücksetzen, sonst würde dieser Befehl nun bei jedem weiteren Durchlauf ausgeführt werden... set_LLA_100 = false; } } } ]]> </code> </page> </fragment>