Ik ben voor me werk een beetje aan het spelen met VB.NET 2005 (Express Editie) en probeer een programmatje de com-port uit te laten lezen.
Dit lukt allemaal vrij goed, alleen loopt er tijdens het uitlezen een telletje mee, die het aantal tabs telt die het programma doorgeeft en na een X aantal tabs een enter geeft. Dit werkt ook nog goed.
Alleen is het nu de bedoeling dat de teller weer op 0 gezet wordt, als er geen data wordt ontvangen.
Dit is mijn code.
Ik heb twee publieke variablen
Deze worden in de form_load keurig op 0 gezet.
Hierna heb ik een sub die reageert als er data ontvangen wordt.
Zoals je ziet in het begin wordt de timer geactiveerd, en wordt elke keer als er data ontvangen wordt, intTimer op 0 gezet.
Nu zou er bij elke tick het volgende moeten gebeuren.
Dus als er geen data ontvangen wordt, zou er naar mijn inziens de intTimer bij de 10 moeten komen en de variabele intCount netjes op 0 te zetten.
Als ik een breakpoint plaats, dan zie ik netjes dat de timer geactiveerd wordt, maar de tick event wordt niet bereikt, iemand enig idee?
Dit lukt allemaal vrij goed, alleen loopt er tijdens het uitlezen een telletje mee, die het aantal tabs telt die het programma doorgeeft en na een X aantal tabs een enter geeft. Dit werkt ook nog goed.
Alleen is het nu de bedoeling dat de teller weer op 0 gezet wordt, als er geen data wordt ontvangen.
Dit is mijn code.
Ik heb twee publieke variablen
Visual Basic:
1
2
| Dim intCount As Integer Dim intTimer As Integer |
Deze worden in de form_load keurig op 0 gezet.
Hierna heb ik een sub die reageert als er data ontvangen wordt.
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| Public Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles objSerialPort.DataReceived 'Uitlezen in BYTE MODE If objTimer.Enabled = False Then objTimer.Enabled = True End If intTimer = 0 Dim strTmp As String Dim intloop As Integer Dim intBytes As Integer Dim arrBuffer As Byte() strTmp = "" intBytes = objSerialPort.BytesToRead ReDim arrBuffer(intBytes) objSerialPort.Read(arrBuffer, 0, intBytes) For intloop = 0 To intBytes If arrBuffer(intloop) > 128 Then arrBuffer(intloop) -= 128 txtInput.Text += Chr(arrBuffer(intloop)) strTmp += Chr(arrBuffer(intloop)) Next strTmp = Replace(strTmp, " ", "") strTmp = Replace(strTmp, "FUNC01", "X") For intloop = 1 To Len(strTmp) - 1 If Mid(strTmp, intloop, 1) = "X" Then intCount += 1 If intCount = 120 Then '3 enters per regel er zijn 40 regels 40x3=120 :) SendKeys.SendWait("{enter}") intCount = 0 Else SendKeys.SendWait("{tab}") End If Else SendKeys.SendWait(Mid(strTmp, intloop, 1)) End If Next txtInput.Text = Replace(txtInput.Text, "FUNC01", vbCrLf) End Sub |
Zoals je ziet in het begin wordt de timer geactiveerd, en wordt elke keer als er data ontvangen wordt, intTimer op 0 gezet.
Nu zou er bij elke tick het volgende moeten gebeuren.
Visual Basic:
1
2
3
4
5
6
7
8
| Private Sub objTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles objTimer.Tick intTimer += 1 If intTimer = 2 Then intTimer = 0 intCount = 0 objTimer.Enabled = False End If End Sub |
Dus als er geen data ontvangen wordt, zou er naar mijn inziens de intTimer bij de 10 moeten komen en de variabele intCount netjes op 0 te zetten.
Als ik een breakpoint plaats, dan zie ik netjes dat de timer geactiveerd wordt, maar de tick event wordt niet bereikt, iemand enig idee?
If it is broken, fix it. If it ain't broken, make it better!