(Erledigt) Lok erkennen

(Erledigt) Lok erkennen

Postby JenneMann » 17.04.2017, 20:27

Hallo zusammen,

Ich habe vor, an meine Abstellanlagen meine Loks automatisch abrüsten zu lassen. Nun hat mir "signalmast88" hier sehr geholfen. Aber nun stecke ich fest.

Es geht um folgende Abfrage:

<xmlscript>
<!-- Lok im Ziel-Block suchen -->
<trace text="Abwarten der Ankunftszeit..."/>
<sleep time="7500"/>
<trace text="Ok! Lok @selectedLoco im Zielblock erkannt."/>
<vr id="selectedLoco" text="nil"/>
<foreach table="lclist">
<vr id="Ziel-Block" text="820."/>
<if state="lc %oid% = @Ziel-Block">
<then>
<vr id="selectedLoco" text="%oid%"/>
<break/>
</then>
</if>
</foreach>

<query vr="LokFx" table="colist" id="coLokFx" get="state"/>
<switch var="@selectedLoco">
<case val="nil">
<!-- keine Lok im Ziel-Block gefunden -->
<trace text="Keine Lok im Ziel-Block @Ziel-Block gefunden!"/>
</case>

<!-- ============================================ -->
<!-- BEGINN : Lokliste -->
<!-- ============================================ -->

<case val="211_044">
<sub file="lokeigenschaften/Fx_211_044_off.xml"/>
<trace text="Lok %oid% erfolgreich abgestellt!"/>
</case>

<case val="232_440">
<sub file="lokeigenschaften/Fx_232_440_off.xml"/>
<trace text="Lok %oid% im Ziel-Block gefunden!"/>

<!-- ============================================ -->
<!-- ENDE : Lokliste -->
<!-- ============================================ -->

</case>

</switch>
</xmlscript>


So wie es hier nun zu sehen ist, klappt es einwandfrei.

Nun meine Frage:
Kann man die Liste hier nicht verkürzen? Die Abfrage nach der Lok würde ich gerne per automatisieren. Also beispielweise:

<case val="%oid%">
<sub file="lokeigenschaften/Fx_%oid%_off.xml"/>
<trace text="Lok %oid% erfolgreich abgestellt!"/>
</case>


Klappt aber leider nicht. Weis jemand rat ?

Vielen Dank :)

LG Jens
Last edited by JenneMann on 21.04.2017, 10:45, edited 1 time in total.
Dozent / Trainer an der Lokführerschule , Ausbildungslokführer

H0 DC , DCC , Intellibox Basic via USB , LocoNet , Steuermodule und GBM Uhlenbrock ,
Win7 32bit
JenneMann
 

Re: Lok erkennen

Postby rjversluis » 18.04.2017, 13:10

Hi Jens,

Was fehlt ist die Auflösung vom sub file.
Damit könntest du die komplette switch/case ersetzen.
Best Regards, Rob.
:!: PS: Do not forget to attach the usual files.
:!: PS: Nicht vergessen die übliche Dateien an zu hängen.
[ macOS - Linux] - [ N: CBus - CAN-GCA ] - [ 0: RocNetNode - GCA-Pi ]
rjversluis
Site Admin
 

Re: Lok erkennen

Postby rjversluis » 18.04.2017, 13:23

Hallo Jens,

ich habe es jetzt so erweitert das man variablen verwenden kann im sub file.
Best Regards, Rob.
:!: PS: Do not forget to attach the usual files.
:!: PS: Nicht vergessen die übliche Dateien an zu hängen.
[ macOS - Linux] - [ N: CBus - CAN-GCA ] - [ 0: RocNetNode - GCA-Pi ]
rjversluis
Site Admin
 

Re: Lok erkennen

Postby JenneMann » 18.04.2017, 13:34

Hallo Rob,

Bin da noch voll ahnungslos. Weis weder was sub ist, oder sowas :roll: Deshalb steht auch soviel tracetext drin. Damit kontrolliere ich, wie weis das Script kommt und wo es bei einem Fehler abbricht.

Ich bastle mir sowas aus etlichen anderen Files zusammen und versuche es irgendwann zu verstehen. Bisher klappte das immer.
Nur leider bei der Abfrage der im Block stehenden Lok bin ich an meine Grenzen gestoßen. Deine Änderung bedeutet, das es ab dem nächsten Update klappt so wie es da steht?

Hatte auf dem Weg zur Arbeit heute morgen noch einige Beiträge im XML gelesen und wollte später %locid% testen. Wie gesagt, gehe da vollkommen blind dran.

Mit der einzelnen Auflistung der Loks klappt es ja. Dachte mir aber, dass man diese Abfrage auch automatisieren kann und fragte deshalb.

Ich denke, am 29.04 läuft es ^^
Dozent / Trainer an der Lokführerschule , Ausbildungslokführer

H0 DC , DCC , Intellibox Basic via USB , LocoNet , Steuermodule und GBM Uhlenbrock ,
Win7 32bit
JenneMann
 

Re: Lok erkennen

Postby JenneMann » 19.04.2017, 16:37

Also,

ich bin mit meiner blinden Versuchswut ein wenig weiter.

<case val="%lcid%">
<sub file="lokeigenschaften/Fx_%lcid%_on.xml"/>
<trace text="Lok %oid% im Start-Block gefunden!"/>
</case>


Ersetze ich das erste %lcid% gegen 220_072, wird die Lok tatsächlich "behandelt". Daraus schließe ich, dass das zweite lcid im
<sub file="lokeigenschaften/Fx_%lcid%_on.xml"/>
stimmt. Sonst wüsste RocRail ja nicht, welches XML er öffnen soll.

Was muss ich aber anstatt des ersten %lcid% einsetzen? Die Lok wird nicht alleine gefunden :(
Dozent / Trainer an der Lokführerschule , Ausbildungslokführer

H0 DC , DCC , Intellibox Basic via USB , LocoNet , Steuermodule und GBM Uhlenbrock ,
Win7 32bit
JenneMann
 

Re: Lok erkennen

Postby Signalmast88 » 19.04.2017, 19:04

Hallo Jens,

ändere dein Script wie folgt:

Code: Select all
   <if condition="@selectedLoco = nil">
      <then>
         <!-- keine Lok im Start-Block gefunden -->
         <trace text="Keine Lok im Start-Block @Start-Block gefunden!"/>
      </then>
      <else>
         <sub file="Fx_%oid%.xml" id=""/>
      </else>
   </if>
Last edited by Signalmast88 on 19.04.2017, 19:12, edited 1 time in total.
Liebe Grüße, Robert.

Spur H0, Rocrail, BiDiB-Wizard, GBMboost, GBM16T, LightControl, NeoControl, OneControl, OneOC
Signalmast88
 

Re: Lok erkennen

Postby JenneMann » 19.04.2017, 19:07

Robert,
Du bist der Beste.

Ich werde Dich für den 29.04 krank schreiben damit Du nach Speyer kommen kannst ;)
Dozent / Trainer an der Lokführerschule , Ausbildungslokführer

H0 DC , DCC , Intellibox Basic via USB , LocoNet , Steuermodule und GBM Uhlenbrock ,
Win7 32bit
JenneMann
 


Return to XMLScripting (DE)