PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RS232 - Atmega Schnittstelle



Duesentrieb
31.03.2010, 22:49
Hallo,

ich habe eine Schnittstelle zwischen CAN Bus und PC (VB6 Programm) über eine RS232 Schnittstelle und einen Mega8 realisiert.
Nun kommt es hin und wieder vor dass sich der Empfang von Daten "aufhängt".
D.h. es kommt nichts mehr an. Senden ist dann weiter möglich.
Ich habe die Vermutung dass es an der Auswertung des empfangenen Datenstrings liegt.

Der String hat folgendes Format: 3$-0-100-1-46-5-0-200-#

Diesen werte ich wie folgt aus:




vari1ende = InStr(Me.Text1, "#")

If vari1ende > 20 Then


Me.Text2 = Left(Me.Text1, vari1ende)
Me.Protokoll1 = Chr$(13) & Chr$(10) & Time & " - " & Me.Text2 & Me.Protokoll1



vari1a = InStr(Me.Text1, "$") - 1
vari1e = InStr(vari1a, Me.Text1, "-")
vari1l = vari1e - vari1a

vari2a = InStr(vari1e, Me.Text1, "-") + 1
vari2e = InStr(vari2a, Me.Text1, "-")
vari2l = vari2e - vari2a

vari3a = InStr(vari2e, Me.Text1, "-") + 1
vari3e = InStr(vari3a, Me.Text1, "-")
vari3l = vari3e - vari3a

vari4a = InStr(vari3e, Me.Text1, "-") + 1
vari4e = InStr(vari4a, Me.Text1, "-")
vari4l = vari4e - vari4a

vari5a = InStr(vari4e, Me.Text1, "-") + 1
vari5e = InStr(vari5a, Me.Text1, "-")
vari5l = vari5e - vari5a

vari6a = InStr(vari5e, Me.Text1, "-") + 1
vari6e = InStr(vari6a, Me.Text1, "-")
vari6l = vari6e - vari6a

vari7a = InStr(vari6e, Me.Text1, "-") + 1
vari7e = InStr(vari7a, Me.Text1, "-")
vari7l = vari7e - vari7a

vari8a = InStr(vari7e, Me.Text1, "-") + 1
vari8e = InStr(vari8a, Me.Text1, "-")
vari8l = vari8e - vari8a

vari1_ = Mid(Me.Text1.Text, vari1a, vari1l)
vari2_ = Mid(Me.Text1.Text, vari2a, vari2l)
vari3_ = Mid(Me.Text1.Text, vari3a, vari3l)
vari4_ = Mid(Me.Text1.Text, vari4a, vari4l)
vari5_ = Mid(Me.Text1.Text, vari5a, vari5l)
vari6_ = Mid(Me.Text1.Text, vari6a, vari6l)
vari7_ = Mid(Me.Text1.Text, vari7a, vari7l)
vari8_ = Mid(Me.Text1.Text, vari8a, vari8l)

Habt ihr eine Idee wie ich die Auswertung anders / einfacher erstellen kann?

for_ro
31.03.2010, 23:05
Du könntest die Split() Funktion benutzen und den String an den "-" Zeichen trennen.

Dim vari(8) as string*3 '8 Strings der Länge 3

Anzahl_wörter=Split(Me_Text1,vari,"-")

Ich glaube übrigens nicht, dass BASCOM dein Me.Text1 mögen wird.
Der Compiler wird wohl eine Variable Me suchen, an deren Bit-Position Text ein Wert geschrieben werden soll.

Duesentrieb
31.03.2010, 23:12
Hi,
danke für die schnelle Hilfe. Ich mach mich gleich mal ans ausprobieren.


P.s. Der Code war übrigens aus VB6. Die Übertragung und Auswertung im Mega8 über Bascom plappt prima

repi64
31.03.2010, 23:14
Da hat for_ro mir das Meiste schon vorweg genommen.
Das mit dem "." im Variabelnamen ist mir ebenfalls aufgefallen, obwohl du nicht die ganze Deklaration mitgeschickt hast.

Duesentrieb
31.03.2010, 23:23
ich schreibe die Daten zunächst in ein Textfeld (Text1) um sie dann anschleißden auszuwerten

Hier der fehlende Teil: Me.Text1 = Me.Text1 + MSComm1.Input

repi64
31.03.2010, 23:26
Ich ging ebenfalls von Bascom aus. Bei VB6 kann ich Dir nicht helfen.

peterfido
01.04.2010, 16:37
Im Prinzip bräuchte man erst mal die Com Abfrage an sich, um Dir helfen zu können. Allerdings ist das Forum hier eher suboptimal für Deine Anfrage. Einen zuverlässigen Code habe ich im VB-Paradise Forum schonmal gepostet.