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 :

Communication via USB


Sujet :

C++Builder

  1. #1
    Membre �m�rite
    Avatar de Gouyon
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 138
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 138
    Billets dans le blog
    5
    Par d�faut Communication via USB
    Bonjour

    Je dois piloter un syst�me via un port USB. Mais j'ai du mal � voir comment faire �a avec CBuilder.

    Apr�s quelques recherche j'ai vu la librairie libusb mais j'ai des soucis pour la faire tourner avec CBuilder. Voici l'erreur que j'ai � l'�dition des liens
    [ilink32 Erreur] Error: 'D:\LIBCPP\LIBUSB\MS32\STATIC\LIBUSB-1.0.LIB' contient un enregistrement OMF non valide, type 0x21 (COFF possible)

    Sinon mon port USB doit se comporter comme un port com. Je sais qu'on peut affecter un port COM � un port USB sous windows du coup je pourrais peut �tre me passer de libusb?

    Merci

  2. #2
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Responsable de compte
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par d�faut
    Salut mon Ami
    quand je vois COFF je vois Microsoft!
    ce format est incompatible avec les compilateurs Borland
    pas de souci il te suffit de recr�er la librarie avec l'outil de Borland Implib

    Cordialement
    vous trouverez mes tutoriels � l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les r�gles du forum

  3. #3
    Membre �m�rite
    Avatar de Gouyon
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 138
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 138
    Billets dans le blog
    5
    Par d�faut
    Argh je l'avais oubli� celui l�.
    Voil� la ligne de commande que j'ai faite:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ImpLib libusb.lib libusb-1.0.dll
    et �a compile maintenant.

  4. #4
    Membre tr�s actif Avatar de Argol_Medusa
    Homme Profil pro
    Ing�nieur Radiofr�quences
    Inscrit en
    Ao�t 2005
    Messages
    208
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur Radiofr�quences
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 208
    Par d�faut
    Citation Envoy� par Gouyon Voir le message
    Sinon mon port USB doit se comporter comme un port com. Je sais qu'on peut affecter un port COM � un port USB sous windows du coup je pourrais peut �tre me passer de libusb?
    Merci
    Si tu dois le faire se comporter comme un port com, apr�s l'avoir d�fini en tant que tel la premi�re �tape c'est de lire la liste des ports com disponibles dans la base de registre et mettre tout �a dans une ComboBox :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    #include <Registry.hpp>
     
    void __fastcall TForm1::ComboBox1Enter(TObject *Sender)
    {
    	  TStringList* availableComPorts;
              availableComPorts = new TStringList();
    	  TRegistry *Registry = new TRegistry(KEY_READ);
    	  AnsiString portNb ="";
     
    	  Registry->RootKey = HKEY_LOCAL_MACHINE;
    	  Registry->OpenKey("HARDWARE\\DEVICEMAP\\SERIALCOMM", false);
    	  Registry->GetValueNames(availableComPorts);
    	  for (int i(0); i < availableComPorts->Count; i++)
    	  {
    		  portNb = Registry->ReadString(availableComPorts->Strings[i]);
    		  ComboBox1->AddItem(portNb, NULL);
    	  }
    	  delete Registry;
    	  delete availableComPorts;
    }

    Apr�s on initialise le port com et on envoie les donn�es. Un exemple :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    	/*! Definir le nom du port */
    	UnicodeString ComPort = this->ComboBox1->Text;
    	static HANDLE Handle_Com=NULL;
     
    	/*! Ouvrir le com port */
    	if (Handle_Com == NULL)
    	{
    		Handle_Com = CreateFile(ComPort.w_str(),
    								 GENERIC_READ | GENERIC_WRITE,
    								 0, 0,
    								 OPEN_EXISTING,
    								 0,0);
    	  // SET THE COMM TIMEOUTS IN OUR EXAMPLE.
    	  COMMTIMEOUTS ctmoNew = {0}, ctmoOld;
    	  GetCommTimeouts(Handle_Com,&ctmoOld);
     
    	  ctmoNew.ReadTotalTimeoutConstant = 10;
    	  ctmoNew.ReadTotalTimeoutMultiplier = 0;
    	  ctmoNew.WriteTotalTimeoutMultiplier = 0;
    	  ctmoNew.WriteTotalTimeoutConstant = 0;
     
    	  SetCommTimeouts(Handle_Com, &ctmoNew);
     
    	  // SET BAUD RATE, PARITY, WORD SIZE, AND STOP BITS.
    	  // THERE ARE OTHER WAYS OF DOING SETTING THESE BUT THIS IS THE EASIEST.
    	  DCB dcbCommPort;
    	  dcbCommPort.DCBlength = sizeof(DCB);
    	  GetCommState(Handle_Com, &dcbCommPort);
    	  UnicodeString ConfigTxt = "9600,N,8,1";
    	  BuildCommDCB(ConfigTxt.w_str(), &dcbCommPort);
    	  SetCommState(Handle_Com, &dcbCommPort);
     
    	  /*! Balancer un message d'erreur si ouverture du port com impossible */
    	  if(Handle_Com == INVALID_HANDLE_VALUE)
    	  {
    			Memo1->Lines->Add("Impossible d'ouvrir le port COM");
    			Handle_Com = NULL;
    	  }
    	  else
    	  {
    			Memo1->Lines->Add("Port COM ouvert avec succes");
     
    			/* Activer la RS232 */
    			this->Memo1->Lines->Add("Activation RS232");
    				/* Envoyer une trame et regarder si elle revient */
    			bool Identique1 = EnvoyerTrameSurRS232EtRecupererLaReponse(Handle_Com);
     
     
     
             	if (Identique1==true)
    			{
    				Label1->Color=clLime;
    				Label1->Caption="OK";
    			}
    			else
    			{
    				Label1->Color=clRed;
    				Label1->Caption="KO";
    			}
     
     
     
    			Sleep(500);
     
    			/* Fermer le port COM */
    			PurgeComm(Handle_Com, PURGE_RXABORT);
    			CloseHandle(Handle_Com);
    			Handle_Com=NULL;
    			Memo1->Lines->Add("Port COM1 fermé avec succes");
    	  }
    	}
    	else
    	{
    			// fermer le port com
    			Memo1->Lines->Add("Erreur : Port COM1 déja ouvert");
    			PurgeComm(Handle_Com, PURGE_RXABORT);
    			CloseHandle(Handle_Com);
    			Handle_Com=NULL;
    	}
    }

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    bool TForm1::EnvoyerTrameSurRS232EtRecupererLaReponse(HANDLE Handle_Com1)
    {
    	/* Envoyer un message sur le port COM */
    	char Message[34]="Pleine puissance Monsieur Solo !!\0";
    	unsigned long int writtenbytes=0;
    	WriteFile(Handle_Com1, &Message[0], 34, &writtenbytes, NULL);
    	this->Memo1->Lines->Add("Sending message");
    	/* Recevoir la reponse */
    	Sleep(500);
    	this->Memo1->Lines->Add("Receiving message");
    	char Rx_Buffer[100];
    	memset(&Rx_Buffer[0],0,100);
    	unsigned long NbOctetsLus=0;
    	ReadFile(Handle_Com1,&Rx_Buffer[0],  34, &NbOctetsLus,  NULL);
    	AnsiString tst1=Rx_Buffer;
    	AnsiString tst2=Message;
     
    	this->Memo1->Lines->Add(tst1);
     
    	bool Returned_Value=false;
    	if (tst1 == tst2)
    		Returned_Value=true;
    	return(Returned_Value);
    }

    Bon c'est � adapter en fonction de ton besoin, mais c'est un exemple de base fonctionnel qui devrait te permettre de commencer.

    P.S : d�sol� pour l'indentation pourrie, c'est le copier / coller qui a fait des trucs bizarres, c'est bien indent� normalement

  5. #5
    Membre �m�rite
    Avatar de Gouyon
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 138
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 61
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 138
    Billets dans le blog
    5
    Par d�faut
    Merci pour toutes ces informations. Et pas de soucis pour l'indentation "pourrie" un petit Ctrl D arrangera tout �a

  6. #6
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Responsable de compte
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par d�faut
    Salut
    il existe �galement d'excellent composants qui simplifient consid�rablement la programmation des PortCom
    par exemple le composant TComPort
    plusieurs tuto sur ce site
    https://petit.developpez.com/serie/cours_tcomport/ et
    https://trote.developpez.com/tutorie...ar-rad-studio/

    cdlt
    vous trouverez mes tutoriels � l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les r�gles du forum

  7. #7
    Membre tr�s actif Avatar de Argol_Medusa
    Homme Profil pro
    Ing�nieur Radiofr�quences
    Inscrit en
    Ao�t 2005
    Messages
    208
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur Radiofr�quences
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 208
    Par d�faut
    Merci pour l'astuce du CTRL-D

    Citation Envoy� par DjmSoftware Voir le message
    Salut
    il existe �galement d'excellent composants qui simplifient consid�rablement la programmation des PortCom
    par exemple le composant TComPort
    Oui c'est ce que j'utilisais avant, et puis j'ai migr� de 2010 � XE3, puis de XE3 � rio 10.2 et l� tu te retrouves avec un TCOMPort qui ne tourne que sur une version et pas sur les 2 � la fois, oblig� de passer sur une image viturelle, et puis apr�s il faut bien reinstaller le composant d�s que tu changes de PC pour un autre, bref, j'ai laiss� tomb� (parce que j'avais pas que le TComPort, j'avais aussi le TJoystick et tout un tas de composants dans le genre.

    Dommage parce qu'effectivement c'est sympa aussi le TComPort, mais si tu utilises plusieurs versions du C++ builder, ou plusieurs machines de d�veloppement diff�rentes, c'est chiant � la longue.
    Par contre si tu utilises une version et que tu la gardes des ann�es et des ann�es, c'est une bonne solution oui.

  8. #8
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Responsable de compte
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par d�faut
    Salut
    je ne peux que te conseiller un des meilleurs pack gratuits de composants sp�cialis�s dans le traitement de la comm
    AsyncPro disponible gratuitement dans le gestionnaire de Package Getit
    cordialement

    extrait:
    TurboPack AsyncPro
    Updated for 10.3 Rio / VER330 / PKG 260
    You can still access 10.2 Tokyo and 10.1 Berlin too.
    Table of contents
    Introduction
    Package names
    Installation

    1. Introduction
    Async Professional is a comprehensive communications toolkit for Embarcadero Delphi and C++Builder. It provides direct access to serial ports, TAPI, and the Microsoft Speech API. It supports faxing, terminal emulation, VOIP, & more.
    This is a source-only release of TurboPack AsyncPro. It includes designtime and runtime packages for Delphi and C++Builder and supports Win32. Win64 support is experimental!

    Package names
    TurboPack AsyncPro package names have the following form:
    Delphi
    AsyncProDR.bpl (Delphi Runtime)
    AsyncProDD.bpl (Delphi Designtime)
    C++Builder
    AsyncProCR.bpl (C++Builder Runtime)
    AsyncProCD.bpl (C++Builder Designtime)

    Installation
    AsyncPro is available via the GetIt Package Manager where you can quickly and easily install and uninstall it.
    To manually install TurboPack AsyncPro into your IDE, take the following steps:
    Unzip the release files into a directory (e.g., d:\AsyncPro).
    Start RAD Studio.
    Add the source subdirectory (e.g., d:\AsyncPro\source) to the IDE's library path. For CBuilder, add the hpp subdirectory (e.g., d:\AsyncPro\source\hpp\Win32\Debug) to the IDE's system include path.
    Open & compile the runtime package specific to the IDE being used.
    Open & install the designtime package specific to the IDE being used. The IDE should notify you the components have been installed.
    vous trouverez mes tutoriels � l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les r�gles du forum

Discussions similaires

  1. communication via usb
    Par loicog dans le forum API standards et tierces
    R�ponses: 1
    Dernier message: 22/05/2013, 14h36
  2. Communication via un port USB
    Par insane1 dans le forum C#
    R�ponses: 3
    Dernier message: 22/02/2011, 23h05
  3. R�ponses: 0
    Dernier message: 27/03/2010, 13h16
  4. Communication de donn�es via USB
    Par nico57600 dans le forum Langage
    R�ponses: 0
    Dernier message: 10/02/2010, 18h45
  5. communication via USB
    Par archer dans le forum C++
    R�ponses: 0
    Dernier message: 10/01/2008, 10h59

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