Hallo,
ich versuche gerade ein Programm in C# zur Steuerung meiner Modellbahnanlage zu schreiben.
Ich kann auch schon alles steuern.
Bekomme aber die Events, z. Bsp. die Rückmeldung der S88 oder beim Stellen der Weichen mit der IB, nicht mit dem Befehl XEvent (C8h) zurück.
Die Antwort der IB ist immer 2 Byts mit dem Wert 0. Was mache ich falsch? Muss ich da noch irgendetwas an der IB einstellen?
Das Demoprogramm in QBasic von Uhlenbrock liefert alle Ereignisse (Events) die ich brauche, dennoch werde ich aus dem Programm nicht schlau.
Ich hoffe mir kann jemand helfen.
Vielen Dank im Voraus.
Intellibox probleme mit XEvent
- Bernie-Bärchen
- Forumane
- Beiträge: 472
- Registriert: Sonntag 3. August 2008, 00:15
Re: Intellibox probleme mit XEvent
Das hier ist mein Codeschnipsel, allerdings in VB6. Vielleicht kannst Du ja was damit anfangen.
Private Sub S88_Timer_Timer()
Static a, B, c, D, E, F As String
Static I, H As Integer
a = ""
B = ""
c = ""
D = ""
E = ""
F = ""
'alle Zeichen des InputBuffers liefern
Modem2.InputLen = 0
'InputBuffer lesen und damit LÖSCHEN
' --- (damit er 'sauber' ist)
a = Modem2.Input
D = Modem2.Input
'evtuellen Schrott in A und D löschen
a = ""
D = ""
'--- 1. S88 ----
Modem2.Output = Chr(193)
'warten, bis 2 Bytes empfangen wurden
Do While Len(a) < 2
a = a & Modem2.Input
DoEvents
Loop
'--- 2. S88 ----
Modem2.Output = Chr(194)
'warten, bis 2 Bytes empfangen wurden
Do While Len(D) < 2
D = D & Modem2.Input
DoEvents
Loop
' --- empfangene Daten auswerten
' --- 1. S88 ---
' --- bitweise in String eintragen
B = Asc(Left(a, 1)) ' --- Bytes einzeln lesen
For I = 7 To 0 Step -1 ' --- vom höchsten Bit an...
c = c & Sgn(Val(B) And 2 ^ I)
Next
B = Asc(Right(a, 1)) ' --- Bytes einzeln lesen
For I = 7 To 0 Step -1 ' --- vom höchsten Bit an...
c = c & Sgn(Val(B) And 2 ^ I)
Next
' --- empfangene Daten auswerten
' --- 2. S88 ---
' --- bitweise in String eintragen
E = Asc(Left(D, 1)) ' --- Bytes einzeln lesen
For H = 7 To 0 Step -1 ' --- vom höchsten Bit an...
F = F & Sgn(Val(E) And 2 ^ H)
Next
E = Asc(Right(D, 1)) ' --- Bytes einzeln lesen
For H = 7 To 0 Step -1 ' --- vom höchsten Bit an...
F = F & Sgn(Val(E) And 2 ^ H)
Next
byte1 = Asc(Left(a, 1))
byte2 = Asc(Right(a, 1))
byte3 = Asc(Left(D, 1))
byte4 = Asc(Right(D, 1))
S88 byte1, byte2, byte3, byte4
' --- Anzeige der empfangenen Daten ---
StatusBar1.Panels(6).Text = "[" & byte1 & " / " & byte2 & "]"
StatusBar1.Panels(7).Text = "[" & byte3 & " / " & byte4 & "]"
lblRmM(0).Caption = Left(c, 4) & " " & Mid(c, 5, 4) & " " & Mid(c, 9, 4) & " " & Right(c, 4)
lblRmM(1).Caption = Left(F, 4) & " " & Mid(F, 5, 4) & " " & Mid(F, 9, 4) & " " & Right(F, 4)
End Sub
BB
Private Sub S88_Timer_Timer()
Static a, B, c, D, E, F As String
Static I, H As Integer
a = ""
B = ""
c = ""
D = ""
E = ""
F = ""
'alle Zeichen des InputBuffers liefern
Modem2.InputLen = 0
'InputBuffer lesen und damit LÖSCHEN
' --- (damit er 'sauber' ist)
a = Modem2.Input
D = Modem2.Input
'evtuellen Schrott in A und D löschen
a = ""
D = ""
'--- 1. S88 ----
Modem2.Output = Chr(193)
'warten, bis 2 Bytes empfangen wurden
Do While Len(a) < 2
a = a & Modem2.Input
DoEvents
Loop
'--- 2. S88 ----
Modem2.Output = Chr(194)
'warten, bis 2 Bytes empfangen wurden
Do While Len(D) < 2
D = D & Modem2.Input
DoEvents
Loop
' --- empfangene Daten auswerten
' --- 1. S88 ---
' --- bitweise in String eintragen
B = Asc(Left(a, 1)) ' --- Bytes einzeln lesen
For I = 7 To 0 Step -1 ' --- vom höchsten Bit an...
c = c & Sgn(Val(B) And 2 ^ I)
Next
B = Asc(Right(a, 1)) ' --- Bytes einzeln lesen
For I = 7 To 0 Step -1 ' --- vom höchsten Bit an...
c = c & Sgn(Val(B) And 2 ^ I)
Next
' --- empfangene Daten auswerten
' --- 2. S88 ---
' --- bitweise in String eintragen
E = Asc(Left(D, 1)) ' --- Bytes einzeln lesen
For H = 7 To 0 Step -1 ' --- vom höchsten Bit an...
F = F & Sgn(Val(E) And 2 ^ H)
Next
E = Asc(Right(D, 1)) ' --- Bytes einzeln lesen
For H = 7 To 0 Step -1 ' --- vom höchsten Bit an...
F = F & Sgn(Val(E) And 2 ^ H)
Next
byte1 = Asc(Left(a, 1))
byte2 = Asc(Right(a, 1))
byte3 = Asc(Left(D, 1))
byte4 = Asc(Right(D, 1))
S88 byte1, byte2, byte3, byte4
' --- Anzeige der empfangenen Daten ---
StatusBar1.Panels(6).Text = "[" & byte1 & " / " & byte2 & "]"
StatusBar1.Panels(7).Text = "[" & byte3 & " / " & byte4 & "]"
lblRmM(0).Caption = Left(c, 4) & " " & Mid(c, 5, 4) & " " & Mid(c, 9, 4) & " " & Right(c, 4)
lblRmM(1).Caption = Left(F, 4) & " " & Mid(F, 5, 4) & " " & Mid(F, 9, 4) & " " & Right(F, 4)
End Sub
BB
Re: Intellibox probleme mit XEvent
Hallo Bernie-Bärchen,
danke für die schnelle Antwort es hat mir sehr weiter geholfen
Vielen Dank
danke für die schnelle Antwort es hat mir sehr weiter geholfen
Vielen Dank