romain145
Messages postés25Date d'inscriptionsamedi 24 mars 2007StatutMembreDernière intervention 3 février 2011
-
7 avril 2007 à 20:49
romain145
Messages postés25Date d'inscriptionsamedi 24 mars 2007StatutMembreDernière intervention 3 février 2011
-
8 avril 2007 à 17:18
Bonjour tout le monde,
je commence la programmation (en VB) et
je souhaite lire un fichier de données contenant une chaine à
transmettre par le port série. J'ai fait une recherche sur ce forum et sur google, mais n'ai pas trouvé la réponse à mon problème:
lorsque j'exécute :
Dim Fichier As New IO.FileStream(Chemin.Text, IO.FileMode.Open, IO.FileAccess.Read)
Dim r As New IO.BinaryReader(Fichier)
'Dim line As String
' Read data from Test.data.
Dim i As Integer
For i = 0 To 10
TextBox2.Text += Convert.ToChar(r.ReadByte)
Next i
r.Close()
Fichier.Close()
mon textbox contient les caractères (06 par exemple) et non leur code hexa (30 puis 36).
Pouvez-vous me filer un coup de main ?
Merci
Romain
cs_Anotine
Messages postés64Date d'inscriptionmardi 22 juin 2004StatutMembreDernière intervention14 septembre 2008 7 avril 2007 à 20:59
Je n'ai pas très bien compris ton problème mais déjà remplace "TextBox2.Text += Convert.ToChar(r.ReadByte)" par "TextBox2.Text &= Convert.ToChar(r.ReadByte)" ça ira déjà mieux car tu ne fais pas une addition mais une concaténation ... Et pourquois cette boucle ?
Précise ton problème. Merci
Antoine ROUX
<hr />
La programmation est l'art de mettre 15 jours pour gagner quelques millisecondes ...
romain145
Messages postés25Date d'inscriptionsamedi 24 mars 2007StatutMembreDernière intervention 3 février 2011 7 avril 2007 à 21:06
Salut et merci,
la boucle ne me sert à rien pour l'instant, c'est juste pour m'arrêter dans la lecture et "voir ce que ça donne".
J'ai remplacé le += par &=, le résultat est identique.
ce que je souhaite faire :
mon fichier contient l'octet "30", soit le chiffre 0.
Je veux pouvoir lire cet octet et non le chiffre.
Je pense m'être rendu compte de mon erreur, je fais un essai avec mon matériel sur le port série et vous réponds pour vous dire ce qu'il en est.
romain145
Messages postés25Date d'inscriptionsamedi 24 mars 2007StatutMembreDernière intervention 3 février 2011 7 avril 2007 à 21:35
Salut, c'est bien ça merci !!
J'ai fait un test avec mon matériel et ça fonctionne parfaitement si je fais :
MsCom.Write(Chr(r.Read)) pour une valeur de "02".
Seulement j'ai une erreur si je rencontre l'octet "FF" dans le fichier "Procedure Call or argument is not valid" ce qui parait logique car "FF" retourne -1 s'il est lu en tant qu'entier signé.
J'ai donc modifié la ligne pour : MsCom.Write(Chr(r.ReadByte))
l'octet est lu en tant qu'octet non signé et je n'ai plus l'erreur, mais toujours des soucis de transmission... j'analyse ça !
Merci pour ton aide Anotine ;-)
@@++
Romain
Vous n’avez pas trouvé la réponse que vous recherchez ?
romain145
Messages postés25Date d'inscriptionsamedi 24 mars 2007StatutMembreDernière intervention 3 février 2011 8 avril 2007 à 02:30
Bonsoir,
l'erreur venant du FF est que la table ASCII standard va de (0) à (127) (et non (255)). Par conséquent tout caractère ayant un code supérieur à 127 est envoyé en tant que "?" soit (63).
J'ai résolu ce problème de cette manière :
Dim tab(1) As Byte
tab(1) = 255
MsCom.Write(tab, 1, 1)
Ainsi la fonction d'émission envoi le bon code, et l'envoi est compatible avec la lecture octet par octet dans un fichier.
Lecture qui fait n'importe quoi d'ailleur, merci de me dire si vous voyez quelque chose qui cloche là-dedans :
' Ouverture du fichier.
Dim Fichier AsNew IO.FileStream(Chemin.Text, IO.FileMode.Open, IO.FileAccess.Read)
Dim r AsNew IO.BinaryReader(Fichier)
Dim Taille_Fichier As Integer = Convert.ToUInt16(Fichier.Length)
Dim tab(Taille_Fichier) As Byte
' Lit le fichier et le stocke dans le tableau
Dim i As Integer
For i = 0 To Taille_Fichier - 1
tab(i) = r.ReadByte
TextBox2.Text &= tab(i) - 1
Next i
romain145
Messages postés25Date d'inscriptionsamedi 24 mars 2007StatutMembreDernière intervention 3 février 2011 8 avril 2007 à 17:18
Bonjour tout le monde,
mes problèmes sont résolus et mon programme avance à grands pas. J'arrive aujourd'hui à :
- lire un fichier et à stocker les octets dans un tableau de bonne dimension.
- envoyer ces octets vers mon périphérique cible sur le port série.
- gérer le protocole d'échange pour la transmission.
Je mettrai peut-être la source en ligne si des gens sont intéressés... (pour info le périphérique en question est un journal lumineux d'1m de long).