mikrocontroller.net

Forum: PC-Programmierung VB Express 2008 Timer


Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich nutze nen Timer um periodisch Daten per RS232 anzufordern.
Ohne Timer geht es wunderbar. Mit, bleibt nach einigen Sekunden das 
Programm hängen.

So sieht der Timer aus.

    Private Sub Get_Temperatur_Tick(ByVal sender As System.Object, ByVal 
e As System.EventArgs) Handles Get_Temperatur.Tick
        If SerialPort1.IsOpen Then
            SerialPort1.Write("0x80" & vbCrLf)
        End If
    End Sub

Hat jemand nen Tip woran es liegt?

Gruß Sascha

Autor: juppi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Du forderst doch keine Daten, sondern sendest welche

Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Doch, per Event.

    '----------------------------------------------------------------------- 
-----------------------------------
    'Purpose:  Receive data
    '----------------------------------------------------------------------- 
-----------------------------------
    Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e 
As System.IO.Ports.SerialDataReceivedEventArgs) Handles 
SerialPort1.DataReceived
        txtDataRecieved.Invoke(New myDelegate(AddressOf updateTextBox), 
New Object() {})  ', New Object()
    End Sub

Gruß Sascha

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wo liest Du die empfangenen Daten aus?

P.S.: Musst Du uns Deinen Code so bruchstückhaft und erst auf Anfrage 
senden?
Ideal wäre es, wenn Du ein Projekt auf's absolute Minimun reduzierst, 
aber doch so, dass das Phämomen auftritt.

Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

sorry, wenn es zu umständlich ist. Hab noch nicht soviel mit VB Express 
gemacht. Ich vermute aber wohl ein Problem mit dem PIC Code.

Public Class frmSerialPortExample
    Dim Temperatur As String
    '----------------------------------------------------------------------------------------------------------
    'Purpose:  Allow for data recieve event to update text box on different thread
    '----------------------------------------------------------------------------------------------------------
    Public Delegate Sub myDelegate()

    '----------------------------------------------------------------------------------------------------------
    'Purpose:  Close and exit
    '----------------------------------------------------------------------------------------------------------
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Me.Close()
    End Sub

    '----------------------------------------------------------------------------------------------------------
    'Purpose:  Load Form
    '----------------------------------------------------------------------------------------------------------
    Private Sub frmSerialPortExample_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        For i As Integer = 0 To My.Computer.Ports.SerialPortNames.Count - 1
            cboCommPorts.Items.Add(My.Computer.Ports.SerialPortNames(i))
        Next
        cmdDisconnect.Enabled = False
    End Sub

    '----------------------------------------------------------------------------------------------------------
    'Purpose:  Connect to comm port
    '----------------------------------------------------------------------------------------------------------
    Private Sub cmdConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdConnect.Click
        If SerialPort1.IsOpen Then
            SerialPort1.Close()
        End If
        Try
            With SerialPort1
                .PortName = cboCommPorts.Text
                .BaudRate = 9600
                .Parity = IO.Ports.Parity.None
                .DataBits = 8
                .StopBits = IO.Ports.StopBits.One
            End With
            SerialPort1.Open()

            cmdDisconnect.Enabled = True
            cmdConnect.Enabled = False
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    '----------------------------------------------------------------------------------------------------------
    'Purpose:  Disconnect from comm port
    '----------------------------------------------------------------------------------------------------------
    Private Sub cmdDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDisconnect.Click
        Try
            SerialPort1.Close()

            cmdDisconnect.Enabled = False
            cmdConnect.Enabled = True
        Catch ex As Exception

        End Try
    End Sub

    '----------------------------------------------------------------------------------------------------------
    'Purpose:  Send message to selected comm port
    '----------------------------------------------------------------------------------------------------------
    Private Sub cmdSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSend.Click
        Try
            SerialPort1.Write(txtTextToSend.Text & vbCrLf)
            With txtDataRecieved
                .SelectionColor = Color.Black
                .AppendText(txtTextToSend.Text & vbCrLf)
                .ScrollToCaret()
            End With
            txtTextToSend.Text = String.Empty
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    '----------------------------------------------------------------------------------------------------------
    'Purpose:  Update text box with data recieved from comm port
    '----------------------------------------------------------------------------------------------------------
    Public Sub updateTextBox()
        With txtDataRecieved
            .Font = New Font("Garamond", 12.0!, FontStyle.Bold)
            .SelectionColor = Color.Red
            .AppendText(SerialPort1.ReadExisting)
            .ScrollToCaret()
        End With
    End Sub

    '----------------------------------------------------------------------------------------------------------
    'Purpose:  Receive data
    '----------------------------------------------------------------------------------------------------------
    Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        txtDataRecieved.Invoke(New myDelegate(AddressOf updateTextBox), New Object() {})  ', New Object()
    End Sub

    Private Sub Get_Temperatur_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Get_Temperatur.Tick
        If SerialPort1.IsOpen Then
            SerialPort1.Write("0x80" & vbCrLf)
        End If
    End Sub

    Private Sub txtTextToSend_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTextToSend.TextChanged

    End Sub


    Private Sub TemperaturIst_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TemperaturIst.TextChanged

    End Sub
