Forum: Fahrzeugelektronik CANoe variable auslesen


von canuser (Gast)


Lesenswert?

Ich habe Probleme mit CANoe eine sysvar Variable auslesen
ich habe den Wert 300 in diese Variable reingeschrieben und es hat auch 
geklappt, da die GUI darauf reagiert hat. Will ich nun die selbe 
Variable im nochmal auslesen und im write window ausgeben. Dann bekomme 
ich den Wert 0 zurück. In diesem Beispiel habe ich eine float Variable 
verwenden. Später würde ich auch gerne andere Datentypen verwenden.
Hier ist mein Code

    double valueSysVar;

    valueSysVar = @xxx::yyyyy;

    write("Dec is %d, Float is %f", valueSysVar);

Ergebnis ist 0 Ich erwarte hier aber 300.
Könnt ihr mir hier ein paar Tipps geben? Ich habe es auch schon vesucht 
mit den Vector Funktionen auszulesen, aber mit wenig Erfolg.

von Andras H. (kyrk)


Lesenswert?

Eher:
    write("Dec is %d, Float is %f", valueSysVar, valueSysVar);
Oder?

von canuser (Gast)


Lesenswert?

Ja stimmt. deine Syntax ist richtig. Ich kriege jetzt als Ergebnis. Dec 
is 0, Float is 0.0000. Ich erwarte aber immer noch eine 300 als output. 
Mein Problem hat es nicht gelöst.

von Tom (Gast)


Lesenswert?

M.E. muss die Zuweisung in einem CAPL-Skript erfolgen, das zyklisch (in 
einem Knoten) aufgerufen wird - oder wie machst Du das?

Beitrag #6599999 wurde von einem Moderator gelöscht.
von canuser (Gast)


Lesenswert?

Tom schrieb:
> M.E. muss die Zuweisung in einem CAPL-Skript erfolgen, das
> zyklisch (in
> einem Knoten) aufgerufen wird - oder wie machst Du das?

Ich habe ein Teil eines Testcases hier reinkopiert. Das setzen der 
sysvar erfolgt am Anfang in der MainTest. Die Abfrage der sysvar erfolgt 
später in einem Testcase. Was meinst du mit zyklisch aufgerufen? So wie 
ich das sehe ist mein Testcase aber nicht zyklisch.

von canuser (Gast)


Lesenswert?

Kappo schrieb im Beitrag #6599999:
> canuser schrieb:
>> Ergebnis ist 0 Ich erwarte hier aber 300.
>> Könnt ihr mir hier ein paar Tipps geben? Ich habe es auch schon vesucht
>> mit den Vector Funktionen auszulesen, aber mit wenig Erfolg.
>
> Welche Hardware verwendest Du bzw. worauf läuft der Code?

Es ist eine Vectorsimulation in CANoe. Ich verwende zur Zeit noch keine 
Hardware. Diese kommt in 2 Wochen an. Es wird im Code eine 
Ethernetschnittstelle simuliert zwischen Auto und Ladesäule.

von Tom (Gast)


Lesenswert?

So wie ich das jetzt verstanden habe, setzt Du in der GUI eine Variable 
und lässt diese mit der Zuweisung valueSysVar = @xxx::yyyyy; auf die 
Systemvariable kopieren. Diese Anweisung darf/muss natürlich erst nach 
der Veränderung in der GUI erfolgen.
Ich kenne das nur von der Maatlabsimulation in Canoe. Dort schreibt das 
Modell in die Systemvariable. Damit ich den aktuellen Wert auf dem CAN 
ausgeben kann, muss ich im Knoten über ein CAPL-Skript das Kopieren der 
Werte zyklisch erledigen. Genau so muss m.E. hier der GUI-WErt zyklisch 
abgefragt werden, ob er sich geändert hat.

von rcc (Gast)


Lesenswert?

valueSysVar ist keine Systemvariable.

