Voici mon problème :
Mon application doit communiquer avec un interface via le prot série à
une vitesse de 1800 bauds. Mscomm n'utilise pas cette valeur.
J'ai trouvé une façon pour forcer la propriété "setting" de mon mscomm
pour pouvoir le paramètrer à "1800,N,8,1"
J'envoie la commande sur le port via le mscomm et elle est bien
tranmise à mon interface.
Sauf que, lorsque celle-ci me répond, je ne peux lire le buffer.
L'événement OncommEvent n'est jamais appeller...
J'utilise un sniffer pour voir les commandes sur le port série.
Je vois celles que j'envoie mais pas celle qui me sont transmisent.
Il y a un led sur l'interface pour m'indiqué qu'elle me réponds.
Donc, je peux transmettre mais, je ne peux lire ce qui m'est retourné
lorsque je paramètre mon objet mscomm à 1800 baud.
Quelqu'un peut-il m'indiqué comme y parvenir.
N.B. Je ne suis pas famillier avec les API...
Merci à l'avance.
Martin
Voici le code que j'utilise pour forcer le mscomm a être paramétré à
1800 baud.
---------------------------------------------------------------
Sub SetBaudRate(Com As MSComm, baud As Long)
Dim ComDcb As dcb
Dim ret As Long
' Check port is open
If Not Com.PortOpen Then
Err.Raise comPortNotOpen, Com.Name, _
"Operation valid only when the port is open"
Exit Sub
End If
' Get existing Comm state
ret = GetCommState(Com.CommID, ComDcb)
If ret = 0 Then
Err.Raise comDCBError, Com.Name, _
"Could not read current state of the port"
Exit Sub
End If
' Modify state with new baud rate
ComDcb.BaudRate = baud
' Set the new Comm state
ret = SetCommState(Com.CommID, ComDcb)
If ret = 0 Then
Err.Raise comSetCommStateFailed, Com.Name, _
"Could not set port to specified baud rate"
Exit Sub
End If
End Sub
------------------------------------------------
Function GetBaudRate(Com As MSComm) As Long
Dim ComDcb As dcb
Dim ret As Long
GetBaudRate = 0
' Check port is open
If Not Com.PortOpen Then
Err.Raise comPortNotOpen, Com.Name, _
"Operation valid only when the port is open"
Exit Function
End If
' Get Comm state
ret = GetCommState(Com.CommID, ComDcb)
If ret = 0 Then
Err.Raise comDCBError, Com.Name, _
"Could not read current state of the port"
Exit Function
End If
' Extract baud rate
GetBaudRate = ComDcb.BaudRate
End Function
Sub SetBaudRate(Com As MSComm, baud As Long) Dim ComDcb As dcb Dim ret As Long
' Check port is open If Not Com.PortOpen Then Err.Raise comPortNotOpen, Com.Name, _ "Operation valid only when the port is open" Exit Sub End If
' Get existing Comm state ret = GetCommState(Com.CommID, ComDcb) If ret = 0 Then Err.Raise comDCBError, Com.Name, _ "Could not read current state of the port" Exit Sub End If
' Modify state with new baud rate ComDcb.BaudRate = baud ' Set the new Comm state ret = SetCommState(Com.CommID, ComDcb) If ret = 0 Then Err.Raise comSetCommStateFailed, Com.Name, _ "Could not set port to specified baud rate" Exit Sub End If End Sub ------------------------------------------------ Function GetBaudRate(Com As MSComm) As Long Dim ComDcb As dcb Dim ret As Long
GetBaudRate = 0
' Check port is open If Not Com.PortOpen Then Err.Raise comPortNotOpen, Com.Name, _ "Operation valid only when the port is open" Exit Function End If
' Get Comm state ret = GetCommState(Com.CommID, ComDcb) If ret = 0 Then Err.Raise comDCBError, Com.Name, _ "Could not read current state of the port" Exit Function End If
' Extract baud rate GetBaudRate = ComDcb.BaudRate End Function .
Bonjour,
J'utilise souvent MSCOMM pour développer des protocoles série (XMODEM - PeSIT etc....) Je pense qu'il faut paramétrer le port com avant son ouverture.
Jean
>-----Message d'origine-----
Voici mon problème :
Mon application doit communiquer avec un interface via le
prot série à
une vitesse de 1800 bauds. Mscomm n'utilise pas cette
valeur.
J'ai trouvé une façon pour forcer la propriété "setting"
de mon mscomm
pour pouvoir le paramètrer à "1800,N,8,1"
J'envoie la commande sur le port via le mscomm et elle
est bien
tranmise à mon interface.
Sauf que, lorsque celle-ci me répond, je ne peux lire le
buffer.
L'événement OncommEvent n'est jamais appeller...
J'utilise un sniffer pour voir les commandes sur le port
série.
Je vois celles que j'envoie mais pas celle qui me sont
transmisent.
Il y a un led sur l'interface pour m'indiqué qu'elle me
réponds.
Donc, je peux transmettre mais, je ne peux lire ce qui
m'est retourné
lorsque je paramètre mon objet mscomm à 1800 baud.
Quelqu'un peut-il m'indiqué comme y parvenir.
N.B. Je ne suis pas famillier avec les API...
Merci à l'avance.
Martin
Voici le code que j'utilise pour forcer le mscomm a être
Sub SetBaudRate(Com As MSComm, baud As Long)
Dim ComDcb As dcb
Dim ret As Long
' Check port is open
If Not Com.PortOpen Then
Err.Raise comPortNotOpen, Com.Name, _
"Operation valid only when the port is open"
Exit Sub
End If
' Get existing Comm state
ret = GetCommState(Com.CommID, ComDcb)
If ret = 0 Then
Err.Raise comDCBError, Com.Name, _
"Could not read current state of the port"
Exit Sub
End If
' Modify state with new baud rate
ComDcb.BaudRate = baud
' Set the new Comm state
ret = SetCommState(Com.CommID, ComDcb)
If ret = 0 Then
Err.Raise comSetCommStateFailed, Com.Name, _
"Could not set port to specified baud rate"
Exit Sub
End If
End Sub
------------------------------------------------
Function GetBaudRate(Com As MSComm) As Long
Dim ComDcb As dcb
Dim ret As Long
GetBaudRate = 0
' Check port is open
If Not Com.PortOpen Then
Err.Raise comPortNotOpen, Com.Name, _
"Operation valid only when the port is open"
Exit Function
End If
' Get Comm state
ret = GetCommState(Com.CommID, ComDcb)
If ret = 0 Then
Err.Raise comDCBError, Com.Name, _
"Could not read current state of the port"
Exit Function
End If
' Extract baud rate
GetBaudRate = ComDcb.BaudRate
End Function
.
Bonjour,
J'utilise souvent MSCOMM pour développer des protocoles
série (XMODEM - PeSIT etc....)
Je pense qu'il faut paramétrer le port com avant son
ouverture.
Sub SetBaudRate(Com As MSComm, baud As Long) Dim ComDcb As dcb Dim ret As Long
' Check port is open If Not Com.PortOpen Then Err.Raise comPortNotOpen, Com.Name, _ "Operation valid only when the port is open" Exit Sub End If
' Get existing Comm state ret = GetCommState(Com.CommID, ComDcb) If ret = 0 Then Err.Raise comDCBError, Com.Name, _ "Could not read current state of the port" Exit Sub End If
' Modify state with new baud rate ComDcb.BaudRate = baud ' Set the new Comm state ret = SetCommState(Com.CommID, ComDcb) If ret = 0 Then Err.Raise comSetCommStateFailed, Com.Name, _ "Could not set port to specified baud rate" Exit Sub End If End Sub ------------------------------------------------ Function GetBaudRate(Com As MSComm) As Long Dim ComDcb As dcb Dim ret As Long
GetBaudRate = 0
' Check port is open If Not Com.PortOpen Then Err.Raise comPortNotOpen, Com.Name, _ "Operation valid only when the port is open" Exit Function End If
' Get Comm state ret = GetCommState(Com.CommID, ComDcb) If ret = 0 Then Err.Raise comDCBError, Com.Name, _ "Could not read current state of the port" Exit Function End If
' Extract baud rate GetBaudRate = ComDcb.BaudRate End Function .
Bonjour,
J'utilise souvent MSCOMM pour développer des protocoles série (XMODEM - PeSIT etc....) Je pense qu'il faut paramétrer le port com avant son ouverture.
Jean
Gilles RONSIN
(Martin), le dim. 06 juin 2004 05:46:18, écrivait ceci:
Salut,
Voici mon problème : Mon application doit communiquer avec un interface via le prot série à une vitesse de 1800 bauds. Mscomm n'utilise pas cette
A ma connaissance, 1800 bauds n'est pas un standard de communication !! les vitesses de communications ne sont pas paramétrée pas logiciel, mais sont gérées par le composant de sérialisation (carte série). Si ton interface ne le gère pas, VB n'y pourra rien. Le seul moyen à mon avis est de faire un câble spécial (par exemple qui inverse le Tx avec RTS) et de gérer les communications en basculant l'état de RTS. (j'ai fait ça il y a longtemps, si je retrouve quelque chose je le poste)
-- Embryon de site : http://gilles.ronsin.free.fr Nouvelles astuces : Interprêtation des évenements XP en "français" (trad auto) Il est impossible pour un optimiste d'être agréablement surpris.
martin_edith@hotmail.com (Martin), le dim. 06 juin 2004 05:46:18,
écrivait ceci:
Salut,
Voici mon problème :
Mon application doit communiquer avec un interface via le prot
série à une vitesse de 1800 bauds. Mscomm n'utilise pas cette
A ma connaissance, 1800 bauds n'est pas un standard de communication !!
les vitesses de communications ne sont pas paramétrée pas logiciel,
mais sont gérées par le composant de sérialisation (carte série). Si
ton interface ne le gère pas, VB n'y pourra rien.
Le seul moyen à mon avis est de faire un câble spécial (par exemple qui
inverse le Tx avec RTS) et de gérer les communications en basculant
l'état de RTS. (j'ai fait ça il y a longtemps, si je retrouve quelque
chose je le poste)
--
Embryon de site : http://gilles.ronsin.free.fr
Nouvelles astuces : Interprêtation des évenements XP en "français"
(trad auto)
Il est impossible pour un optimiste d'être agréablement surpris.
(Martin), le dim. 06 juin 2004 05:46:18, écrivait ceci:
Salut,
Voici mon problème : Mon application doit communiquer avec un interface via le prot série à une vitesse de 1800 bauds. Mscomm n'utilise pas cette
A ma connaissance, 1800 bauds n'est pas un standard de communication !! les vitesses de communications ne sont pas paramétrée pas logiciel, mais sont gérées par le composant de sérialisation (carte série). Si ton interface ne le gère pas, VB n'y pourra rien. Le seul moyen à mon avis est de faire un câble spécial (par exemple qui inverse le Tx avec RTS) et de gérer les communications en basculant l'état de RTS. (j'ai fait ça il y a longtemps, si je retrouve quelque chose je le poste)
-- Embryon de site : http://gilles.ronsin.free.fr Nouvelles astuces : Interprêtation des évenements XP en "français" (trad auto) Il est impossible pour un optimiste d'être agréablement surpris.
martin_edith
Gilles RONSIN wrote in message news:...
A ma connaissance, 1800 bauds n'est pas un standard de communication !! les vitesses de communications ne sont pas paramétrée pas logiciel, mais sont gérées par le composant de sérialisation (carte série). Si ton interface ne le gère pas, VB n'y pourra rien. Le seul moyen à mon avis est de faire un câble spécial (par exemple qui inverse le Tx avec RTS) et de gérer les communications en basculant l'état de RTS. (j'ai fait ça il y a longtemps, si je retrouve quelque chose je le poste)
Il s'agit d'une interface qui date de qq années qu'un copain a conçu. C'est pour cela que je retrouve a devoir travailler avec une vitesse non standard. Il y avait un petit programme en DOS qui la gérait. Je suis entrain de lui faire un programme windows pour cette interface. Lorsque j'utilise le programme DOS, je vois les commandes entrées et sortir sur le port série via le sniffer. Donc ma carte série supporte une vitesse de 1800 bauds. En DOS, il paramètrait le port et non l'objet mscomm comme je dois le faire.
J'attend de vos nouvelles.
Merci!
Gilles RONSIN <nomail@please.invalid> wrote in message news:<ca1udo.2o8.2@d2r2.c6po>...
A ma connaissance, 1800 bauds n'est pas un standard de communication !!
les vitesses de communications ne sont pas paramétrée pas logiciel,
mais sont gérées par le composant de sérialisation (carte série). Si
ton interface ne le gère pas, VB n'y pourra rien.
Le seul moyen à mon avis est de faire un câble spécial (par exemple qui
inverse le Tx avec RTS) et de gérer les communications en basculant
l'état de RTS. (j'ai fait ça il y a longtemps, si je retrouve quelque
chose je le poste)
Il s'agit d'une interface qui date de qq années qu'un copain a conçu.
C'est pour cela que je retrouve a devoir travailler avec une vitesse
non standard.
Il y avait un petit programme en DOS qui la gérait.
Je suis entrain de lui faire un programme windows pour cette
interface.
Lorsque j'utilise le programme DOS, je vois les commandes entrées et
sortir sur le port série via le sniffer.
Donc ma carte série supporte une vitesse de 1800 bauds.
En DOS, il paramètrait le port et non l'objet mscomm comme je dois le
faire.
A ma connaissance, 1800 bauds n'est pas un standard de communication !! les vitesses de communications ne sont pas paramétrée pas logiciel, mais sont gérées par le composant de sérialisation (carte série). Si ton interface ne le gère pas, VB n'y pourra rien. Le seul moyen à mon avis est de faire un câble spécial (par exemple qui inverse le Tx avec RTS) et de gérer les communications en basculant l'état de RTS. (j'ai fait ça il y a longtemps, si je retrouve quelque chose je le poste)
Il s'agit d'une interface qui date de qq années qu'un copain a conçu. C'est pour cela que je retrouve a devoir travailler avec une vitesse non standard. Il y avait un petit programme en DOS qui la gérait. Je suis entrain de lui faire un programme windows pour cette interface. Lorsque j'utilise le programme DOS, je vois les commandes entrées et sortir sur le port série via le sniffer. Donc ma carte série supporte une vitesse de 1800 bauds. En DOS, il paramètrait le port et non l'objet mscomm comme je dois le faire.
J'attend de vos nouvelles.
Merci!
Alfred Wallace
Bonjour,
Ton programme atteignait sans doute directement les registres de l'UART. Je le faisais en assembleur il y a de cela quelques décennies pour gagner en vélocité à 1200 bds ou lorsque l'on se retrouvait avec des cartes I/O en Com3..
Cela doit toujours être possible à faire, mais les OS récents empêchant l'accès direct au matériel, je pense qu'il te faut réaliser ton propre "Device driver" ou pilote en francais.
Le SDK permet de le faire, il te faudrait jeter ton oeil de ce coté là. A défaut, il existe aussi la possibilté d'utiliser un assembleur 32 bits pour migrer ton code, mais je ne sais si l'OS acceptera.
Malgré tout, je pense qu'un coup de fil au ST Microsoft pour vérifier les vitesses du composant MSCOMM serait justifier avant de chercher d'autres pistes.
Bon courage Luc
"Martin" a écrit dans le message de news:
Gilles RONSIN wrote in message
news:...
> > > A ma connaissance, 1800 bauds n'est pas un standard de communication !! > les vitesses de communications ne sont pas paramétrée pas logiciel, > mais sont gérées par le composant de sérialisation (carte série). Si > ton interface ne le gère pas, VB n'y pourra rien. > Le seul moyen à mon avis est de faire un câble spécial (par exemple qui > inverse le Tx avec RTS) et de gérer les communications en basculant > l'état de RTS. (j'ai fait ça il y a longtemps, si je retrouve quelque > chose je le poste)
Il s'agit d'une interface qui date de qq années qu'un copain a conçu. C'est pour cela que je retrouve a devoir travailler avec une vitesse non standard. Il y avait un petit programme en DOS qui la gérait. Je suis entrain de lui faire un programme windows pour cette interface. Lorsque j'utilise le programme DOS, je vois les commandes entrées et sortir sur le port série via le sniffer. Donc ma carte série supporte une vitesse de 1800 bauds. En DOS, il paramètrait le port et non l'objet mscomm comme je dois le faire.
J'attend de vos nouvelles.
Merci!
Bonjour,
Ton programme atteignait sans doute directement les registres de l'UART. Je
le faisais en assembleur il y a de cela quelques décennies pour gagner en
vélocité à 1200 bds ou lorsque l'on se retrouvait avec des cartes I/O en
Com3..
Cela doit toujours être possible à faire, mais les OS récents empêchant
l'accès direct au matériel, je pense qu'il te faut réaliser ton propre
"Device driver" ou pilote en francais.
Le SDK permet de le faire, il te faudrait jeter ton oeil de ce coté là.
A défaut, il existe aussi la possibilté d'utiliser un assembleur 32 bits
pour migrer ton code, mais je ne sais si l'OS acceptera.
Malgré tout, je pense qu'un coup de fil au ST Microsoft pour vérifier les
vitesses du composant MSCOMM serait justifier avant de chercher d'autres
pistes.
Bon courage
Luc
"Martin" <martin_edith@hotmail.com> a écrit dans le message de
news:e540f9b1.0406071045.7728a539@posting.google.com...
Gilles RONSIN <nomail@please.invalid> wrote in message
news:<ca1udo.2o8.2@d2r2.c6po>...
>
>
> A ma connaissance, 1800 bauds n'est pas un standard de communication !!
> les vitesses de communications ne sont pas paramétrée pas logiciel,
> mais sont gérées par le composant de sérialisation (carte série). Si
> ton interface ne le gère pas, VB n'y pourra rien.
> Le seul moyen à mon avis est de faire un câble spécial (par exemple qui
> inverse le Tx avec RTS) et de gérer les communications en basculant
> l'état de RTS. (j'ai fait ça il y a longtemps, si je retrouve quelque
> chose je le poste)
Il s'agit d'une interface qui date de qq années qu'un copain a conçu.
C'est pour cela que je retrouve a devoir travailler avec une vitesse
non standard.
Il y avait un petit programme en DOS qui la gérait.
Je suis entrain de lui faire un programme windows pour cette
interface.
Lorsque j'utilise le programme DOS, je vois les commandes entrées et
sortir sur le port série via le sniffer.
Donc ma carte série supporte une vitesse de 1800 bauds.
En DOS, il paramètrait le port et non l'objet mscomm comme je dois le
faire.
Ton programme atteignait sans doute directement les registres de l'UART. Je le faisais en assembleur il y a de cela quelques décennies pour gagner en vélocité à 1200 bds ou lorsque l'on se retrouvait avec des cartes I/O en Com3..
Cela doit toujours être possible à faire, mais les OS récents empêchant l'accès direct au matériel, je pense qu'il te faut réaliser ton propre "Device driver" ou pilote en francais.
Le SDK permet de le faire, il te faudrait jeter ton oeil de ce coté là. A défaut, il existe aussi la possibilté d'utiliser un assembleur 32 bits pour migrer ton code, mais je ne sais si l'OS acceptera.
Malgré tout, je pense qu'un coup de fil au ST Microsoft pour vérifier les vitesses du composant MSCOMM serait justifier avant de chercher d'autres pistes.
Bon courage Luc
"Martin" a écrit dans le message de news:
Gilles RONSIN wrote in message
news:...
> > > A ma connaissance, 1800 bauds n'est pas un standard de communication !! > les vitesses de communications ne sont pas paramétrée pas logiciel, > mais sont gérées par le composant de sérialisation (carte série). Si > ton interface ne le gère pas, VB n'y pourra rien. > Le seul moyen à mon avis est de faire un câble spécial (par exemple qui > inverse le Tx avec RTS) et de gérer les communications en basculant > l'état de RTS. (j'ai fait ça il y a longtemps, si je retrouve quelque > chose je le poste)
Il s'agit d'une interface qui date de qq années qu'un copain a conçu. C'est pour cela que je retrouve a devoir travailler avec une vitesse non standard. Il y avait un petit programme en DOS qui la gérait. Je suis entrain de lui faire un programme windows pour cette interface. Lorsque j'utilise le programme DOS, je vois les commandes entrées et sortir sur le port série via le sniffer. Donc ma carte série supporte une vitesse de 1800 bauds. En DOS, il paramètrait le port et non l'objet mscomm comme je dois le faire.