Meilleur auteur de réponses
Ubound en vbNet

Question
-
Bonjour,
j'ai une procédure que j'appelle dans l'evenement datareceived d'un port série,et qui utilise dans un select case la fonction Ubound() comme suit:
Private Sub ReceiveArray1(ByVal inArray As Object) On Error Resume Next Dim bRcv(29) As Byte Select Case UBound(inArray) Case 0 MsgBox("case 0") If inArray(0) = 126 Then SerialPort1.ReceivedBytesThreshold = 29 ' Generates a receive event on 29 character received SerialPort1.ReadBufferSize = 29 ' Read the receive buffer 29 char. at a time End If Case 28 'MsgBox("case 28")
mais au moment de l'exécution,en faisant des tests,j'ai remarqué qu'il ne rentre pas dans le select case du tout,du coup je pense qu'il y a un souci avec Ubound,je ne sais pas si je peux la remplacer par autre chose
Merci d'avance
- Modifié selly25 lundi 15 avril 2013 12:47
Réponses
-
Bonjour
Avant résoudre une possible erreur avec UBound, enlevez
OnErrorResumeNext
Comme ça vous cachez une exception.
Cordialement,
- Marqué comme réponse Aurel Bera jeudi 18 avril 2013 08:26
-
Il est remplis quand vous appellez SerialPort.Read. Cette *fonction* remplit le tableau avec les données reçues et retourne le nombre d'octets lus et vous passiez ce résultat à votre fonction (qui attend en fait un tableau d'octets) d'où erreur.
Eventuellement utiliser le type byte() plutôt que Object dans votre argument de fonction (j'imagine que vous allez toujours passer un tableau). Cela aurait permis de voir l'incohérence à la compilation.
Eventuellement éviter de tester des tailles en dur. A ma connaissance l'idée générale est que le port série envoie les données à son rythme et je pense que c'est à votre code de s'adapter. Si vous supposez que vous allez toujours recevoir les données en une fois avec la taille voulue, cela pourrait ne plus marcher selon les circonstances et créez des bugs difficiles à comprendre. Au moins pour le débogage prévoyez éventuellement un cas "else" dans le select case pour que vous puissiez voir une éventuelle situation inattendue...
De même vous pouvez réutiliser le même tableau (ce qui évitera d'allouer un nouveau tableau à chaque réception).
Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
- Marqué comme réponse Aurel Bera jeudi 18 avril 2013 08:25
Toutes les réponses
-
Bonjour,
Merci d’avoir contacté les forums MSDN France. La langue utilisée sur ces forums est la langue
française, donc s’il vous plaît repostez votre question en français ou modifiez
votre premier message, comme on vous demande dans l’étiquette sur les forums MSDN France.Merci pour votre compréhension et collaboration.
Cordialement,
- Modifié Aurel Bera lundi 15 avril 2013 12:32
-
j'appelle la procédure comme suit (dans serialport1_datareceived)
Dim bytes As Integer = SerialPort1.BytesToRead
Dim comBuffer As Byte() = New Byte(bytes - 1) {}
ReceiveArray1(SerialPort1.Read(comBuffer, 0, bytes))Dim bytes As Integer = SerialPort1.BytesToRead Dim comBuffer As Byte() = New Byte(bytes - 1) {} ReceiveArray1(SerialPort1.Read(comBuffer, 0, bytes))
-
-
Bonjour
Avant résoudre une possible erreur avec UBound, enlevez
OnErrorResumeNext
Comme ça vous cachez une exception.
Cordialement,
- Marqué comme réponse Aurel Bera jeudi 18 avril 2013 08:26
-
-
Vous avez :
ReceiveArray1(SerialPort1.Read(comBuffer, 0, bytes))
SerialPort1.Read(comBuffer,0,bytes) retourne le nombre d’octets reçues, et non les octets si je me rappelle bien.
Donc utilisez
SerialPort1.Read(comBuffer,0,bytes) ;
ReceiveArray1(comBuffer)
Cordialement,
- Modifié Aurel Bera mercredi 17 avril 2013 07:33
-
-
correct.
C'est ReceiveArray(comBuffer).
Cordialement,
-
-
-
Il est remplis quand vous appellez SerialPort.Read. Cette *fonction* remplit le tableau avec les données reçues et retourne le nombre d'octets lus et vous passiez ce résultat à votre fonction (qui attend en fait un tableau d'octets) d'où erreur.
Eventuellement utiliser le type byte() plutôt que Object dans votre argument de fonction (j'imagine que vous allez toujours passer un tableau). Cela aurait permis de voir l'incohérence à la compilation.
Eventuellement éviter de tester des tailles en dur. A ma connaissance l'idée générale est que le port série envoie les données à son rythme et je pense que c'est à votre code de s'adapter. Si vous supposez que vous allez toujours recevoir les données en une fois avec la taille voulue, cela pourrait ne plus marcher selon les circonstances et créez des bugs difficiles à comprendre. Au moins pour le débogage prévoyez éventuellement un cas "else" dans le select case pour que vous puissiez voir une éventuelle situation inattendue...
De même vous pouvez réutiliser le même tableau (ce qui évitera d'allouer un nouveau tableau à chaque réception).
Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
- Marqué comme réponse Aurel Bera jeudi 18 avril 2013 08:25
-
-
Bonjour
Un petit retour, SVP?
Merci
Cordialement
-
Bonjour,
Pouvons-nous considérer que vous avez résolu votre problème avec les scénarios proposés ? Dans l'affirmative, pourriez-vous partager avec nous la solution, afin que d'autres personnes avec le même problème puissent profiter de cette solution ?
Désormais, nous marquons les solutions proposées. N'hésitez pas à revenir et supprimer la réponse marquée si la solution n’est pas correcte. Merci !
Cordialement,
-