Etwas Beispielcode wäre hilfreich. Aber wenn 0 rauskommt geht oft eine 
Initialisierung schief und und die SysVar hat weiter den Wert mit dem 
sie im SysVar Dialog angelegt wurde.

von Achim M. (minifloat)


Lesenswert?

canuser schrieb:
> double valueSysVar;

Die Systemvariable muss als solche erst angelegt werden. Das geht im 
Netzwerk-Config-Fenster im Baum irgendwo oder auch über das tolle 
Ribbon-Menü.

Im CAPL-Code dann immer @valueSysVar, das ist mit Environment-Variablen 
auch so.

mfg mf

PS das hier wundert mich:
canuser schrieb:
> es hat auch geklappt, da die GUI darauf reagiert hat.
Die GUI kennt die Variablen innerhalb des CAPL nämlich gar nicht. 
Doppelt angelegt??

: Bearbeitet durch User
von canuser (Gast)


Lesenswert?

testcase Testcase_1()
{
    nicht wichtig
}

testcase Testcase_2()
{
   nicht wichtig
}

testcase LadevorgangBeendet()
{
    double valueSysVar;

    valueSysVar = @xxx::yyyy;
    write("Dec is %d, Float is %f", valueSysVar, valueSysVar);

}



changePowerofEVSE(int volt, int amp)
{
    @sysvar::xxx::yyyy= volt;
    @sysvar::xxx::zzzz= amp;
}


void MainTest()
{
    write("Start main");
    start_Ladevorgang();
    changePowerofEVSE(300,20);
    Testcase_1();
    Testcase_2();
    LadevorgangBeendet();
}


Ich habe den Code etwas vereinfacht. Aber sollte dann etwas mehr 
Einblick haben was ich gemacht habe.

von canuser (Gast)


Lesenswert?

Die Funktion startLadevorgang könnt ihr ignorieren. Die ist bei mir drin 
da habe ich nur einige sysvars gesetzt

von canuser (Gast)


Lesenswert?

Achim M. schrieb:
> auch so.

Achim M. schrieb:
> Die Systemvariable muss als solche erst angelegt werden. Das geht im
> Netzwerk-Config-Fenster im Baum irgendwo oder auch über das tolle
> Ribbon-Menü.
>
> Im CAPL-Code dann immer @valueSysVar, das ist mit Environment-Variablen
> auch so.
>
> mfg mf

Vector hat die sysvar angelegt. Ich habe da nichts gemacht

von canuser (Gast)


Lesenswert?

rcc schrieb:
> valueSysVar ist keine Systemvariable.
>
> Etwas Beispielcode wäre hilfreich. Aber wenn 0 rauskommt geht oft eine
> Initialisierung schief und und die SysVar hat weiter den Wert mit dem
> sie im SysVar Dialog angelegt wurde.

Das Problem. Es scheint so als ob ich überhaupt keine Systemvariablen 
richtig auslesen kann. Bei den anderen kann ich aber nicht 100% sagen, 
ob diese auch gesetzt wurden vom System, da es nicht alles von mir 
entwickelt wurde.

von Chris R. (rcc)


Lesenswert?

Ah Canoe TestfeatureSet, sag das doch gleich :D

Die MainTest ist nur dazu da die Testcases aufzurufen und hat ein paar 
Limitations, siehe Doku zur jeweils verwendeten Canoe Version.
Also alles erstmal in Testcases verpacken und die aus der MainTest 
aufrufen.

von canuser (Gast)


Lesenswert?

Danke für die Hilfe an alle,
ich kann jetzt mit testWaitForSignalMatch die Signale vergleichen.
Ins write window kann ich immer noch nichts reinschreiben, aber die 
Funktion ist genug für mich, damit ich weiter komme.

von Achim M. (minifloat)


Lesenswert?

canuser schrieb:
> Vector hat die sysvar angelegt. Ich habe da nichts gemacht

^^ das glaube ich dir nicht:

canuser schrieb:
> testcase LadevorgangBeendet()
> {
> double valueSysVar;

Aber wenn es nun geht isses wohl okay so...
mfg mf

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.