"irgendwas" mit VB

Gast #546627
Lesenswert?

Hallo liebe Leute!

Nun wirds schwer....ich bin schon ziemlich weit mit meinem Programm für 
die Messung der Lichtschranken. Nun habe ich eine Frage zu Visual Basic.
So ist nun der Stand der Dinge. Sobald man in meinem VB-Programm auf 
"Connect" klickt und anschließend am Mikrocontroller-Board auf 
"Connect"-Taste drückt, dann sendet der Controller ein "J" an das 
VB-Programm, was bedeutet, dass das Board an den PC angeschlossen ist. 
Sobald man nun auf die Schaltfläche "Hole Daten" im VB-Programm klickt, 
soll er nun die einzelnen Daten (Registerwerte des Timers bzw. Variablen 
der Timer-Überläufe) schicken. Ich habe es nun so gemacht: Ich sende 
jetzt erstmal character (sprich Zeichen). Das könnte jetzt z.B. so 
aussehen:

                        A x B x C x D
    "A" soll in die textbox1 geschrieben werden. Sobald IMMER ein "x" 
gesendet wird, soll auf die Textbox2, Textbox3, usw. die Werte im 
VB-Programm ausgegeben werden. Nur, wie schreibe ich " sobald IRGENDWAS 
UND ein X UND IRGENDWAS kommt, springe zur nächsten Textbox"

Danke!!
Gast #546632
Lesenswert?

ach, was ich noch vergessen habe, was wahrscheinlich aber nicht allzu 
wichtig ist...Um die Daten vom Mikrocontroller-Board zu holen, muss man 
an diesem Board auf die "Send-Taste" drücken. Ich will nämlich nichts 
vom PC aus an den controller senden, das würde zu weit gehen.
Gast #546673
Lesenswert?

hm, habe zwar gesucht aber nicht wirklich was gefunden.


Aber es ist ja im prinzip kein String, den mein Mikrocontroller sendet 
eben nicht auf einmal die Daten raus, sondern "schickt, frägt ob senden 
bereit, schickt das "x", frägt ob senden bereit, schickt das 
nächste...."

danke
#546941
Lesenswert?

Du brauchst dafür eine statemachine:
http://de.wikipedia.org/wiki/Automat_%28Informatik%29
http://de.wikipedia.org/wiki/Finite_State_Machine
1
dim state as integer
2
dim buf as string
3

4
sub automat_input( s as string )
5

6
  if s = "x" then
7

8
    textbox(state).text = buf
9
    state = state + 1
10
    if state >= 4 then state = 0
11
    buf = empty
12

13
    exit sub
14
  end if
15

16
  if s = "j" then
17
    ' board verbunden!
18
    buf = empty
19
    state = 0
20
    exit sub
21
  end if
22

23
  buf = buf & s
24
end sub

Gruß, Feadi
Gast #547691
Lesenswert?

habe es jetzt erstmal mit Word versucht:


Option Explicit
Dim wdApp As Object
Dim doc As Object

Private Sub Command1_Click() 'Word starten

On Error Resume Next
Set wdApp = CreateObject("Word.Application.8") 'Word öffnen
wdApp.Visible = True                   'Word sichtbar machen?
Set doc = wdApp.Documents.Add          'Neues Word-Dokument erstellen
doc.Range.InsertAfter "Hallo" & vbCrLf '"Hallo" einfügen und Cursor an 
Anfang in neue Zeile

End Sub

Private Sub Command2_Click() 'Word beenden

doc.SaveAs "C:\test.doc"     'Speichere Datei (Var für Textbox: "Path")
wdApp.Quit                   'Word schließen

End Sub
#548089
Lesenswert?

> Könntest du jedoch den von dir geschickten Code
> kommentieren, da ich ihn auch verstehen möchte ;-)

Der Code ist schon eine recht gute Dokumentation. Ich wüsste auch nicht 
was genau ich daran noch kommentieren könnte. Und das Denken wollte ich 
Dir eigentlich nicht abnehmen ;)

Besser ist, Du würdest den Code einfach mal durch den Simulator 
schicken.

Die Funktion automat_input braucht als Parameter ('s') die Zeichen die 
der µC sendet. Eins nach dem Anderen.

Eins noch: Die Textboxen müssen alle 'textbox' heissen, und brauchen ein 
Index.

Gruß, Feadi
Gast #548673
Lesenswert?

also...verstanden hab ichs jetzt, aber ich weiß nicht mit welchem Objekt 
ich die Funktion ausführen soll. Timer? Schaltfläche? Wenn ichs jedoch 
mit einer schaltfläche ausführe, dann muss ja genau in diesem moment vom 
Controller der string gesendet werden oder? Sprich wenn ichs so 
ausführe:

                    Call Automat_input(mscomm1.input)

habe textbox1-4 mit textbox(0) bist textbox(3) benannt.

funktioniert wiegeagt nicht.

Könntest mir noch einen schritt helfen??
Danke!
Gast #548679
Lesenswert?

ich drücke wigesagt am Mikrocontroller eine Taste, und nachdem ich die 
gedrückt habe, schickt der Controller postwendend den String 
"126x47x28x277"
und den soll er dann auf die 4 Textboxen (textbox(0)-textbox(3)) 
aufteilen
danke!
#548799
Lesenswert?

1
Dim state As Integer
2
Dim buf As String
3

4
Sub automat_input(s As String)
5

6
  If Len(s) > 1 Then
7
    Dim i As Integer
8
    
9
    For i = 1 To Len(s)
10
      automat_input  Mid(s, i, 1)
11
    Next i
12
  
13
    Exit Sub
14
  End If
15

16
  If s = "x" Or s = Chr(10) Then
17

18
    Textbox(state).Text = buf
19
    state = state + 1
20
    If state >= 4 Then state = 0
21
    buf = Empty
22

23
    if s = chr(10) then state = 0
24

25
    Exit Sub
26
  End If
27

28
  If s = "j" Then
29
    ' board verbunden!
30
    buf = Empty
31
    state = 0
32
    Exit Sub
33
  End If
34

35
  buf = buf & s
36
End Sub
37

38

39
Private Sub Form_Load()
40
  MSComm1.PortOpen = True
41
  
42
End Sub
43

44
Private Sub MSComm1_OnComm()
45
  Debug.Print "MSComm1_OnComm"
46
  
47
  automat_input MSComm1.Input
48
  
49
End Sub
50

51
Private Sub Text2_KeyDown(KeyCode As Integer, Shift As Integer)
52
  If KeyCode = 13 Then
53
    automat_input Text2.Text & Chr(10)
54
    
55
    Text2.Text = Empty
56
  End If
57
End Sub

So, diesen Code habe ich gerade getestet. Die Textbox 'Text2' habe ich 
zum testen von automat_input verwendet.

Das MSComm Steuerelement ruft die MSComm1_OnComm Funktion auf, wenn 
Daten zum lesen bereit sind. Dort musst Du automat_input füttern.

Dein µC muss an den String noch ein '\n' drannhängen: "12x34x56x78\n" 
wäre dann ein gültiger String. Das '\n' Zeichen wird benötigt damit die 
automat_input Funktion weiß wo der String aufhört.

Gruß, Feadi

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren