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
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
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.
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
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?
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
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.
Hi, habe es in der MSDN gefunden. Hättest du eventuell ein Anwendungsbeispiel? Gruß Sascha
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.