Die Lok, die einen Block belegt, über lc/velocity wegfahren

Re: Die Lok, die einen Block belegt, über lc/velocity wegfah

Postby AutomatikFan » 12.08.2017, 10:40

Ok. Das Seltsame ist nur:
ich habe auch einmal die folgende Variante probiert:

<foreach table="lclist" state="lc %oid% = Gleis1">
<trace text="Lok => SBHF: %oid%"/>
<trace text="./Programme/%oid%/%oid%_SBHF.xml"/>
<sub file="./Programme/%oid%/%oid%_SBHF.xml"/> <!-- Keine Funktion, nur Skriptaufruf -->
</foreach>

im Skript selbst dann:

<?xml version="1.0" encoding="UTF-8"?>
<xmlscript>

<trace text="JUCHU"/> <!-- Trace-Ausgabe -->

<function id="f_BR_103_SBHF">

<trace text="BR 103 SBHF"/>

<if state="lc BR_103 = SBHF_1">
<then>
....

Was mir Sorgen macht: die Trace-Ausgabe (""JUCHU"") kommt nicht. Das bedeutet doch, dass der Skript-Aufruf nichts bewirkt, oder?

Viele Grüße
Chris
AutomatikFan
 

Re: Die Lok, die einen Block belegt, über lc/velocity wegfah

Postby rjversluis » 12.08.2017, 11:01

Hi Chris,

Code: Select all
<sub file="./Programme/%oid%/%oid%_SBHF.xml"/> <!-- Keine Funktion, nur Skriptaufruf -->

das ist ein Fehler im Wiki, weil das ist nicht mehr vorgesehen.
Best Regards, Rob.
[ macOS - Linux] - [ N: CBus - CAN-GCA ] - [ 0: RocNetNode - GCA-Pi ]
rjversluis
Site Admin
 

Re: Die Lok, die einen Block belegt, über lc/velocity wegfah

Postby Schorse » 12.08.2017, 11:10

Hallo Chris,

<foreach table="lclist" state="lc %oid% = Gleis1">
Ich würde jetzt mal sagen Du vergleichst hier die Lok-ID mit "Gleis".
Also keine Übereinstimmung.
Viele Grüße Gerd
Schorse
 

Re: Die Lok, die einen Block belegt, über lc/velocity wegfah

Postby rjversluis » 12.08.2017, 11:30

Hi Gerd,

wenn Gleis1 ein Block ID ist dann kann man das so abfragen ob diese Lok in Block Gleis1 steht:
http://wiki.rocrail.net/doku.php?id=xml ... ass_format
Best Regards, Rob.
[ macOS - Linux] - [ N: CBus - CAN-GCA ] - [ 0: RocNetNode - GCA-Pi ]
rjversluis
Site Admin
 

Re: Die Lok, die einen Block belegt, über lc/velocity wegfah

Postby AutomatikFan » 12.08.2017, 13:47

Hallo Rob,
rjversluis wrote:
Code: Select all
<sub file="./Programme/%oid%/%oid%_SBHF.xml"/> <!-- Keine Funktion, nur Skriptaufruf -->

das ist ein Fehler im Wiki, weil das ist nicht mehr vorgesehen.

Das bedeutet also, dass das 'sub' Command immer nur eine echte Funktion aufrufen darf, wie der Name 'sub' schon sagt? (und kein Script allgemein?)

------------

Hallo Gerd,
Schorse wrote:
<foreach table="lclist" state="lc %oid% = Gleis1">
Ich würde jetzt mal sagen Du vergleichst hier die Lok-ID mit "Gleis".
Also keine Übereinstimmung.

Um zu prüfen, ob er in die Bedingung reingeht, und auch allgemein zum Testen, habe ich immer Trace Ausgaben drin:
<foreach table="lclist" state="lc %oid% = Gleis1">
<trace text="Lok => SBHF: %oid%"/> <!-- Trace-Ausgabe, kommt im Server-Fenster links unten -->
<trace text="./Programme/%oid%/%oid%_SBHF.xml"/> <!-- zweite Trace-Ausgabe für Testzwecke -->
<sub file="./Programme/%oid%/%oid%_SBHF.xml"/> <!-- Keine Funktion, nur Skriptaufruf -->
</foreach>

Wenn die kommen, weiss ich, er ist in den Schleifenrumpf gegangen.

Zum Testen von solchen Dingen nehme ich mir immer ein Skript, das mittels 'Aktion' auf eine Taste gelegt ist, und das als erstes den entsprechenden Codeschnipsel aufruft. Danach dann immer gleich ein <exit/>.
So kann der Rest vom Skript so bleiben, wie er ist. Und ich muss nicht immer ganze Skripte ablaufen lassen, nur um eine (neue) Zeile Code zu testen. Zum Testen reicht dann ein Druck auf den Taster. :wink:

