www.mikrocontroller.net

Forum: PC-Programmierung "irgendwas" mit VB


Autor: EinSteigÄr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!!

Autor: EinSteigÄr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Richard Zink (Gast)
Datum:

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

Gruß,
Richard Zink

Autor: EinSteigÄr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Feadi F. (feadi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du brauchst dafür eine statemachine:
http://de.wikipedia.org/wiki/Automat_%28Informatik%29
http://de.wikipedia.org/wiki/Finite_State_Machine
dim state as integer
dim buf as string

sub automat_input( s as string )

  if s = "x" then

    textbox(state).text = buf
    state = state + 1
    if state >= 4 then state = 0
    buf = empty

    exit sub
  end if

  if s = "j" then
    ' board verbunden!
    buf = empty
    state = 0
    exit sub
  end if

  buf = buf & s
end sub

Gruß, Feadi

Autor: EinSteigÄr (Gast)
Datum:

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

Vielen Dank

Autor: EinSteigÄr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...und was muss ich nun in die Variable S von der Funktion schreiben?

Autor: EinSteigÄr (Gast)
Datum:

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

Autor: EinSteigÄr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: EinSteigÄr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das ist zum Senden von "Hallo" von VB6 raus an Word.

Autor: Feadi F. (feadi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: EinSteigÄr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: EinSteigÄr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Feadi F. (feadi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dim state As Integer
Dim buf As String

Sub automat_input(s As String)

  If Len(s) > 1 Then
    Dim i As Integer
    
    For i = 1 To Len(s)
      automat_input  Mid(s, i, 1)
    Next i
  
    Exit Sub
  End If

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

    Textbox(state).Text = buf
    state = state + 1
    If state >= 4 Then state = 0
    buf = Empty

    if s = chr(10) then state = 0

    Exit Sub
  End If

  If s = "j" Then
    ' board verbunden!
    buf = Empty
    state = 0
    Exit Sub
  End If

  buf = buf & s
End Sub


Private Sub Form_Load()
  MSComm1.PortOpen = True
  
End Sub

Private Sub MSComm1_OnComm()
  Debug.Print "MSComm1_OnComm"
  
  automat_input MSComm1.Input
  
End Sub

Private Sub Text2_KeyDown(KeyCode As Integer, Shift As Integer)
  If KeyCode = 13 Then
    automat_input Text2.Text & Chr(10)
    
    Text2.Text = Empty
  End If
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.