Vba + Bascom

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Softwaretoaster.

    Vba + Bascom

    Moin moin!

    Ich schreiben gerade einem program für die temperaturkontrolle, und steuerung von lüfter und heizer mit einem µC und habe rieeesen probleme mit der Kommunikation zwischen µC un VBA!

    Durch den getportnames() befehl kriege ich die Ports, und er verbindet sich nur wenn 1 port ausgewählt wurde und schickt einen befehlt für die identifikation an dem mikrocontroller, der das richtige Antwort schicken muss sonst schiesst er den port wieder und gibt einen msgbox "falsche port" an dem user.
    Das program mit BASCOM ist sehr simpel und sieht so aus:

    VB.NET-Quellcode

    1. If Usr.rxc = 1 Then 'Wenn Byte empfangen...
    2. Befehl = Udr 'Byte aus UART auslesen
    3. Select Case Befehl
    4. Case "1" 'Anwort für die Verbindungserstellung
    5. Print "20"
    6. Case "2" 'Temperatur Abfrage
    7. Volt = Getadc(2)
    8. Temperatur_ganzzahl = Volt * 5
    9. Temperatur_kommazahl = Temperatur_ganzzahl Mod 10
    10. Temperatur_ganzzahl = Temperatur_ganzzahl / 10
    11. Waitms 50
    12. Print Temperatur_ganzzahl ; "." ; Temperatur_kommazahl


    [line] [/line]

    Das program kriegt schon temperatur und speichert das in einem Access datei. Jezt wollte ich eine Identifikationsvorgang für den µC hinzufügen was nicht erlauben würde dass der computer sich mit dem falschen COMPort verbindet. Mein Program in VBA sieht so aus:

    [line] [/line]

    VB.NET-Quellcode

    1. 'Button: "Hardwareverbindung"
    2. Private Sub Verbindung_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Verbindung.Click
    3. 'Verbindungsaufbau zwischen VB und MC wird gestartet
    4. If Port.Text = "" Then
    5. Port.BackColor = Color.Red
    6. MsgBox("Keine Verbindung zwischen PC und Mikrocontroller! Bitte COM Port auswählen.")
    7. Else
    8. SerialPort1.PortName = Port.Text 'Ausgewählter Wert im ComboBox "port"
    9. SerialPort1.Open() 'COM Port wird geöffnet
    10. Port.BackColor = Color.White
    11. Timer2.Enabled = True
    12. End If
    13. If SerialPort1.IsOpen Then
    14. Port.BackColor = Color.White
    15. SerialPort1.Write(1)
    16. Antwort = SerialPort1.ReadExisting()
    17. If Antwort = "20" Then '...if antwort vom mc=20, richtiger com port ist ausgewählt"
    18. Timer2.Enabled = True 'Timer für die Temperaturabfrage wir gestartet
    19. Verbindung.Enabled = False 'dann button "verbindung" nicht verfügbar...
    20. Else
    21. SerialPort1.Close() '...sonst wird der com port geschlossen
    22. MsgBox("Bitte richtige COM Port auswählen")
    23. End If
    24. End If
    25. End Sub


    [line] [/line]

    Irgendwie kriegt er das nicht hin, sich mit dem µC zu verbinden. Hab schon versucht in dem BASCOM Programm die "20" als Ingteger, String, Char zu deklarieren aber VBA erkennt keine von denen!


    Ich merke dass er erst den antwort kriegt wenn der Timer für die temperaturabfrage gestartet wurde! Hat jemand ein tipp für mich???=)

    Danke im vorraus!
    Du hast den SerialPort auch vernünftig eingerichtet? Sprich Baudrate, Start- Stopbits und Parity? Muss natürlich korrekt gesetzt werden, genau so wie im Controller auch.
    Bascom zeigt dir auch eine Fehlerrate für die Baudrate an die du verwenden willst. Diese Fehlerrate sollte nicht über 1% liegen, sonst können da schnell mal Bits verschwinden.

    Haste Timeouts gesetzt? 500ms sollten eigentlich in jedem Fall reichen (bei Baudraten >=9600 zumindest). Welche Baudrate verwendest du überhaupt? Stell die mal runter auf 9600. Bei schlechtem Platinenlayout und alten Bauteilen kann es da unter Umständen auch mal Probleme geben. Der MAX232 ist da auch nicht so der schnellste (laut Datenblatt max 120.000 Baud)

    Softwaretoaster schrieb:

    Du hast den SerialPort auch vernünftig eingerichtet? Sprich Baudrate, Start- Stopbits und Parity? Muss natürlich korrekt gesetzt werden, genau so wie im Controller auch.
    Bascom zeigt dir auch eine Fehlerrate für die Baudrate an die du verwenden willst. Diese Fehlerrate sollte nicht über 1% liegen, sonst können da schnell mal Bits verschwinden.

    Haste Timeouts gesetzt? 500ms sollten eigentlich in jedem Fall reichen (bei Baudraten >=9600 zumindest). Welche Baudrate verwendest du überhaupt? Stell die mal runter auf 9600. Bei schlechtem Platinenlayout und alten Bauteilen kann es da unter Umständen auch mal Probleme geben. Der MAX232 ist da auch nicht so der schnellste (laut Datenblatt max 120.000 Baud)


    Mein baudrate ist schon auf 1200 tuntergesetzt und sowas zu vermeiden...
    Gibt es eigentlich eine möglichkeit sich zu verbinden nur wenn das gerät eine spazifische name hat?


    [/vb]


    SerialPort1.Parity = IO.Ports.Parity.None
    Serialport1.StopBits = IO.Ports.StopBits.One
    Serialport1.DataBits = 8
    Serialport1.BaudRate = 1200
    Serialport1.ReadTimeout = 1000
    Ports = IO.Ports.SerialPort.GetPortNames()

    For i = 0 To UBound(Ports)
    Port.Items.Add(Ports(i))
    Next[vb]