Forum: PC-Programmierung VB Express 2008 Timer


von Sascha F. (sascha_focus) Benutzerseite


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

von juppi (Gast)


Lesenswert?

Hallo

Du forderst doch keine Daten, sondern sendest welche

von Sascha F. (sascha_focus) Benutzerseite


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

von Severino R. (severino)


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.

von Sascha F. (sascha_focus) Benutzerseite


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.

1
Public Class frmSerialPortExample
2
    Dim Temperatur As String
3
    '----------------------------------------------------------------------------------------------------------
4
    'Purpose:  Allow for data recieve event to update text box on different thread
5
    '----------------------------------------------------------------------------------------------------------
6
    Public Delegate Sub myDelegate()
7
8
    '----------------------------------------------------------------------------------------------------------
9
    'Purpose:  Close and exit
10
    '----------------------------------------------------------------------------------------------------------
11
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
12
        Me.Close()
13
    End Sub
14
15
    '----------------------------------------------------------------------------------------------------------
16
    'Purpose:  Load Form
17
    '----------------------------------------------------------------------------------------------------------
18
    Private Sub frmSerialPortExample_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
19
        For i As Integer = 0 To My.Computer.Ports.SerialPortNames.Count - 1
20
            cboCommPorts.Items.Add(My.Computer.Ports.SerialPortNames(i))
21
        Next
22
        cmdDisconnect.Enabled = False
23
    End Sub
24
25
    '----------------------------------------------------------------------------------------------------------
26
    'Purpose:  Connect to comm port
27
    '----------------------------------------------------------------------------------------------------------
28
    Private Sub cmdConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdConnect.Click
29
        If SerialPort1.IsOpen Then
30
            SerialPort1.Close()
31
        End If
32
        Try
33
            With SerialPort1
34
                .PortName = cboCommPorts.Text
35
                .BaudRate = 9600
36
                .Parity = IO.Ports.Parity.None
37
                .DataBits = 8
38
                .StopBits = IO.Ports.StopBits.One
39
            End With
40
            SerialPort1.Open()
41
42
            cmdDisconnect.Enabled = True
43
            cmdConnect.Enabled = False
44
        Catch ex As Exception
45
            MessageBox.Show(ex.Message)
46
        End Try
47
    End Sub
48
49
    '----------------------------------------------------------------------------------------------------------
50
    'Purpose:  Disconnect from comm port
51
    '----------------------------------------------------------------------------------------------------------
52
    Private Sub cmdDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDisconnect.Click
53
        Try
54
            SerialPort1.Close()
55
56
            cmdDisconnect.Enabled = False
57
            cmdConnect.Enabled = True
58
        Catch ex As Exception
59
60
        End Try
61
    End Sub
62
63
    '----------------------------------------------------------------------------------------------------------
64
    'Purpose:  Send message to selected comm port
65
    '----------------------------------------------------------------------------------------------------------
66
    Private Sub cmdSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSend.Click
67
        Try
68
            SerialPort1.Write(txtTextToSend.Text & vbCrLf)
69
            With txtDataRecieved
70
                .SelectionColor = Color.Black
71
                .AppendText(txtTextToSend.Text & vbCrLf)
72
                .ScrollToCaret()
73
            End With
74
            txtTextToSend.Text = String.Empty
75
        Catch ex As Exception
76
            MessageBox.Show(ex.Message)
77
        End Try
78
    End Sub
79
80
    '----------------------------------------------------------------------------------------------------------
81
    'Purpose:  Update text box with data recieved from comm port
82
    '----------------------------------------------------------------------------------------------------------
83
    Public Sub updateTextBox()
84
        With txtDataRecieved
85
            .Font = New Font("Garamond", 12.0!, FontStyle.Bold)
86
            .SelectionColor = Color.Red
87
            .AppendText(SerialPort1.ReadExisting)
88
            .ScrollToCaret()
89
        End With
90
    End Sub
91
92
    '----------------------------------------------------------------------------------------------------------
93
    'Purpose:  Receive data
94
    '----------------------------------------------------------------------------------------------------------
95
    Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
96
        txtDataRecieved.Invoke(New myDelegate(AddressOf updateTextBox), New Object() {})  ', New Object()
97
    End Sub
98
99
    Private Sub Get_Temperatur_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Get_Temperatur.Tick
100
        If SerialPort1.IsOpen Then
101
            SerialPort1.Write("0x80" & vbCrLf)
102
        End If
103
    End Sub
104
105
    Private Sub txtTextToSend_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtTextToSend.TextChanged
106
107
    End Sub
108
109
110
    Private Sub TemperaturIst_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TemperaturIst.TextChanged
111
112
    End Sub
113
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

von Severino R. (severino)


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?

von Sascha F. (sascha_focus) Benutzerseite


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

von Severino R. (severino)


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.

von Sascha F. (sascha_focus) Benutzerseite


Lesenswert?

Hi,

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

Gruß Sascha

von Severino R. (severino)


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

von Sascha F. (sascha_focus) Benutzerseite


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

von Severino R. (severino)


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.

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.