VB Express 2008 Timer

OP Persönliche Seite #1176433
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
OP Persönliche Seite #1176960
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
OP Persönliche Seite #1178135
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
#1178227
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?
#1178432
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren