OVH Cloud OVH Cloud

Probleme avec le controle MsComm

5 réponses
Avatar
Dan
Salut

Je fais une application qui recoit des donnée du port serie,toutefois
l'evenement "oncomm" ne s'execute jamais. J'ai mis un "breakpoint" au tout
début et il ne rentre jamais.

Par conte je me suis fait un timer de 30ms pour verifier le port et cela
fonctionne sans probleme.
J'ai essayé desupprimer le controle et d'en refaire un nouveau mais sans
succes.Pourtant au début de mes tests l'event oncomm fonctionnait,c'est
étrange!

Merci !

5 réponses

Avatar
Jean-Marc
"Dan" a écrit dans le message de
news:O9m$%
Salut

Je fais une application qui recoit des donnée du port serie,toutefois
l'evenement "oncomm" ne s'execute jamais. J'ai mis un "breakpoint" au tout
début et il ne rentre jamais.

Par conte je me suis fait un timer de 30ms pour verifier le port et cela
fonctionne sans probleme.
J'ai essayé desupprimer le controle et d'en refaire un nouveau mais sans
succes.Pourtant au début de mes tests l'event oncomm fonctionnait,c'est
étrange!




Hello,

Que vaut ton inputLen ?
-> Si il n'est pas à 0, le mettre à 0.

Es tu sur des paramètres (ex:"9600,N,8,1") ?
-> vérifier


Mets un timer à 100 millisecondes, et affiche dans un textbox
multiligne la valeur de la propriété CommEvent, comme ça:
text1.text = time & " : " & MSComm1.CommEvent & vbcrlf & text1.text
-> étudier l'affichage et en déduire ce qui ne va pas.

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Fred
Dans : news:4382510f$0$13444$,
Jean-Marc disait :
"Dan" a écrit dans le message de
news:O9m$%
Salut





Je fais une application qui recoit des donnée du port serie,toutefois
l'evenement "oncomm" ne s'execute jamais. J'ai mis un "breakpoint"
au tout début et il ne rentre jamais.





Hello,

Que vaut ton inputLen ?
-> Si il n'est pas à 0, le mettre à 0.

Es tu sur des paramètres (ex:"9600,N,8,1") ?
-> vérifier



Bonjour,
J'ajouterais, changer la valeur du RThreshold (nombre de caractères
reçus qui déclenche l'événement).
Avec une valeur de 1, l'événement sera appelé à chaque caractère arrivé
sur la com.

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
Dan
Salut à vous 2 !
merci bien de m'aider
la seule chose qui m'a permit de faire fonctionner l'évenement oncomm est en
mettant
RThreshold à 1 comme Fred a suggeré, je comprends pas pourquoi par contre.

Voici un exemple de trame que je recois a chaque fois, jamais plus de 16
caracteres
j'envoie ceci @01100000071* +enter chr(13) et je recoie
@0110000002173* +enter chr(13)

Pour ceux qui connaissent, je dois communiquer avec des controles de
temperatures de marque Omron(e5ck) pour lire la temperature actuelle et
changer le setpoint.

"Fred" a écrit dans le message de news:
%
Dans : news:4382510f$0$13444$,
Jean-Marc disait :
> "Dan" a écrit dans le message de
> news:O9m$%
>> Salut

>> Je fais une application qui recoit des donnée du port serie,toutefois
>> l'evenement "oncomm" ne s'execute jamais. J'ai mis un "breakpoint"
>> au tout début et il ne rentre jamais.

> Hello,
>
> Que vaut ton inputLen ?
> -> Si il n'est pas à 0, le mettre à 0.
>
> Es tu sur des paramètres (ex:"9600,N,8,1") ?
> -> vérifier

Bonjour,
J'ajouterais, changer la valeur du RThreshold (nombre de caractères
reçus qui déclenche l'événement).
Avec une valeur de 1, l'événement sera appelé à chaque caractère arrivé
sur la com.

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT



Avatar
Fred
Dans le message:,
Dan écrit:
Salut à vous 2 !
merci bien de m'aider
la seule chose qui m'a permit de faire fonctionner l'évenement oncomm
est en mettant
RThreshold à 1 comme Fred a suggeré, je comprends pas pourquoi par
contre.



C'est comme ça ;-)
Si tu le laisses à zéro, cela signifie que tu ne souhaites pas le
déclenchement de l'événement oncomm sur arrivée de caractères. Pense que
cet événement peut être appelé également sur erreur, ou sur changement
d'état des fils de contrôle, ou même sur le départ de caractères.

Voici un exemple de trame que je recois a chaque fois, jamais plus de
16 caracteres
j'envoie ceci @01100000071* +enter chr(13) et je recoie
@0110000002173* +enter chr(13)

Pour ceux qui connaissent, je dois communiquer avec des controles de
temperatures de marque Omron(e5ck) pour lire la temperature actuelle
et changer le setpoint.



Je ne connais pas ces équipements mais je te propose une façon de
procéder qui a fonctionné pour moi et que j'ai donnée il y a un moment
ici :

Dans la feuille qui contient ton contrôle MSComm, tu déclares en
variable de feuille une chaîne «trame»

Dans l'événement on_comm tu utilises un select case du style :

Select Case MSComm1.CommEvent
Case ....
Case ....
Case comEvReceive
Carac = MSComm1.Input
If Carac = Chr$(13) Then
'Ici le traitement de la ligne reçue

trame = ""
Else
trame = trame & Carac
End If

Case ....
End Select


Carac peut être déclaré en local dans le On_Comm
Et pour les paramètres
RThreshold = 1
InputLen = 1
(plus les autres que tu connais)
Je te laisse consulter la doc pour vérifier les constantes CommEvent (je
ne suis plus sûr du comEvReceive)
Et si tu veux gérer d'autres événements, tu les intègres dans les «case»
qui restent.
(intéressant de voir les différents événements qui surviennent lors de
l'établissement de la connexion par exemple)

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT
Avatar
Dan
Salut encore
Je me souviens maintenant de ce parametre, j'avais oublié de le mettre à 1
Ca faisait longtemps que j'avais pas communiqué par port série :)

La chose qui m'a porté a confusion c'est qu'au tout début j'ai recu les
données avec l'évenement du "oncomm" mais ce parametre était bien à zero,
c'est par la suite qu'il a arreté de fonctionner :P

"Fred" a écrit dans le message de news:

Dans le message:,
Dan écrit:
> Salut à vous 2 !
> merci bien de m'aider
> la seule chose qui m'a permit de faire fonctionner l'évenement oncomm
> est en mettant
> RThreshold à 1 comme Fred a suggeré, je comprends pas pourquoi par
> contre.

C'est comme ça ;-)
Si tu le laisses à zéro, cela signifie que tu ne souhaites pas le
déclenchement de l'événement oncomm sur arrivée de caractères. Pense que
cet événement peut être appelé également sur erreur, ou sur changement
d'état des fils de contrôle, ou même sur le départ de caractères.

> Voici un exemple de trame que je recois a chaque fois, jamais plus de
> 16 caracteres
> j'envoie ceci @01100000071* +enter chr(13) et je recoie
> @0110000002173* +enter chr(13)
>
> Pour ceux qui connaissent, je dois communiquer avec des controles de
> temperatures de marque Omron(e5ck) pour lire la temperature actuelle
> et changer le setpoint.

Je ne connais pas ces équipements mais je te propose une façon de
procéder qui a fonctionné pour moi et que j'ai donnée il y a un moment
ici :

Dans la feuille qui contient ton contrôle MSComm, tu déclares en
variable de feuille une chaîne «trame»

Dans l'événement on_comm tu utilises un select case du style :

Select Case MSComm1.CommEvent
Case ....
Case ....
Case comEvReceive
Carac = MSComm1.Input
If Carac = Chr$(13) Then
'Ici le traitement de la ligne reçue

trame = ""
Else
trame = trame & Carac
End If

Case ....
End Select


Carac peut être déclaré en local dans le On_Comm
Et pour les paramètres
RThreshold = 1
InputLen = 1
(plus les autres que tu connais)
Je te laisse consulter la doc pour vérifier les constantes CommEvent (je
ne suis plus sûr du comEvReceive)
Et si tu veux gérer d'autres événements, tu les intègres dans les «case»
qui restent.
(intéressant de voir les différents événements qui surviennent lors de
l'établissement de la connexion par exemple)

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT