Bonjour à tous!
Je tente une communication, en port série, avec une carte : je n'envoie mes données que si la carte me donne la bonne réponse.
Pour lire les données sur le port, j'utilise le thread suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Public Shared Sub Read() While True Try While (True) duff = duff & CStr(SPort1.ReadExisting) End While Catch generatedExceptionName As TimeoutException End Try End While End Sub
Et voilà le code qui pose problème :
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 'Compteur des 12 CX For cmpt1 = 0 To 12 'Compteur des secteurs For cmpt2 = 0 To 15 'Erase sauf si on est dans la "zone interdite" (0x00C0F000 -> 0x00C0FFFF) If (cmpt1 = 0 And cmpt2 = 15) Then Else ValStr = "Hey" 'Ecriture sur le port WriteRS232("9F", 1) 'Attente de "0xAA" pour la suite / L'erreur est ici, au bout de la troisième boucle While (duff.Substring(CInt(duff.Length - 1), 1) <> AAStr) End While '00 00 E0 WriteRS232("0000E0", 3) hbwait(30) 'Adresse WriteRS232(ValStr, CInt(ValStr.Length / 2)) 'Attente de "0xEA" pour continuer While (duff.Substring(CInt(duff.Length - 1), 1) <> "ê") End While 'Attente de "0xEA" pour continuer While (duff.Substring(CInt(duff.Length - 1), 1) <> "ê") End While End If Next Next
Le code marche plutôt bien... les deux premières fois. J'ai ensuite un code erreur :
"Une exception non gérée du type 'System.ArgumentOutOfRangeException' s'est produite dans mscorlib.dll
Informations supplémentaires : startIndex ne peut pas être supérieur à la longueur de la chaîne."
Or, lorsque je mets un espion sur duff.length et duff.length-1, mon StartIndex est bien inférieur à la longueur de la chaîne!
Alors qu'est-ce qui peut provoquer cette erreur?
Une seconde question : est-il possible, et plus propre, de supprimer le contenu de duff avant chaque lecture?
Je vous remercie d'avance de votre aide!
Partager