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
Zusi-Eingaben per Software
-
- Beiträge: 176
- Registriert: 02.06.2011 23:34:21
- Aktuelle Projekte: Fahrpultbau BR 425/426
- Kontaktdaten:
Zusi-Eingaben per Software
Zuletzt geändert von mrMax am 21.06.2014 11:51:33, insgesamt 1-mal geändert.
-
- Beiträge: 1050
- Registriert: 30.10.2009 11:40:27
- Aktuelle Projekte: Zusi boykottieren, gelegentlich mal gesperrt sein
Re: Zusi-Eingaben per Software
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.)
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.)
-
- Beiträge: 176
- Registriert: 02.06.2011 23:34:21
- Aktuelle Projekte: Fahrpultbau BR 425/426
- Kontaktdaten:
Re: Zusi-Eingaben per Software
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.
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.
-
- Beiträge: 1050
- Registriert: 30.10.2009 11:40:27
- Aktuelle Projekte: Zusi boykottieren, gelegentlich mal gesperrt sein
Re: Zusi-Eingaben per Software
Es wird im Log aber keine Exception angezeigt, nehme ich mal an?
-
- Beiträge: 176
- Registriert: 02.06.2011 23:34:21
- Aktuelle Projekte: Fahrpultbau BR 425/426
- Kontaktdaten:
Re: Zusi-Eingaben per Software
Hi,
der Tipp mit den Admin-Rechten ist die Lösung!
Programm als Admin gestartet und er zieht brav die Haltebremse an
Danke
der Tipp mit den Admin-Rechten ist die Lösung!
Programm als Admin gestartet und er zieht brav die Haltebremse an
Danke
Re: Zusi-Eingaben per Software
Die 423-Doku schreibt zur Haltebremse übrigens folgendes:
Falls Interesse besteht kann ich hier auch mal den Code posten den ich für die Haltebremse verwende.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.
Grüße,
Thomas (eh. ElektrikTrick)
Thomas (eh. ElektrikTrick)
-
- Beiträge: 176
- Registriert: 02.06.2011 23:34:21
- Aktuelle Projekte: Fahrpultbau BR 425/426
- Kontaktdaten:
Re: Zusi-Eingaben per Software
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
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.
Re: Zusi-Eingaben per Software
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
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)
Thomas (eh. ElektrikTrick)