End Class


Falls mir jemand ein Beispiel zeigen kann, wo ich anstatt Strings 
Daten-Bytes senden/empfangen kann, wäre es sehr hilfreich.

Gruß Sascha

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sascha Focus wrote:
> Hallo,
>
> sorry, wenn es zu umständlich ist. Hab noch nicht soviel mit VB Express
> gemacht. Ich vermute aber wohl ein Problem mit dem PIC Code.

Das solltes Du aber zuerst ausschliessen, bevor wir uns mit Deinem 
VB-Code auseinandersetzen.
Wie: z.B. Mit Hyperterminal oder ähnlichem Programm

> Falls mir jemand ein Beispiel zeigen kann, wo ich anstatt Strings
> Daten-Bytes senden/empfangen kann, wäre es sehr hilfreich.

Was meinst Du genau damit? Beispiel?

Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So,

hat am Pic-Source gelesen. Jetzt funktioniert es. Nutze ein PIC18F4550 
mit USB CDC. Der CDC Service Request wurde nicht oft genug aufgerufen 
(USB läuft über Interrupt.

Als Beispiele meine Ich ein Array von Bytes, das entweder gesendet oder 
empfangen wird.

Gruß Sascha

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sascha Focus wrote:
> So,
>
> hat am Pic-Source gelesen. Jetzt funktioniert es.

Toll, super!
> Als Beispiele meine Ich ein Array von Bytes, das entweder gesendet oder
> empfangen wird.

Es gibt eine Überladung von Read für den Umgang mit Byte-Arrays:
Public Function Read ( _
    buffer As Byte(), _
    offset As Integer, _
    count As Integer _
) As Integer

und von Write ebenso.
Musst halt mal in der MSDN oder Online-Hilfe lesen.

Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

habe es in der MSDN gefunden. Hättest du eventuell ein 
Anwendungsbeispiel?

Gruß Sascha

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sascha Focus wrote:
> Hi,
>
> habe es in der MSDN gefunden. Hättest du eventuell ein
> Anwendungsbeispiel?

Nein, sorry.
Aber schau mal auf http://www.gidf.de

Autor: Sascha Focus (sascha_focus) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Severino R. wrote:
> Sascha Focus wrote:
>> Hi,
>>
>> habe es in der MSDN gefunden. Hättest du eventuell ein
>> Anwendungsbeispiel?
>
> Nein, sorry.
> Aber schau mal auf http://www.gidf.de
Jo, der Tip war super. Hat mich direkt auf diesen Link geführt:
http://www.gindf.de

Gruß Sascha

Autor: Severino R. (severino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sascha Focus wrote:

> Jo, der Tip war super. Hat mich direkt auf diesen Link geführt:
> http://www.gindf.de

Wow! Was es nicht alles gibt!

Kannst natürlich auch die Forum-Suche verwenden, oder eine andere 
Suchmaschine. Oder in MSDN suchen.

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.