OVH Cloud OVH Cloud

Communication RS232

9 réponses
Avatar
JLuc
Bonjour les lecteurs,
Eh, oui !
Je suis toujours sur mon application de communication avec des machines
via le port RS232. Et devinez quoi ? ...
J'y arrive toujours pas :-@
J'ai pu récuperer un portable avec une sortie série (chose devenant
rare de nos jours, voir introuvable :/)
Dessus est installer Win 2K.
J'ai remis mon début d'appli pour pouvoir tester, et je me rend compte
que çà ne marche pas mieux. Pour des tests, j'ai aussi installer
l'appli que l'on utilise actuellement (une CFAO) mais n'est pas dédiée
à cette utilisation (normalement). Et bien, devinez quoi ? elle ne
fonctionne pas non plu :-[ !!!!
Pourtant c'est cette application dont on se serre quotidiennement et
avec les mêmes machines et les mêmes cables.
Donc ma question serait : y a t'il quelque chose dans le réglage des
ports COM, qui ne serait soulever à aucun endroit mais qui serait ULTRA
nécessaire pour pouvoir communiquer ?
Donnez moi un début de piste avant que je devienne noeud-noeud :-?
Merci pour vos reponses et pour avoir pris le temps de lire ;-)

--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-\O

9 réponses

Avatar
musecyan
On 13 fév, 19:05, JLuc wrote:
Bonjour les lecteurs,
Eh, oui !
Je suis toujours sur mon application de communication avec des machines
via le port RS232. Et devinez quoi ? ...
J'y arrive toujours pas :-@
J'ai pu récuperer un portable avec une sortie série (chose devenant
rare de nos jours, voir introuvable :/)
Dessus est installer Win 2K.
J'ai remis mon début d'appli pour pouvoir tester, et je me rend compte
que çà ne marche pas mieux. Pour des tests, j'ai aussi installer
l'appli que l'on utilise actuellement (une CFAO) mais n'est pas dédiée
à cette utilisation (normalement). Et bien, devinez quoi ? elle ne
fonctionne pas non plu :-[ !!!!
Pourtant c'est cette application dont on se serre quotidiennement et
avec les mêmes machines et les mêmes cables.
Donc ma question serait : y a t'il quelque chose dans le réglage des
ports COM, qui ne serait soulever à aucun endroit mais qui serait ULTRA
nécessaire pour pouvoir communiquer ?
Donnez moi un début de piste avant que je devienne noeud-noeud :-?
Merci pour vos reponses et pour avoir pris le temps de lire ;-)

--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O



alors si tu veux juste un indice en voila un
" activex (MSCOMM.ocx)"
voila bonne journee
Avatar
JLuc
Le 14/02/2007, a supposé :
alors si tu veux juste un indice en voila un
" activex (MSCOMM.ocx)"
voila bonne journee



