PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Simulation Buffered RS232 Input - Kommandointerpreter



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