Forum: PC-Programmierung "irgendwas" mit VB


von EinSteigÄr (Gast)


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!!

von EinSteigÄr (Gast)


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.

von Richard Zink (Gast)


Lesenswert?

Du musst den empfangen String aufteilen,
schau mal bei www.activevb.de nach, da gibts mit Sicherheit Beispiele.

Gruß,
Richard Zink

von EinSteigÄr (Gast)


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

von Feadi F. (feadi)


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

von EinSteigÄr (Gast)


Lesenswert?

ok vielen Dank erstmal. Könntest du jedoch den von dir geschickten Code 
kommentieren, da ich ihn auch verstehen möchte ;-)

Vielen Dank

von EinSteigÄr (Gast)


Lesenswert?

...und was muss ich nun in die Variable S von der Funktion schreiben?

von EinSteigÄr (Gast)


Lesenswert?

...und wo kann ich das hinkopieren? form load? Button (wenn ich 
draufklicke, soll er empfangen?)

von EinSteigÄr (Gast)


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

von EinSteigÄr (Gast)


Lesenswert?

das ist zum Senden von "Hallo" von VB6 raus an Word.

von Feadi F. (feadi)


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

von EinSteigÄr (Gast)


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!

von EinSteigÄr (Gast)


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!

von Feadi F. (feadi)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.