Salut musecyan,
C'est pas un indice que je veux, c'est arriver à faire tourner mon
appli qui utilise MSCOMM32.OCX
A la boite j'ai une CFAO avec un module de communication dont je me
sers pour faire mes liaisons avec les machines (envoi/reception de
textes en code iso (code iso : langage reconnu par la machine, mais
c'est du texte))
Sur le Pc ou elle est installée, çà marche bien. Sur le portable, çà ne
marche pas :/.
Mais je pense qu'avec les essais pour mon appli, j'ai du balancer
quelque chose au port com qui fait que maintenant, çà m...e :'( même
avec la CFAO.
Le problème, c'est que je voudrais déployer une appli à plusieurs
endroits de l'atelier pour faire cette communication et, pour utiliser
la CFAO, il faudrait autant de licences que de Pc. A 22 ou 23000 ¤ la
licence, je te laisse imaginer...

--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O
Avatar
Jacques93
Bonjour JLuc,
JLuc a écrit :
Le 14/02/2007, a supposé :
alors si tu veux juste un indice en voila un
" activex (MSCOMM.ocx)"
voila bonne journee



Salut musecyan,
C'est pas un indice que je veux, c'est arriver à faire tourner mon appli
qui utilise MSCOMM32.OCX
A la boite j'ai une CFAO avec un module de communication dont je me
sers pour faire mes liaisons avec les machines (envoi/reception de
textes en code iso (code iso : langage reconnu par la machine, mais
c'est du texte))
Sur le Pc ou elle est installée, çà marche bien. Sur le portable, çà ne
marche pas :/.
Mais je pense qu'avec les essais pour mon appli, j'ai du balancer
quelque chose au port com qui fait que maintenant, çà m...e :'( même
avec la CFAO.
Le problème, c'est que je voudrais déployer une appli à plusieurs
endroits de l'atelier pour faire cette communication et, pour utiliser
la CFAO, il faudrait autant de licences que de Pc. A 22 ou 23000 ¤ la
licence, je te laisse imaginer...




Tu sembles avoir fait pas mal d'essais, je ne sais donc pas si ma
proposition a un sens. As tu la possibilité de tester avec un autre
périphérique (un vieux Modem RTC par exemple), et en te connectant avec
HyperTerminal (Hypertrm.exe) sur le port Com de ton portable (Attention,
il faut le bon câble, par obligatoirement celui que tu utilises avec ton
appareil, en principe les modems RTC sont configurés en DCE (Data
Communication Equipmment) et les périphériques (Terminal, imprimantes)
en DTE (Data Terminal Equipment). Il existe(existait ?) des boîtiers
convertisseurs Male/Femelle, 9 / 25 broches, DCE /DTE.

Liste des commandes :

http://www.peabird.com/commandes.html

par exemple
AT
OK
ATE1 ' Echo local
OK
ATH ' Raccrocher
OK
ATDT12345678 ' Composer

A la limite, peu importe que le modem te réponde OK ou ERROR, le
principal est qu'il réponde. Cela prouvera le bon fonctionnement de ton
port Com.

Si cela te répond du charabia, cela peut être lié au paramètrage
Vitesse/Bits par caractères/Bit de parité/Xon-Xoff, etc...

--
Cordialement,

Jacques.
Avatar
JLuc
Désolé d'avoir mis tant de temps pour répondre, mais j'ai eu une grippe
qui m'a cloué au lit :/

Hélas, je n'ai pas cette possibilité.
Voila les réglages que je mets au niveau du port COM :

Private Sub ReglageComm()
With MSComm1
If .PortOpen = True Then
.PortOpen = False
End If
.InBufferCount = 0 '-Vider le buffer
.RTSEnable = True 'Mieux pour le port COM ??
.InputLen = 0 'Avec 0, lecture totale du buffer
lors de Input
.RThreshold = 1
.SThreshold = 1 '-Définit/Renvoit le Nbres minimal de
caractères permis à l'émission
.InBufferSize = 1024
.OutBufferSize = 1024
.CommPort = Machines(ChoixMachine).Port + 1
.Handshaking = THandshake(Machines(ChoixMachine).Handshake)
.Settings = Status.Panels("Settings").Text
End With
End Sub

Je sais pas si tout est bon, surtout au niveau des propriétés :
RTSEnable
RThreshold
SThreshold
Car j'ai pas réellement compris à quoi elles servaient. Il faut que je
fasse d'autres tests en les mettant en commentaire. Je vais donc
déinstaller le port COM et le réinstaller pour avoir un port COM
standard sans modifications.
Si tu as d'autres propositions, je suis preneur


Après mure réflexion, Jacques93 a écrit :
Tu sembles avoir fait pas mal d'essais, je ne sais donc pas si ma proposition
a un sens. As tu la possibilité de tester avec un autre périphérique (un
vieux Modem RTC par exemple), et en te connectant avec HyperTerminal
(Hypertrm.exe) sur le port Com de ton portable (Attention, il faut le bon
câble, par obligatoirement celui que tu utilises avec ton appareil, en
principe les modems RTC sont configurés en DCE (Data Communication
Equipmment) et les périphériques (Terminal, imprimantes) en DTE (Data
Terminal Equipment). Il existe(existait ?) des boîtiers convertisseurs
Male/Femelle, 9 / 25 broches, DCE /DTE.



--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O
Avatar
Jacques93
Bonjour JLuc,
JLuc a écrit :
Désolé d'avoir mis tant de temps pour répondre, mais j'ai eu une grippe
qui m'a cloué au lit :/




Je te souhaite un prompt rétablissement.

Hélas, je n'ai pas cette possibilité.
Voila les réglages que je mets au niveau du port COM :

Private Sub ReglageComm()
With MSComm1
If .PortOpen = True Then
.PortOpen = False
End If
.InBufferCount = 0 '-Vider le buffer
.RTSEnable = True 'Mieux pour le port COM ??
.InputLen = 0 'Avec 0, lecture totale du buffer lors
de Input
.RThreshold = 1
.SThreshold = 1 '-Définit/Renvoit le Nbres minimal de
caractères permis à l'émission
.InBufferSize = 1024
.OutBufferSize = 1024
.CommPort = Machines(ChoixMachine).Port + 1
.Handshaking = THandshake(Machines(ChoixMachine).Handshake)
.Settings = Status.Panels("Settings").Text
End With
End Sub

Je sais pas si tout est bon, surtout au niveau des propriétés :
RTSEnable
RThreshold
SThreshold
Car j'ai pas réellement compris à quoi elles servaient. Il faut que je
fasse d'autres tests en les mettant en commentaire. Je vais donc
déinstaller le port COM et le réinstaller pour avoir un port COM
standard sans modifications.
Si tu as d'autres propositions, je suis preneur




Je ne suis pas du tout spécialiste du contrôle MsComm32.ocx de VB6 que
je n'ai jamais utilisé. J'ai par contre pas mal travaillé, mais ça date,
sur les contrôleurs série (8250, 16450) :

http://dictionnaire.phpmyvisites.net/definition-8250-6358.htm

pour des programmes d'émulation de terminal ou de transfert de fichiers
(Xmodem, Ymodem, etc...), en C et en assembleur.

Je penses qu'à partir du moment où tu connais le "langage" utilisé par
ton appareil, tu peux communiquer avec lui à travers HyperTerminal
(Hypertrm.exe, successeur de Terminal.exe de Windows 3.x) . Cela permet
déjà de voir si le port Com, le câblage etc... est opérationnel.

L'exemple que j'indiquai avec un modem est pratique dans la mesure ou le
protocole Hayes était très répandu, et quand le modem est externe et
dispose de voyants, on "voit" se qui se passe.

Voici un petit récapitulatif des différentes connexions :

http://www.connectworld.net/rs232.html

Mais en fait, très souvent, 3 fils suffisent :

Transmit Data (TX)
Receive Data (RX)
Ground (GND)

Ensuite tout dépend du matériel (Modem, Imprimante ...), et du protocole
(HandShaking) :

Xon/Xoff (Caractères de contrôle sur les lignes TX et RX)

ou

CTS/RTS (Clear To Send / Request To Send)

qui eux passent par les broches appropriées du câble.

J'en déduirai donc que la propriété RTSEnable, n'est utile que si la
propriété Hanshaking, est comRTS ou comRTSXOnXOff

Les propriétés :

RThreshold
SThreshold

indiquent quand à elle à partir de combien de caractères l'événement
OnComm va être générer avec respectivement :

Mscomm1.CommEvent = comEvReceive
et
MsComm1.CommEvent = comEvSend

comme précisé dans l'aide :
Private Sub MSComm_OnComm ()
Select Case MSComm1.CommEvent
' Handle each event or error by placing
' code below each case statement

' Errors
Case comEventBreak ' A Break was received.
Case comEventFrame ' Framing Error
Case comEventOverrun ' Data Lost.
Case comEventRxOver ' Receive buffer overflow.
Case comEventRxParity ' Parity Error.
Case comEventTxFull ' Transmit buffer full.
Case comEventDCB ' Unexpected error retrieving DCB]

' Events
Case comEvCD ' Change in the CD line.
Case comEvCTS ' Change in the CTS line.
Case comEvDSR ' Change in the DSR line.
Case comEvRing ' Change in the Ring Indicator.
Case comEvReceive ' Received RThreshold # of

' chars.
Case comEvSend ' There are SThreshold number of
' characters in the transmit
' buffer.
Case comEvEof ' An EOF charater was found in
' the input stream
End Select
End Sub


--
Cordialement,

Jacques.
Avatar
JLuc
Jacques93 a formulé la demande :
Bonjour JLuc,
JLuc a écrit :
Désolé d'avoir mis tant de temps pour répondre, mais j'ai eu une grippe qui
m'a cloué au lit :/




Je te souhaite un prompt rétablissement.


Merci, heureusement, je vais mieux ;-)

Hélas, je n'ai pas cette possibilité.
Voila les réglages que je mets au niveau du port COM :

Private Sub ReglageComm()
With MSComm1
If .PortOpen = True Then
.PortOpen = False
End If
.InBufferCount = 0 '-Vider le buffer
.RTSEnable = True 'Mieux pour le port COM ??
.InputLen = 0 'Avec 0, lecture totale du buffer lors de
Input
.RThreshold = 1
.SThreshold = 1 '-Définit/Renvoit le Nbres minimal de
caractères permis à l'émission
.InBufferSize = 1024
.OutBufferSize = 1024
.CommPort = Machines(ChoixMachine).Port + 1
.Handshaking = THandshake(Machines(ChoixMachine).Handshake)
.Settings = Status.Panels("Settings").Text
End With
End Sub

Je sais pas si tout est bon, surtout au niveau des propriétés :
RTSEnable
RThreshold
SThreshold
Car j'ai pas réellement compris à quoi elles servaient. Il faut que je
fasse d'autres tests en les mettant en commentaire. Je vais donc
déinstaller le port COM et le réinstaller pour avoir un port COM standard
sans modifications.
Si tu as d'autres propositions, je suis preneur




Je ne suis pas du tout spécialiste du contrôle MsComm32.ocx de VB6 que je
n'ai jamais utilisé. J'ai par contre pas mal travaillé, mais ça date, sur les
contrôleurs série (8250, 16450) :

http://dictionnaire.phpmyvisites.net/definition-8250-6358.htm

pour des programmes d'émulation de terminal ou de transfert de fichiers
(Xmodem, Ymodem, etc...), en C et en assembleur.

Je penses qu'à partir du moment où tu connais le "langage" utilisé par ton
appareil, tu peux communiquer avec lui à travers HyperTerminal (Hypertrm.exe,
successeur de Terminal.exe de Windows 3.x) . Cela permet déjà de voir si le
port Com, le câblage etc... est opérationnel.


J'ai aussi testé avec hyperterminal, même résultat !
Pour le cablage, il ne peut être que bon, puique je l'utilise tous les
jours avec la CFAO


L'exemple que j'indiquai avec un modem est pratique dans la mesure ou le
protocole Hayes était très répandu, et quand le modem est externe et dispose
de voyants, on "voit" se qui se passe.

Voici un petit récapitulatif des différentes connexions :

http://www.connectworld.net/rs232.html

Mais en fait, très souvent, 3 fils suffisent :


C'est comme ça que sont cablés mes lignes. Plus des ponts sur les
controles "Data set ready" et "Data terminal ready"

Transmit Data (TX)
Receive Data (RX)
Ground (GND)

Ensuite tout dépend du matériel (Modem, Imprimante ...), et du protocole
(HandShaking) :

Xon/Xoff (Caractères de contrôle sur les lignes TX et RX)

ou

CTS/RTS (Clear To Send / Request To Send)

qui eux passent par les broches appropriées du câble.


Le gros soucis, c'est que la même application (la CFAO) qui marche sur
un Pc ne marche pas sur le portable ! Utilisation des mêmes réglages et
des mêmes cables (j'ai pris le cable connecter sur le COM1 du Pc pour
le connecter sur le COM1 du portable). C'est pour çà que çà m'affole un
peu, aurais-je modifier quelque chose sur le port COM avec mon
application qu'il ne fallait pas ? Si oui, je vois pas quoi !


J'en déduirai donc que la propriété RTSEnable, n'est utile que si la
propriété Hanshaking, est comRTS ou comRTSXOnXOff

Les propriétés :

RThreshold
SThreshold

indiquent quand à elle à partir de combien de caractères l'événement OnComm
va être générer avec respectivement :

Mscomm1.CommEvent = comEvReceive
et
MsComm1.CommEvent = comEvSend


Pour l'instant, je n'utilise que cette dernière : réception sur le
portable.
Ce qui me parait étrange, c'est que lorsque j'envois un programme (donc
du texte) depuis la machine, elle envoit quelques caractères et
s'arrête. On dirais qu'elle attend que le portable libére son tampon
pour pouvoir continuer. Elle fait la même chose avec la CFAO qui, elle
devrait marcher :-? (puisque que, hors le parametrage, je ne peux pas
intervenir) Voici d'ailleur une image des modifications possibles :
http://cjoint.com/?crmNTi81ac


comme précisé dans l'aide :
Private Sub MSComm_OnComm ()
Select Case MSComm1.CommEvent
' Handle each event or error by placing
' code below each case statement

' Errors
Case comEventBreak ' A Break was received.
Case comEventFrame ' Framing Error
Case comEventOverrun ' Data Lost.
Case comEventRxOver ' Receive buffer overflow.
Case comEventRxParity ' Parity Error.
Case comEventTxFull ' Transmit buffer full.
Case comEventDCB ' Unexpected error retrieving DCB]

' Events
Case comEvCD ' Change in the CD line.
Case comEvCTS ' Change in the CTS line.
Case comEvDSR ' Change in the DSR line.
Case comEvRing ' Change in the Ring Indicator.
Case comEvReceive ' Received RThreshold # of

' chars.
Case comEvSend ' There are SThreshold number of
' characters in the transmit
' buffer.
Case comEvEof ' An EOF charater was found in
' the input stream
End Select
End Sub


Je vais refaire des tests lundi, j'ai déinstallé le port COM et ai
redemmarer le portable qui me l'a réinstallé tout seul (j'espère qu'il
n'a pas concerver les paramètrages d'avant). Je testerais dans l'ordre:
- Hyperterminal
- La CFAO
- Mon appli en paramètrant le mini (le port et les settings)
On verra bien. Je te tiens au courrant lundi soir

Merci encore de te pencher sur mon problème

--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O
Avatar
JLuc
Salut Jacques93,
Je crois avoir fais une avancé dans la résolution de mon soucis :
Comme je te l'ai dis, j'ai déinstaller le port COM et il s'est
réinstallé tout seul. J'ai rebranché le portable avec mon Pc pour
refaire des essais via hyperterminal.
Du portable, je me met en capture d'un texte et j'envois de mon PC :
rien ne se passe.
Du coup, j'ai essayé dans l'autre sens (ce que je n'avais pas essayé)
et là, une erreur : "Impossible d'ouvrir COM3.7 19:04:11 OM1."
Saurais tu d'ou vient le problème ?
Merci d'avance

--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O
Avatar
JLuc
Erreur, mauvaise interpretation des donnees transmises qui
s'affichaient toutes sur la même ligne

Voila le texte exacte :
---debut copie---
jeudi 8 fBqWJrier 2007 10:41:47
Aucun modem n'a BqUqJtrouvBqJsur COM1.
Impossible d'ouvrir COM3.

vendredi 16 fBqWJrier 2007 19:04:11
Impossible d'ouvrir COM3.
---fin copie---

Apparement, c'est en voulant envoyer le fichier ModemDet.txt dont le
contenu est :
---debut copie---

jeudi 8 février 2007 10:41:47
Aucun modem n'a été trouvé sur COM1.
Impossible d'ouvrir COM3.

vendredi 16 février 2007 19:04:11
Impossible d'ouvrir COM3.
---fin copie---


JLuc a pensé très fort :
Salut Jacques93,
Je crois avoir fais une avancé dans la résolution de mon soucis :
Comme je te l'ai dis, j'ai déinstaller le port COM et il s'est réinstallé
tout seul. J'ai rebranché le portable avec mon Pc pour refaire des essais via
hyperterminal.
Du portable, je me met en capture d'un texte et j'envois de mon PC : rien ne
se passe.
Du coup, j'ai essayé dans l'autre sens (ce que je n'avais pas essayé) et là,
une erreur : "Impossible d'ouvrir COM3.7 19:04:11 OM1."
Saurais tu d'ou vient le problème ?
Merci d'avance



--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O
Avatar
JLuc
Resalut Jacques93,
Finalement, à force de baittailler, j'ai réussi à remettre le port COM
en "état".
J'ai même pu installer un modem et celui ci fonctionne normalement.
La bonne nouvelle :
J'ai fais des essais avec hyperterminal, et çà marche
Le problème :
J'ai fais des essais avec mon appli, çà marche pas. Par contre si je
rééssaie avec hyperterminal, çà fonctionne :')
Maintenant, il faut que je me tourne vers mon appli pour découvrir ce
qui ne fonctionne pas. A mon avis, c'est l'endroit où je place le
DoEvents qui ne doit pas être bon :/. On verra çà demain
Bonne nuit

--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O