Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

probleme RS232

15 réponses
Avatar
jean claude
bonjour
dans mon programme j'utilise la fontion mscomm.oncomm,
j'affecte le texte reçu sur la RS232 à une variable, si je produit un arret
sur cette ligne je peut visualiser le texte en info bulle dans mscomm.input
mais lorsque je passe à l'instruction suivante (F8) mscomm.input est vide ce
qui est normal apres une lecture du buffer mais ma variable est vide elle
aussi comment etre sûr de l'affectation du texte du buffer dans ma variable?
ci joint le bout de programme (rien de plus simple) et pourtant ça pose
probleme !!

Public Sub MSComm1_OnComm()
char_rec = Form1.MSComm1.Input (char_rec variable indefiniment vide )
Traitement (mon sous programme )
End Sub

10 réponses

1 2
Avatar
touriste
jean claude a écrit :

bonjour
dans mon programme j'utilise la fontion mscomm.oncomm,
j'affecte le texte reçu sur la RS232 à une variable, si je produit un arret
sur cette ligne je peut visualiser le texte en info bulle dans mscomm.input
mais lorsque je passe à l'instruction suivante (F8) mscomm.input est vide ce
qui est normal apres une lecture du buffer mais ma variable est vide elle
aussi comment etre sûr de l'affectation du texte du buffer dans ma variable?
ci joint le bout de programme (rien de plus simple) et pourtant ça pose
probleme !!

Public Sub MSComm1_OnComm()
char_rec = Form1.MSComm1.Input (char_rec variable indefiniment vide )
Traitement (mon sous programme )
End Sub



Bonjour,

Avez vous vérifier au préalable que :
MSComm1.portopen = true et que la variable char_rec est déclarée qq part ?
Vérifiez en outre si la propriété inputlen de l'objet MScomm1 est
compatible avec la variable char-rec.

A+

Christophe
Avatar
jean-marc
"touriste" wrote in message
news:47288316$0$27394$
jean claude a écrit :

bonjour
dans mon programme j'utilise la fontion mscomm.oncomm,
j'affecte le texte reçu sur la RS232 à une variable, si je produit un
arret sur cette ligne je peut visualiser le texte en info bulle dans
mscomm.input mais lorsque je passe à l'instruction suivante (F8)
mscomm.input est vide ce qui est normal apres une lecture du buffer mais
ma variable est vide elle aussi comment etre sûr de l'affectation du
texte du buffer dans ma variable?
ci joint le bout de programme (rien de plus simple) et pourtant ça pose
probleme !!

Public Sub MSComm1_OnComm()
char_rec = Form1.MSComm1.Input (char_rec variable indefiniment
vide )
Traitement (mon sous programme )
End Sub



Bonjour,

Avez vous vérifier au préalable que :
MSComm1.portopen = true et que la variable char_rec est déclarée qq part ?



De préférence localement, même si on doit ensuite l'affecter à
une variable de portée plus étendue.

Vérifiez en outre si la propriété inputlen de l'objet MScomm1 est
compatible avec la variable char-rec.



Et réciproquement :-)

Idéalement, on devrait déclarer dans ce genre de cas
Dim char_rec As String

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
jean claude
bien sûr mes variable sont declarées, mon port ouvert, en fait si je suis en
mode pas à pas => pas d'affectation de ma variable

en mode normal, j'ai 2 text box affectées par cette variable à different
endrois du prog pour verification
l'une m'affiche une bonne partie du texte sans le debut, l'autre les 2
derniers caracteres
et ça en partant de la variable char_rec dans laquelle je tranfere mon text
reçu
donc pas de possibilité de debuggage ni de fonctionnement correct !!!
Avatar
jean claude
slt
je viens de faire le test avec variable locale idem

Private Sub MSComm1_OnComm()
Dim Toto As String

Toto = Form1.MSComm1.Input
char_rec = Toto
Traitement
End Sub