Viele Grüße
Chris
AutomatikFan
 

Re: Die Lok, die einen Block belegt, über lc/velocity wegfah

Postby rjversluis » 12.08.2017, 14:09

Hi Chris,

Das bedeutet also, dass das 'sub' Command immer nur eine echte Funktion aufrufen darf, wie der Name 'sub' schon sagt? (und kein Script allgemein?)

Ab Morgen kannst du id="_" benutzen um ein ganzes Script aus zu führen, allerdings die enthaltene Funktionen werden klar übersprungen.
Best Regards, Rob.
[ macOS - Linux] - [ N: CBus - CAN-GCA ] - [ 0: RocNetNode - GCA-Pi ]
rjversluis
Site Admin
 

Re: Die Lok, die einen Block belegt, über lc/velocity wegfah

Postby Schorse » 12.08.2017, 14:15

Hi Chris,

ja,meine Antwort war so nicht richtig. Meine Lok ist "invalid". Mit einer anderen Lok erhalte ich auch die Trace-Ausgabe.
Das bedeutet also, dass das 'sub' Command immer nur eine echte Funktion aufrufen darf, wie der Name 'sub' schon sagt?

In welcher Programmiersprache ist das so? M.W. steht "sub" für "Sub Program File".
Nachtrag: In trace ist der Status der Lok "false".
Last edited by Schorse on 12.08.2017, 14:23, edited 1 time in total.
Viele Grüße Gerd
Schorse
 

Re: Die Lok, die einen Block belegt, über lc/velocity wegfah

Postby AutomatikFan » 12.08.2017, 14:17

@Rob
Super. Vielen Dank nochmal. :)
Last edited by AutomatikFan on 12.08.2017, 14:18, edited 1 time in total.
AutomatikFan
 

Re: Die Lok, die einen Block belegt, über lc/velocity wegfah

Postby AutomatikFan » 12.08.2017, 14:18

@Gerd: Ich kenne 'sub' für 'subroutine'.
AutomatikFan
 

Re: Die Lok, die einen Block belegt, über lc/velocity wegfah

Postby Schorse » 12.08.2017, 14:33

Hi Chris,

@Gerd: Ich kenne 'sub' für 'subroutine'.
Darum fragte ich ja nach der Programmiersprache: Es soll Sprachen geben in denen "sub" auch für "function"steht.
Viele Grüße Gerd
Schorse
 

Re: Die Lok, die einen Block belegt, über lc/velocity wegfah

Postby AutomatikFan » 12.08.2017, 20:26

Hallo Gerd,

VB.NET und Basic verwenden z.B. das Schlüsselwort 'Sub' im Sinne von Funktion... aber ich kenne "Subroutine" auch ganz allgemein im Sinne von "Funktion", "Prozedur" (vgl. auch "prozedurale Programmierung").

Schönen Gruß
Chris
AutomatikFan
 

Re: Die Lok, die einen Block belegt, über lc/velocity wegfah

Postby RainerK » 13.08.2017, 01:08

Hallo Chris,
AutomatikFan wrote:...VB.NET und Basic verwenden z.B. das Schlüsselwort 'Sub' im Sinne von Funktion...

so ist das etwas ungenau, denn alle Basic-Dialekte unterscheiden zwischen "sub" und "function".
sub ist eine Subroutine, ohne Rückgabewert.
function ist zwar auch eine Subroutine, aber mit Rückgabewert.
Best Regards, es grüßt RainerK

DCC++ with Arduino Uno / Motor shield and LocoNet GCA85, 50, 93 and 136. Special interests: DIY electronic assemblies. http://www.rainermoba.blogspot.com
RainerK
 


Re: Die Lok, die einen Block belegt, über lc/velocity wegfah

Postby AutomatikFan » 13.08.2017, 09:18

Soo, das neueste nightly build ausprobiert, und: alles klappt jetzt! Vielen Dank, Rob! :goodjob: :rr_for_ever:

also sowohl die Variante mit Extraktion der %oid% in den Aufrufpfad von Skriptfunktionen

Code: Select all
<foreach table="lclist" state="lc %oid% = Gleis2|lc %oid% = Gleis1" alltrue="false">
   <sub file="./Programme/%oid%/%oid%_SBHF.xml" id="f_%oid%_SBHF"/>  <!-- funktioniert jetzt -->
</foreach>

als auch der "Spezial-Aufruf", wenn man einfach nur ein bestimmtes Skript als ganzes aufrufen will:

Code: Select all
<foreach table="lclist" state="lc %oid% = Gleis2|lc %oid% = Gleis1" alltrue="false">
   <sub file="./Programme/%oid%/%oid%_SBHF.xml" id="_"/>  <!-- funktioniert -->
</foreach>

Supi ;-)

Schönen Gruß
Chris
AutomatikFan
 

Previous

Return to XMLScripting (DE)