Zusi-Eingaben per Software

Da immer mehr Zusi User von einem 1:1 Führerstand mit träumen, soll es zumindest an Datenaustausch nicht hapern.
Antworten
Nachricht
Autor
mrMax
Beiträge: 176
Registriert: 02.06.2011 23:34:21
Aktuelle Projekte: Fahrpultbau BR 425/426
Kontaktdaten:

Zusi-Eingaben per Software

#1 Beitrag von mrMax »

Hallo zusammen,
ich wollte für mein Fahrpult ein kleines Programm schreiben, welches bei Geschwindigkeiten <=2 km/h und Fahrschalter in Stufe 0 automatisch die Haltebremse anlegt.

Mit der Zusi-Tastaturauslegung "Railsim" habe ich nun also die Taste "#" zum Anziehen der Zusatzbremse und "+" zum lösen, was auch auf der Tastatur funktioniert.

Also dachte ich mir, ich verwende in Java die Klasse Robot, welche Tastatureingaben simulieren kann. Das tut sie auch, zumindest drückt das Programm bei einer Geschwindigkeit <=2 andauernd die Taste "#" - in Zusi allerdings keine Reaktion auf die "Tastatureingabe".

Kann mir jemand helfen, wieso das so ist und ob es eine andere Möglichkeit gibt von einer Software aus Eingaben in Zusi zu tätigen?

Danke und Gruß,
Max
Zuletzt geändert von mrMax am 21.06.2014 11:51:33, insgesamt 1-mal geändert.

Stephan/Taschi
Beiträge: 1050
Registriert: 30.10.2009 11:40:27
Aktuelle Projekte: Zusi boykottieren, gelegentlich mal gesperrt sein

Re: Zusi-Eingaben per Software

#2 Beitrag von Stephan/Taschi »

Code herzeigen wäre recht nützlich.

Ansonsten sagt die Doku "Note that some platforms require special privileges or extensions to access low-level input control". Welches OS hast du und läuft die JRE mit Admin-Rechten? (Drum würde ich auch gern mal deinen Code sehen, wie dein Error-Handling aussieht.)

mrMax
Beiträge: 176
Registriert: 02.06.2011 23:34:21
Aktuelle Projekte: Fahrpultbau BR 425/426
Kontaktdaten:

Re: Zusi-Eingaben per Software

#3 Beitrag von mrMax »

Hi,
ist jetzt noch nichts besonderes und auch kein richtiges Error-Handling.
Allerdings funktioniert es ja softwareseitig soweit, dass eine Taste gedrückt wird. Gehe ich in irgendein Eingabefeld, sagen wir mal Word, so wird die Taste gedrückt.
Hmm... nur mit Adminrechten habe ich jetzt das JRE nicht gestartet (übrigens Win7 und aktuelles Java)... Vlt. liegts ja daran.

Sonst hier der betreffende Code:
Zur Erklärung:
fahrschalterueb ist die Variable in der die momentane Fahrstufe gespeichert ist. Da ich 25 Bremsstufen eingerichtet hab ist 25 die Fahrschalter Stufe 0.
cueb ist der momentane C-Druck.

Code: Alles auswählen

[...] aus der Klasse Fuehrerpult:
tastatur=new Robot();

[...] aus der Klasse listener:
public void processVist(float vist) { 
         /*
        Haltebremse anlegen
        */
        if(vist<=2 && vist>0 && fahrschalterueb<=25.0f)
        {
            if(cueb<2.3f)
            {
                Fuehrerpult.tastatur.keyPress(KeyEvent.VK_NUMBER_SIGN);
                 try {
                    Thread.sleep(500);
                } catch (InterruptedException ex) {
                    Logger.getLogger(listener.class.getName()).log(Level.SEVERE, null, ex);
                }
                Fuehrerpult.tastatur.keyRelease(KeyEvent.VK_NUMBER_SIGN);
            }
        }
    }
Zuletzt geändert von mrMax am 21.06.2014 12:22:49, insgesamt 1-mal geändert.

Stephan/Taschi
Beiträge: 1050
Registriert: 30.10.2009 11:40:27
Aktuelle Projekte: Zusi boykottieren, gelegentlich mal gesperrt sein

Re: Zusi-Eingaben per Software