si je fais un break sur "traitement" l'info bulle de input est tjs = à mon
text en reception, char_rec et toto sont tjs egale à "" (text vide)

par contre si je place :
char_rec = mscomm1.input
juste apres la commande pour recevoir ce mot , je n'ai pas de probleme ex:

MSComm1.Output = "e"
'Text6.Text = Form1.MSComm1.Input
'char_rec = Text6.Text
'Traitement

mais je ne peux pas fonctionner ainsi tout le temps car par la suit ce sont
des valeur envoyées automatiquement à l'ordi d'ou la necessité du : "oncomm"
Avatar
jean claude
slt
j'ai fait le test avec une variable locale :
tjs pareil l'info bulle de input contient bien le text reçu mais pas mon
char_rec
par contre si je place l'input juste apres le output pas de probleme ex:

MSComm1.Output = "e"
char_rec= Form1.MSComm1.Input
Traitement

mais je ne peux pas fonctionner ainsi car l'ordi doit recevoir des valeurs
d'ou l'utilisation de OnComm (et les prob qui vont avec)
Avatar
Gloops
Salut,

jean claude a écrit, le 31/10/2007 15:42 :
Toto = Form1.MSComm1.Input
char_rec = Toto
Traitement
End Sub

si je fais un break sur "traitement" l'info bulle de input est tjs = à mon
text en reception, char_rec et toto sont tjs egale à "" (text vide )



