autoguider
08.09.2007, 16:17
Hallo zusammen,
ich möchte eine Steuerung erstellen welche Kommandos über die serielle Schnittstelle empfängt und dann die entsprechenden Antworten zurück an den PC schickt.
Der Code ist erstellt und ich möchte ihn gerne testen.
Mit dem Simulator bekomme ich es nicht hin.
Die Kommandos sind immer 9 Zeichen lang und beginnen mit dem Zeichen "F". Das letzte Zeichen ist die Prüfsumme der 8 vorangehenden Zeichen.
Das Datenaufkommen ist nicht hoch. Vielleicht alle 5s ein Kommando.
Die Schnittstelle habe ich wie folgt konfiguriert.
Config Serialin = Buffered , Size = 20
Hier weitere Definitionen:
Declare Function Read_string(byval T As Byte) As String
Declare Sub Wait_for_string(byval S As String)
Dim Zeichen As String * 9
Dim Zeichen_byte(10) As Byte At Zeichen Overlay
Dim Valid As Byte
Dim Check_in As Byte
Mit der nachfolgenden Routine Wait_for_string suche ich den Buffer nach Auftreten des Zeichens "F" ab.
Sub Wait_for_string(byval S As String) As String
Ii = 1
M1:
Cc = Inkey()
If Cc <> 0 Then
If Cc <> Mid(s , Ii , 1) Then
Goto M1
Else
Incr Ii
End If
End If
Return
End Sub
Die Inkey Funktion liest aus dem Buffer und stellt den internen Head-Zeiger eine Position weiter ( Hoffentlich !?). Damit steht dann der Head Zeiger eine Speicherzelle hinter dem Buchstaben "F".
Nun kommt die nächste Routine und liest die weiteren Zeichen ein.
Function Read_string(byval T As Byte) As String
Ss = "F"
Index = 1
For Index = 1 To 8
Cc = Inkey()
Ss = Ss + Chr(cc)
Next Index
Read_string = Left(ss , T)
End Function
Wie man in der Auswerteroutine sehen kann wurden beide Routinen welche auf den Buffer zugreifen von der Hauptroutine aufgerufen.
Valid = 0
Dummybyte = Ischarwaiting()
If Dummybyte = 1 Then
Call Wait_for_string( "F") ' Suchen nach F
Zeichen = Read_string(9) ' gesamten Buffer einlesen
' Zeichenbyte ist als Overlay für den String Zeichen definiert
Check_in = 0 ' Prüfsummenbildung 8 zeichen
For I = 1 To 8
Check_in = Check_in + Zeichen_byte(i)
Next I
If Check_in = Zeichen_byte(9) Then Valid = 1
If Valid = 1 Then ' Wenn Prüfsumme stimmt dann weiter interpretieren
Numberstring = ""
Command = Zeichen_byte(2)
Select Case Command.
....
Ich kann einfach nicht mit dem Simulator testen ob das Einlesen vom Puffer funktioniert.
Ich bitte um Euren Ratschlag
beste Grüsse
Christian
ich möchte eine Steuerung erstellen welche Kommandos über die serielle Schnittstelle empfängt und dann die entsprechenden Antworten zurück an den PC schickt.
Der Code ist erstellt und ich möchte ihn gerne testen.
Mit dem Simulator bekomme ich es nicht hin.
Die Kommandos sind immer 9 Zeichen lang und beginnen mit dem Zeichen "F". Das letzte Zeichen ist die Prüfsumme der 8 vorangehenden Zeichen.
Das Datenaufkommen ist nicht hoch. Vielleicht alle 5s ein Kommando.
Die Schnittstelle habe ich wie folgt konfiguriert.
Config Serialin = Buffered , Size = 20
Hier weitere Definitionen:
Declare Function Read_string(byval T As Byte) As String
Declare Sub Wait_for_string(byval S As String)
Dim Zeichen As String * 9
Dim Zeichen_byte(10) As Byte At Zeichen Overlay
Dim Valid As Byte
Dim Check_in As Byte
Mit der nachfolgenden Routine Wait_for_string suche ich den Buffer nach Auftreten des Zeichens "F" ab.
Sub Wait_for_string(byval S As String) As String
Ii = 1
M1:
Cc = Inkey()
If Cc <> 0 Then
If Cc <> Mid(s , Ii , 1) Then
Goto M1
Else
Incr Ii
End If
End If
Return
End Sub
Die Inkey Funktion liest aus dem Buffer und stellt den internen Head-Zeiger eine Position weiter ( Hoffentlich !?). Damit steht dann der Head Zeiger eine Speicherzelle hinter dem Buchstaben "F".
Nun kommt die nächste Routine und liest die weiteren Zeichen ein.
Function Read_string(byval T As Byte) As String
Ss = "F"
Index = 1
For Index = 1 To 8
Cc = Inkey()
Ss = Ss + Chr(cc)
Next Index
Read_string = Left(ss , T)
End Function
Wie man in der Auswerteroutine sehen kann wurden beide Routinen welche auf den Buffer zugreifen von der Hauptroutine aufgerufen.
Valid = 0
Dummybyte = Ischarwaiting()
If Dummybyte = 1 Then
Call Wait_for_string( "F") ' Suchen nach F
Zeichen = Read_string(9) ' gesamten Buffer einlesen
' Zeichenbyte ist als Overlay für den String Zeichen definiert
Check_in = 0 ' Prüfsummenbildung 8 zeichen
For I = 1 To 8
Check_in = Check_in + Zeichen_byte(i)
Next I
If Check_in = Zeichen_byte(9) Then Valid = 1
If Valid = 1 Then ' Wenn Prüfsumme stimmt dann weiter interpretieren
Numberstring = ""
Command = Zeichen_byte(2)
Select Case Command.
....
Ich kann einfach nicht mit dem Simulator testen ob das Einlesen vom Puffer funktioniert.
Ich bitte um Euren Ratschlag
beste Grüsse
Christian