Gleisfreimeldung

Antworten
Nachricht
Autor
Oli
Beiträge: 14
Registriert: Fr 3. Aug 2012, 18:34:37

Gleisfreimeldung

#1 Beitrag von Oli »

Hallo...

Ich dachte mir, nachdem ich mich schon die letzten zwei Wochen intensiv mit dem Programm beschäftigt habe, wie baue ich eine funktionierende Gleisfreimeldeanlage in des SuH ein. Nach etwas Grübelei und einlesen in die Skripte habe ich mir folgendes ausgedacht:

</script>
</scriptcontainer>
</relaisgruppe>
<relaisgruppe vname="gleisfreimeldung" titel="Gleisfreimeldegruppe">
<parameter name="id_schnittstelle_stelltisch" typ="schnittstellenid" />
<parameter name="gleisid" titel="Gleis" typ="schnittstelle" filterallgemein="gleis" filterspeziell=""/>
<scriptcontainer>
<schnittstelle titel="Stelltisch" name="tischfeld" id="*id_schnittstelle_stelltisch" erreichbarstelltisch="1">
<sendet signal="gleis_frei" desc="1, wenn das Gleis frei ist, sonst 0" />
<sendet signal="gleis_besetzt" desc="1, wenn das Gleis besetzt ist, sonst 0" />
</schnittstelle>
<schnittstelle titel="Ringleitung" name="ringleitung" ziel="0:-1"/>
<schnittstelle name="aussenanlage" ziel="*aussenanlage" />
<script>
<![CDATA[
var gleis_frei=0
var gleis_besetzt=0

function signalEvent(signal,wert)
{
print(signal)
if (signal=="aussenanlage:frei")
{
gleis_frei=1;
gleis_besetzt=0;
}
if (signal!="aussenanlage:frei")
{
gleis_frei=0;
gleis_besetzt=1;
}
if ((gleis_frei=1)&&(gleis_besetzt=0))
{
tischfeld.setWert("gleis_frei",1);
tischfeld.setWert("gleis_besetzt",0);
}
if ((gleis_frei=0)&&(gleis_besetzt=1))
{
tischfeld.setWert("gleis_frei",0);
tischfeld.setWert("gleis_besetzt",1);
}
}
]]>

dazu habe ich im Hebelwerksaufbau zwei Melder eingebaut. Einen in weiß und einen in rot. Im Grundzustand soll der weiße leuchten und das frei sein des Gleises anzeigen, aber das tut er nicht, er bleibt dunkel. Wo ist mein Fehler? *überleg*

Vielleicht hat ja einer eine Idee...

Bis dahin grübel ich mal weiter ;)

Viele Grüße,

Oli

BorisM
Administrator
Beiträge: 116
Registriert: Do 12. Jan 2012, 20:53:29

Re: Gleisfreimeldung

#2 Beitrag von BorisM »

Hallo,

zwei grundlegende Fehler sehe ich jetzt auf Anhieb:
1) if (signal!="aussenanlage:frei")
Das funktioniert so nicht. Korrekt wäre
if ((signal=="aussenanlage:frei")&&(wert==0))

2) if ((gleis_frei=0)&&(gleis_besetzt=1))
Vergleiche sind in ECMA-Skript per doppeltem Gleichheitszeichen. Korrekt wäre folgendes:
if ((gleis_frei==0)&&(gleis_besetzt==1))

Gruß
Boris

Oli
Beiträge: 14
Registriert: Fr 3. Aug 2012, 18:34:37

Re: Gleisfreimeldung

#3 Beitrag von Oli »

Auch hier noch mal zurück von den Holländern... :-)

Danke für die Tipps... Das scheinen echt Anfängerfehler von mir gewesen zu sein... ;-)

Ich habe mal die "beanstandeten" Stellen nachgebessert, aber noch "lebt" die Gfm nicht... Scheint doch nicht so leicht zu sein sowas zu basteln, wie ich dachte, aber irgendwie wird das schon laufen... :-P

Ich habe das Gefühl, die Meldung wird nicht korrekt an die betroffenen Meldelampen übertragen... *überleg*

Viele Grüße,

Oli

BorisM
Administrator
Beiträge: 116
Registriert: Do 12. Jan 2012, 20:53:29

Re: Gleisfreimeldung

#4 Beitrag von BorisM »

Zeig doch nochmal den kompletten Code.

Oli
Beiträge: 14
Registriert: Fr 3. Aug 2012, 18:34:37

Re: Gleisfreimeldung

#5 Beitrag von Oli »

Ich kopiere den morgen mal raus und stelle ihn hier zur Diskussion... :-)

Oli
Beiträge: 14
Registriert: Fr 3. Aug 2012, 18:34:37

Re: Gleisfreimeldung

#6 Beitrag von Oli »