Effectivement, très étonnant, l'un comme l'autre (autant que In put ait
gardé la valeur, que Toto et char_rec ne l'aient pas fait).


Enfin je veux dire, en tout cas, étonnant pour quelqu'un qui a peu
pratiqué l'usage du port série en programmation.

Bon alors quoi en déduire, que MSComm1.Input est un tampon d'entrà ©e,
qu'il ne se purge pas en transférant sa valeur à une variable, et que
d'ailleurs la variable ne reçoit pas la valeur de cette manière .

Enfin bon je déverse ça directement brut de fonderie, sans avoi r rien lu
dans l'aide, vu que l'aide tu l'as sous la main.

On va bien voir si ça aide ...

Je me rappelle mon grand-père qui aidait à résoudre les pr oblèmes de
géométrie vectorielle sans jamais avoir fait de maths en dehors des
problèmes de robinets. Et ça marchait toujours.


par contre si je place :
char_rec = mscomm1.input
juste apres la commande pour recevoir ce mot , je n'ai pas de probleme ex:

MSComm1.Output = "e"
'Text6.Text = Form1.MSComm1.Input
'char_rec = Text6.Text
'Traitement




Là, j'ai du mal à saisir l'enchaînement, pourquoi MSComm1. Output
surgit-il tout-à-coup alors que tu cherchais à déboguer l' entrée ?



mais je ne peux pas fonctionner ainsi tout le temps car par la suit ce sont
des valeur envoyées automatiquement à l'ordi d'ou la necessit é du : "oncomm"



Au fait, pour avoir une idée de comment tester, ton port série est
ouvert sur quoi ?
Avatar
Patrice Henrio
Je suis peut-être complètement à côté de la plaque mais je crois me souvenir
que le port COM se comportait dans le temps (il y a bien longtemps que je
n'ai pas mis les mains dans le cambouis) comme un tampon et que la lecture
ne le vidait pas. Il fallait utiliser un commande du genre flush ou dans ce
genre (une sorte de bruit de chasse d'eau). Donc la lecture du port
renvoyait toujours la lecture du début et il y avait même des risques de
débordement dont le traitement dépendait de chaque machine.
Mais peut-être que ce que je dis n'a rien à voir avec votre problème et
dans ce cas mon intervention est parfaitement inutile même si elle part d'un
bon sentiment.



"jean claude" a écrit dans le message
de news:

bien sûr mes variable sont declarées, mon port ouvert, en fait si je suis
en
mode pas à pas => pas d'affectation de ma variable

en mode normal, j'ai 2 text box affectées par cette variable à different
endrois du prog pour verification
l'une m'affiche une bonne partie du texte sans le debut, l'autre les 2
derniers caracteres
et ça en partant de la variable char_rec dans laquelle je tranfere mon
text
reçu
donc pas de possibilité de debuggage ni de fonctionnement correct !!!


Avatar
tking
jean claude a formulé la demande :
bonjour
dans mon programme j'utilise la fontion mscomm.oncomm,
j'affecte le texte reçu sur la RS232 à une variable, si je produit un arret
sur cette ligne je peut visualiser le texte en info bulle dans mscomm.input
mais lorsque je passe à l'instruction suivante (F8) mscomm.input est vide ce
qui est normal apres une lecture du buffer mais ma variable est vide elle
aussi comment etre sûr de l'affectation du texte du buffer dans ma variable?
ci joint le bout de programme (rien de plus simple) et pourtant ça pose
probleme !!

Public Sub MSComm1_OnComm()
char_rec = Form1.MSComm1.Input (char_rec variable indefiniment vide
) Traitement (mon sous programme )
End Sub



Pour avoir titillé mscomm il y a quelques temps, je me range du coté de
ceux qui pensent qu'il y a une histoire de buffer (ou tampon) qui ne se
vide pas et qu'il faut aller lire.
Sinon, as-tu regarder dans les propriétés du port com depuis le
gestionnaire de périphériques de windows ?
Avatar
Fred
"jean claude" <jean a écrit dans le
message de news:

ci joint le bout de programme (rien de plus simple) et pourtant ça pose
probleme !!



Poste un bloc significatif du code *et* des paramétrages (propriétés de
MsComm).
Avatar
Jean-marc
jean claude wrote:
bonjour
dans mon programme j'utilise la fontion mscomm.oncomm,
j'affecte le texte reçu sur la RS232 à une variable, si je produit un
arret sur cette ligne je peut visualiser le texte en info bulle dans
mscomm.input mais lorsque je passe à l'instruction suivante (F8)
mscomm.input est vide ce qui est normal apres une lecture du buffer
mais ma variable est vide elle aussi comment etre sûr de
l'affectation du texte du buffer dans ma variable? ci joint le bout
de programme (rien de plus simple) et pourtant ça pose probleme !!

Public Sub MSComm1_OnComm()
char_rec = Form1.MSComm1.Input (char_rec variable
indefiniment vide ) Traitement (mon sous
programme )
End Sub



Hello,

il faut bien lire la doc du composant. Il est facile à employer, mais
il y a bcp de paramètres à prendre en compte.

Pour ce qui est de Input, la doc est claire:
=> Returns and removes a stream of data from the receive buffer.

La lecture est donc destructrice: après l'affectation, le buffer est vidé.

Le PLUS important:
Pour que ça marche bien (dans ton cas), tu dois vérifier que la
propriété InputLen est bien à zéro.
Et le inputMode à "InputModeText".

Pour le reste, rien de sorcier. j'ai fait des applis RS232 à la pelle,
j'ai encore fait l'autre jour un petit programme de lecture code
barre avec RS232, ça fonctionne très bien pour autant qu'on soit
très méthodique et surtout ==>> SURTOUT <<== d'avoir lu la
doc de long en large et de comprendre parfaitement le rôle
de chacune des propriétés. J'oserais dire que avec ce composant,
sur base de mon expérience (+/- 15 ans) avec ce composant,
99% des ennuis rencontrés viennent d'une lecture insuffisante
de la doc. Puis 0,9% viennent de problème de code (variables
mal déclarées, effets de bords évènementiels, etc).
Les 0,1% restants, c'est des problèmes hardware, souvent des
specs constructeurs mal ficelées ou fausses.

Conseil:
Faire un petit programme isolé pour bien tester la partie PURE RS232.
Une fois ceci fait et maitrisé, alors tu peux intégrer dans le prog
principal. Ce n'est qu'un conseil.

Bonne prog!

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
1 2