#4 Beitrag von Stephan/Taschi »

Es wird im Log aber keine Exception angezeigt, nehme ich mal an?

mrMax
Beiträge: 176
Registriert: 02.06.2011 23:34:21
Aktuelle Projekte: Fahrpultbau BR 425/426
Kontaktdaten:

Re: Zusi-Eingaben per Software

#5 Beitrag von mrMax »

Hi,
der Tipp mit den Admin-Rechten ist die Lösung!
Programm als Admin gestartet und er zieht brav die Haltebremse an :)

Danke

Benutzeravatar
Thomas B
Beiträge: 410
Registriert: 28.03.2007 16:41:08
Wohnort: Bergisch Gladbach
Kontaktdaten:

Re: Zusi-Eingaben per Software

#6 Beitrag von Thomas B »

Die 423-Doku schreibt zur Haltebremse übrigens folgendes:
Unmittelbar vor dem Anhalten ist der Fahr-/Bremsschalter in die Nullstellung (harte Null)
zu bringen. Die Haltebremse wird bei Geschwindigkeiten < 8km/h automatisch angelegt.
Dadurch wird ein für die Fahrgäste unangenehmer Halteruck verhindert.
Falls Interesse besteht kann ich hier auch mal den Code posten den ich für die Haltebremse verwende.
Grüße,
Thomas (eh. ElektrikTrick)

mrMax
Beiträge: 176
Registriert: 02.06.2011 23:34:21
Aktuelle Projekte: Fahrpultbau BR 425/426
Kontaktdaten:

Re: Zusi-Eingaben per Software

#7 Beitrag von mrMax »

Hi,
ah Danke!
Wusste nicht, dass die schon so früh kommt. Ich dachte die käme erst bei niedrigeren Geschwindigkeiten zum Einsatz.

Edit: Kannst gerne deinen Quellcode zeigen ;)
Zuletzt geändert von mrMax am 24.06.2014 17:45:31, insgesamt 1-mal geändert.

Benutzeravatar
Thomas B
Beiträge: 410
Registriert: 28.03.2007 16:41:08
Wohnort: Bergisch Gladbach
Kontaktdaten:

Re: Zusi-Eingaben per Software

#8 Beitrag von Thomas B »

Code: Alles auswählen

Private Sub AuswertungHaltebremse()

        Dim iDiff As Single

        iDiff = iDruckSoll - iBremsdruck

        Select Case iDiff
            Case Is > -0.03 'Halten
                iHbSoll = 1
            Case Is < -0.03 'Bremsen
                iHbSoll = 3
            Case Is < 0.03  'Halten
                iHbSoll = 1
            Case Is > 0.03  'Lösen
                iHbSoll = 0
        End Select

        If iVIst < 5 Then
            iDruckSoll = 4.5
        Else
            iDruckSoll = 5
            iHbSoll = 0
        End If

        If iHbIst < iHbSoll Then
            Do While iHbIst < iHbSoll
                keybd_event(VK_ADD, 0, KEYEVENTF_KEYDOWN, 0)
                keybd_event(VK_ADD, 0, KEYEVENTF_KEYUP, 0)
                iHbIst += 1
            Loop
        ElseIf iHbIst > iHbSoll Then
            Do While iHbIst > iHbSoll
                keybd_event(VK_SUBSTRCT, 0, KEYEVENTF_KEYDOWN, 0)
                keybd_event(VK_SUBSTRCT, 0, KEYEVENTF_KEYUP, 0)
                iHbIst -= 1
            Loop
        End If

        lblHaltebremse.Text = bHaltebremse
        lblDruckIst.Text = iBremsdruck.ToString("0.00")
        lblDrucksoll.Text = iDruckSoll.ToString("0.00")
        lblBremseIst.Text = iHbSoll
        lblBremseSoll.Text = iHbIst

    End Sub
Ich hoffe du verstehst VB.NET ;)

0,03 ist die Toleranz, damit die Regelung nicht überschwingt. iHbIst und iHbSoll steuern die Bremsstellung.
Bei mir setzt die Haltebremse erst bei 5km/h ein und wird bei wiederum 5km/h gelöst. Wie das bei Original ist, konnte ich noch nicht herausfinden.
Grüße,
Thomas (eh. ElektrikTrick)

Antworten