</script>
</scriptcontainer>
</relaisgruppe>
<relaisgruppe vname="gleisfreimeldung" titel="Gleisfreimeldegruppe">
<parameter name="id_schnittstelle_stelltisch" typ="schnittstellenid" />
<parameter name="gleisid" titel="Gleis" typ="schnittstelle" filterallgemein="gleis" filterspeziell=""/>
<scriptcontainer>
<schnittstelle titel="Stelltisch" name="tischfeld" id="*id_schnittstelle_stelltisch" erreichbarstelltisch="1">
<sendet signal="gleis_frei" desc="1, wenn das Gleis frei ist, sonst 0" />
<sendet signal="gleis_besetzt" desc="1, wenn das Gleis besetzt ist, sonst 0" />
</schnittstelle>
<schnittstelle titel="Ringleitung" name="ringleitung" ziel="0:-1"/>
<schnittstelle name="aussenanlage" ziel="*aussenanlage" />
<script>
<![CDATA[
var gleis_frei=0
var gleis_besetzt=0

function signalEvent(signal,wert)
{
print(signal)
if ((signal=="aussenanlage:frei")&&(wert=1))
{
gleis_frei==1;
gleis_besetzt==0;
else
gleis_frei==0;
gleis_besetzt==1;
}
if ((gleis_frei==1)&&(gleis_besetzt==0))
{
tischfeld.setWert("gleis_frei",1);
tischfeld.setWert("gleis_besetzt",0);
else
tischfeld.setWert("gleis_frei",0);
tischfeld.setWert("gleis_besetzt",1);
}
}
]]>

Ich habe das jetzt noch nicht testen können...

BorisM
Administrator
Beiträge: 116
Registriert: Do 12. Jan 2012, 20:53:29

Re: Gleisfreimeldung

#7 Beitrag von BorisM »

Das kann aus gleich mehreren Gründen nicht gehen. Zum einen schreibst Du etwas chaotisch mal = und mal ==

= ist eine Zuweisung, == ist ein Vergleich.

Zum anderen fehlen bei Deinem if - else ein paar Klammern.

Oli
Beiträge: 14
Registriert: Fr 3. Aug 2012, 18:34:37

Re: Gleisfreimeldung

#8 Beitrag von Oli »

ich glaube ich muß blind gewesen sein bei dem Murks den ich da zusammengeschrieben hae... *lach* Sorry...

Neuer Versuch:

</script>
</scriptcontainer>
</relaisgruppe>
<relaisgruppe vname="gleisfreimeldung" titel="Gleisfreimeldegruppe">
<parameter name="id_schnittstelle_stelltisch" typ="schnittstellenid" />
<parameter name="gleisid" titel="Gleis" typ="schnittstelle" filterallgemein="gleis" filterspeziell=""/>
<scriptcontainer>
<schnittstelle titel="Stelltisch" name="tischfeld" id="*id_schnittstelle_stelltisch" erreichbarstelltisch="1">
<sendet signal="gleis_frei" desc="1, wenn das Gleis frei ist, sonst 0" />
<sendet signal="gleis_besetzt" desc="1, wenn das Gleis besetzt ist, sonst 0" />
</schnittstelle>
<schnittstelle titel="Ringleitung" name="ringleitung" ziel="0:-1"/>
<schnittstelle name="aussenanlage" ziel="*aussenanlage" />
<script>
<![CDATA[
var gleis_frei=0
var gleis_besetzt=0

function signalEvent(signal,wert)
{
print(signal)
if ((signal=="aussenanlage:frei")&&(wert=1))
{
gleis_frei=1;
gleis_besetzt=0;
}
else
{
gleis_frei=0;
gleis_besetzt=1;
}
if ((gleis_frei==1)&&(gleis_besetzt==0))
{
tischfeld.setWert("gleis_frei",1);
tischfeld.setWert("gleis_besetzt",0);
}
else
{
tischfeld.setWert("gleis_frei",0);
tischfeld.setWert("gleis_besetzt",1);
}
}
]]>

Ich frage mich ob das, mal von der richtigen Syntax abgesehen, schonmal der richtige Weg ist. Besonders der Bereich mit den Parametern und Schnittstellen...

BorisM
Administrator
Beiträge: 116
Registriert: Do 12. Jan 2012, 20:53:29

Re: Gleisfreimeldung

#9 Beitrag von BorisM »

Ja, der Ansatz ist schon richtig, das sollte passen, allerdings würde ich hier nur eine Variable nehmen und nicht gleich zwei - das ist momentan etwas doppelt alles :-)

Die Schnittstelle zur Aussenanlage passt nicht - hier nutzt Du einen Parameter, der oben nicht definiert ist. Du solltest also den zweiten Parameter nochmal überarbeiten. Außerdem sollten die Parameter Titel und Beschreibung erhalten.

Die Schnittstelle zur Ringleitung ist wahrscheinlich nicht nötig.

Für die Zukunft sollte die Gleisfreimeldegruppe ertüchtigt werden für die Nutzung im Verschlussregister.

Antworten