Bonjour
J'ai un petit soft de communication série (RS232) qui fonctionne bien quand mon périphérique répond bien.
Maintenant je souhait blindé mon soft dans le cas de non réception.
J'ai voulu utiliser SerialPort1.ReadTimeout = 1000 mais je ne sort jamais de ma boucle de réception de trame.
Avez vous une idée.
Voici mon code (pour la mise au point j'appui sur un bouton)
Merci pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 Private Sub Button1_Click_1(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim TrameDemandeIdentification As String Dim CompteurCarRecu As Integer Dim NbCarRecevoir As Integer Dim SofRecu As Boolean Dim TabCaractereRecu() As Byte = New Byte(29) {} Dim indice1 As Integer Dim indice2 As Integer ReDim TabCaractereRecu(40) TrameDemandeIdentification = "55000180EF07" TextBox2.Text = "" SerialPort1.PortName = "com8" SerialPort1.Open() SerialPort1.WriteTimeout = 500 CompteurCarRecu = 0 NbCarRecevoir = 0 indice1 = 0 indice2 = 0 SofRecu = False SerialPort1.DiscardInBuffer() SerialPort1.Write(hex2ascii(TrameDemandeIdentification)) hbwait(50) FinTimerReception = False TextBox2.Text = "Début" SerialPort1.ReadTimeout = 1000 Try Do Dim Incoming As Integer = SerialPort1.BytesToRead indice2 = Incoming If Incoming <> 0 Then SerialPort1.Read(TabCaractereRecu, indice1, indice2) CompteurCarRecu = CompteurCarRecu + Incoming indice1 = CompteurCarRecu If TabCaractereRecu(0) = &H55 And SofRecu = False Then SofRecu = True If Incoming >= 3 Then NbCarRecevoir = (TabCaractereRecu(1) * 256) + TabCaractereRecu(2) + 5 End If If CompteurCarRecu = NbCarRecevoir Then TextBox2.Text = CompteurCarRecu.ToString + " / " + NbCarRecevoir.ToString Exit Do End If End If ElseIf FinTimerReception = True Then TextBox2.Text = "Time out" Exit Do End If Loop Catch ex As TimeoutException Console.WriteLine("Error: Serial Port read timed out.") Finally If SerialPort1 IsNot Nothing Then SerialPort1.Close() End Try End Sub
Partager