IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Balance digitale : Envoi et R�ception


Sujet :

C++Builder

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2004
    Messages
    83
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 83
    Par d�faut Balance digitale : Envoi et R�ception
    Bonjour.

    Suite � mes recherches , j'ai essay� tous les cas possibles mais malheureusement je n'ai pas aboutit � une solution.

    J'ai une Mettler Toledo (VIVA 3211) . Connect� � mon port COM1

    D'apr�s la documentation il faut envoyer une trame puis recevoir la trame.

    je ne vais pas �crire tous les codes :

    Ouverture du port
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     hCom = CreateFile(Port,
        GENERIC_READ | GENERIC_WRITE,
        0,
        NULL,
        OPEN_EXISTING,
        0,
        NULL 
        );
    D'apr�s la documentation je dois envoyer les codes suivants : (voir le fichier en pi�ce jointe)

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    sprintf(Message,"%X",0x02);
    NbOctet = StrLen(Message);
    WriteFile(hCom,Message,NbOctet,&nBytesWrite,NULL);
    Sleep(500);


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
      sprintf(Message1,"%X%X%X%X%X%X%X%X",0x40,0x31,0x30,0x30,0x30,0x31,0x0d,0x0a);
    NbOctet = StrLen(Message1);
    WriteFile(hCom,Message1,NbOctet,&nBytesWrite,NULL);
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
     
    sprintf(Message2,"%X",0x02);
    NbOctet = StrLen(Message2);
    WriteFile(hCom,Message2,NbOctet,&nBytesWrite,NULL);
    Sleep(500);

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    sprintf(Message3,"%X%X%X%X",0x31,0x30,0x0d,0xa);
    NbOctet = StrLen(Message3);
    WriteFile(hCom,Message3,NbOctet,&nBytesWrite,NULL);

    Sleep(300);

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    sprintf(Message4,"%X",0x06);
    NbOctet = StrLen(Message4);
    WriteFile(hCom,Message4,NbOctet,&nBytesWrite,NULL);

    Tout d'abord je voulais savoir si ma trame d'envoie est bien correcte ? j'ai "essay�" d'envoyer en hexad�cimal. C'est bien comme �a que je dois faire ?


    je vous remercie d'avance
    Images attach�es Images attach�es  

  2. #2
    Membre �m�rite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par d�faut
    Hello

    Si tu fais
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    sprintf(Message1,"%X%X%X%X%X%X%X%X",0x40,0x31,0x30,0x30,0x30,0x31,0x0d,0x0a);
    NbOctet = StrLen(Message1);
    WriteFile(hCom,Message1,NbOctet,&nBytesWrite,NULL);
    tu envoies la cha�ne "4031303030310d0a".

    Par contre, avec
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    sprintf(Message1,"%c%c%c%c%c%c%c%c",0x40,0x31,0x30,0x30,0x30,0x31,0x0d,0x0a);
    NbOctet = StrLen(Message1);
    WriteFile(hCom,Message1,NbOctet,&nBytesWrite,NULL);
    tu envoies "@10001"+ CR+LF, et �a devrait mieux marcher.

    Tu peux m�me faire
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    AnsiString toto = "@10001\r\n";
    WriteFile(hCom,toto.c_str(),toto.Length(),&nBytesWrite,NULL);
    voire m�me
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    AnsiString code = "1001";
    AnsiString toto;
    toto.sprintf("@%s\r\n", code.c_str());
    WriteFile(hCom,toto.c_str(),toto.Length(),&nBytesWrite,NULL);
    Bon courage

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2004
    Messages
    83
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 83
    Par d�faut
    Merci totoche

    Une chose faite..

    et pour recevoir une trame est-ce bien
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    ReadFile(hCom,&buf,1,&nblu,NULL);
    ?

    Si oui, pourquoi mon c++ reste bloqu� sur readfile ?

  4. #4
    Membre confirm�
    Profil pro
    �tudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par d�faut
    �a me semble la bonne fonction :


    http://msdn.microsoft.com/en-us/libr...67(VS.85).aspx

    Je regarde �a un peu plus.

    (D�sol� de mon manque de connaissance, mais �tant donn� que je vais avoir � faire un projet similaire, �a m'int�resse)

    ciao

    antoine

  5. #5
    Membre confirm�
    Profil pro
    �tudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par d�faut
    Je me greffe un peu ici � votre probl�me afin de m'�duquer un peu...

    Lorsque vous dites Com1, il s'agit physiquement de quel type de connection? Connection du genre des anciennes imprimantes? Il n'y a pas de relation entre Com et la prise physique, c'est-�-dire que c'est g�rer par l'ordi, il associe COM1 � ce qu'il voudra bien (� condition que l'on soit au courant que tel connection sur l'ordinateur correspond au COM1, tel autre au COM2, etc.)?

    J'avoue que j'ai l'air stupid. Avant de commencer � lire :

    http://cpp.developpez.com/faq/bcb/?page=systemeports

    Je croyais que le COM1 (ainsi que le 2 et le 3) �taient de type "connection vienne imprimante", mais je me suis pos� la question : mais quelle est la diff�rence entre le port S�rie et le port parall�le (je sais que s�rie communique en s�rie et parall�le...) d'un point de vue physique de la prise.

    merci,

    antoine

  6. #6
    Membre �clair�
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activit� : Consultant technique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par d�faut
    Les prises de type COM sont des prises de type DB9. Les modems interne utilise des ports COM.
    C'est une liaison RS232 (une ligne de r�ception et une ligne d'envoie et qu'elle ligne d'�tat) avec un voltage +12V ou -12V (donc une diff�rence de 24V entre un 1 et un 0). Ce qui permet d'avoir des c�bles de liaison assez long. Les donn�es sont envoy� en s�rie.

    Port imprimante, c'est le port parall�le (DB25) fournissant 1 fils par bit en 0/5V.
    La puissance disponible est moindre et la longuer du c�ble est limit� (5m il me semble). Il faudrait v�rifier ces infos sur le DB25, j'utilise toujours le RS232. Le RS232 est tr�s utilis� sur les p�riph�riques r�seau � des voltage moindre (0/5v ou 0/3v).

    Le num�ro du port COM est g�n�ralement configurable dans le gestionnaire de p�riph�rique de windows. La plupart des drivers permettent de changer le N� du port COM.

    Pour le g�rer, vous avez un composant tout fait qui s'appel COMPORT.

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2004
    Messages
    83
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 83
    Par d�faut
    Bonjour tout le monde..

    j'ai r�solu mon probl�me.

    Tout d'abord ma balance est configur�e sur le protocole 8217 .
    D'apr�s ce protocole (voir le manuel) , Appuyer sur la touche W donne le poids .
    A titre compl�mentaire, Mon pc n'a pas de port COM. J'utilise un convertisseur USB->COM.

    Malheureusement, suite � des manipulations (C++, hyperterminal) �a n'a pas donn� de r�sultat. Finalement , j'ai trouv� l'astuce. ! Il faut inverser le fil 2 et 3 � l'int�rieur du c�ble. J'ai donc fait un cable o� les deux fils sont permut�s.

    Dans le hyperterminal : et dans la configuration du port COm, il faut mettre les options suivantes :

    Bauds: 9600
    Flux mat�riel : aucun
    Parit� : pair
    Bit d'arr�t : 7


    Dans Hyperterminal , j'ai tap� W et ce dernier m'a donn� comme r�ponse le poids affich� � l'�cran !. Youppie.

    Et l�, j'ai fais un

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    WriteFile(hCom,"W",1,&nBytesWrite,NULL);
    Ensuite un sleep de 500

    Puis un read
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    ReadFile(hCom,&buf,7,&nblu,NULL);
    La balance renvoi 7 caract�res. X00.000
    Il suffit de lire les 6 derni�res caract�res pour lire le poids

    H�l�s , encore un probl�me... Quand on �teint le PC , et la balance et qu'on les rallume, � la ligne ReadFile, le programme se bloque !
    Il faut utiliser Hyperterminal, ensuite ex�cuter l'application qu'on d�veloppe.

    Bizarre, bizarre... je me suis pench� alors sur la solution avec TComPort.
    La version 4.0 beta �videmment, je l'ai install� avec beaucoup de difficult� mais j'ai r�ussi.

    Ensuite, j'ai simplifi� les choses avec TComPort...
    Dans la propri�t� o� il y a la r�ception des paquets, il ne faut pas oublier de mettre un sleep de 200-300

    Voil�. Avec tcomport , aucun blocage � la lecture ni � l'�criture. Tout va � merveille

    S'il faut d'autres infos, n'h�sitez pas

    bien � vous,

  8. #8
    Membre confirm�
    Profil pro
    �tudiant
    Inscrit en
    Novembre 2008
    Messages
    108
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par d�faut
    Wow,

    On voit qu'il y a du travail la dessous.

    Merci pour les infos!

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [Audio] Envoi et r�ception de flux audio avec Java Sound
    Par djanat22 dans le forum Multim�dia
    R�ponses: 3
    Dernier message: 24/01/2014, 10h38
  2. Envoi et r�ception de mails avec le framework 2.0
    Par abdallah2007 dans le forum ASP.NET
    R�ponses: 13
    Dernier message: 26/06/2008, 17h35
  3. Envoi et r�ception de donn�es : Communication Temps R�el
    Par mehdi_862000 dans le forum VC++ .NET
    R�ponses: 8
    Dernier message: 26/05/2008, 14h14
  4. tutoriel de l'envoi et r�ception des emails
    Par ouadie99 dans le forum VB 6 et ant�rieur
    R�ponses: 1
    Dernier message: 01/12/2006, 23h48
  5. R�ponses: 8
    Dernier message: 20/03/2006, 14h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo