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

API, COM et SDKs Delphi Discussion :

Émuler un port COM virtuel


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Points : 69
    Points
    69
    Par défaut Émuler un port COM virtuel
    Bonjour,
    je dois faire une application qui cause avec une machine par un lien série (j'utilise un bon vieux port COM pour ça). La machine n'est pas disponible tout le temps du développement et je dois la modéliser. Du coup il faut que je fasse une autre application "simulateur" qui se comporte comme la machine. Ce simulateur doit créer un port COM virtuel afin que la bonne appli s'y connecte.
    Comment fait-on ceci?

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 271
    Points : 491
    Points
    491
    Par défaut
    Tu pourrais utiliser l'emulateur null-modem com0com c'est un project open source, un driver qui te crée un port virtuel avec qui tu peux faire tout les tests que tu veux.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Points : 69
    Points
    69
    Par défaut
    Ben j'avais bien vu ça. Mais c'est en C. Enfin s'il n'y a que ca, je vais essayer de traduire...

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 271
    Points : 491
    Points
    491
    Par défaut
    A ta place je me concentrerais plus a developper l'application et a modéliser la machine. Pour les tests, ton application travaillera sur par exemple sur COM4 et ta machine sur COM5 (COM4 et COM5 reliées virtuellement par un cable Nullmodem). Une fois tu aura ta machine en main, tu ne changera rien a ton programme a part le nom du port.

    Sinon une autre solution qui ne nécessite aucun driver, si tu possede dans ta machines de 2 Ports COM, tu les relie avec un cable Nulmodem. L'application travaillera sur un port et la machine modélisée sur l'autre.

    Il existe un ensemble de composants utilisés pour la programmation d'application pour le port série. On y trouve six composants : TComPort, TComDataPacket, TComComboBox, TComRadioGroup, TComLed, TComTerminal
    a l'adresse ComPort

    A toi de voir.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Points : 69
    Points
    69
    Par défaut
    Merci de ta réponse, j'utilise en effet ces composants. Par contre, le port com virtuel reste obligatoire, de part les specs du programme (il faudra après qu'il intercepte et complète les trames). Mais l'idée était bonne (parce que simple).

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 271
    Points : 491
    Points
    491
    Par défaut
    J'avais compris que cette virtualisation n'était nécéssaire que parce que la machine n'est pas disponible tout le temps du développement donc servirais juste pour la phase test. Explique-nous un peu les specs de ton programme.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Points : 69
    Points
    69
    Par défaut
    Le projet complet : je fais la partie comm de la machine et du PC.
    Le but dans un premier temps est de simuler la machine. Le logiciel PC (IHM et une partie du traitement) n'est pas fait par moi et est figé (il est antédiluvien), ce qui ne permet pas de faire les opérations de maintenance de la machine. Le but est donc du faire un service qui intercepte les trames de la machine, les corrige si il faut, effectue les opérations de contrôle et de maintenance de la machine et j'en passe. La machine est sur port USB, je m'occupe de tout ca. Par contre il faut que mon driver rende disponible les données sous la forme d'un port COM.

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 271
    Points : 491
    Points
    491
    Par défaut
    Donc le programme que tu veux développer se situe entre la machine et la vielle application, exact?

  9. #9
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Il existe de nombreux application type "Virtual Serial Port Driver", je pense qu'acheter un composant coutera nettement moins cher que de vouloir en programmer un !

    ce com0com semble de plus proposer des exemples de code pour une utilisation via DeviceIOControl et FileCreate... donc utilisable via TComPort !

    Sinon l'idée du Port COM4 et COM5 connecté via com0com, peut-être même utiliser en prod ?

    Tu connectes la machine sur le Port USB
    Tu connectes la "vieille application" sur le port COM4
    Tu connectes ton "proxy" sur le port COM5
    Si j'ai bien compris, tout ce qui envoyé sur 4 revient sur 5 et réciproquement ?
    Donc, ton proxy pour choper sur COM5 les trames provenant de la "vieille application" envoyées sur le COM4, ton "proxy" analyserait les trames, les altérerait au besoin, et les renverrais sur le Port USB
    Et réciproquement, ce qui arrivent sur l'USB tu l'envoie via ton "proxy" sur le Port COM5 qui renverra sur le COM4 de la "vieille application"
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 271
    Points : 491
    Points
    491
    Par défaut
    Y'a aussi l'application The HUB for communications (hub4com) qui fait partie du projet com0com.

    Ca te permet de recevoir des données et des signaux d'un port, les modifier et les envoyer vers un ou plusieurs ports et vice versa.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Points : 69
    Points
    69
    Par défaut
    C'est une bonne idée mais j'ai pas autant de ressources :/ juste un port USB je n'ai pas de port série réel.
    Je vais regarder du côté des DeviceIOCOntrol pour voir si y'a pas moyen.

  12. #12
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Citation Envoyé par DaffyDuck Voir le message
    C'est une bonne idée mais j'ai pas autant de ressources :/ juste un port USB je n'ai pas de port série réel.
    En fait, j'étais parti sur uniquement l'utilisation de Ports COM Virtuels, puisque ta machine est en USB, il ne semblait pas utile d'utiliser de vrai Port, voire pire d'occuper deux vrais ports, cela aurait été moche !
    Aucun problème COM4 et COM5 serait des Ports Virtuels créés par Com0Com (tu peux renommer CNCA0 et CNCB0 )
    J'ai rarement des machines avec plus de 2 Ports COM, souvent 3 et 4 sont des Ports COM Virtuels qui utilise un USB

    hub4com, c'est effectivement, très interessant
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Points : 69
    Points
    69
    Par défaut
    Je cherche à faire quelque chose comme ca :
    http://www.serial-port-communication...rtual-activex/

    Mais je cherche pas forcément à faire un composant activeX

    Hub4com correspond aussi, mais il faut déchiffrer du C et comprendre les mécanismes windows liés. Et moi sous Windows à part Delphi, je vole pas très haut.

  14. #14
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 271
    Points : 491
    Points
    491
    Par défaut
    Tu n'a pas a déchiffrer le programme en C, com0com est un driver open source qui te permet de créer des ports série virtuel (en couplet), ton "vieux programme" le verra comme si c'était un vrai port série (je suppose que tu peux modifier le Port de communication par défaut sur le "vieux programme" et qu'il travaille sur le port COM1)
    Commence par créer le couplet COM5<->CNCB0 et COM6<->CNCB1 (COM5,CNCB0, COM6,CNCB1 sont des noms de Ports virtuels)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    command> install 0 PortName=COM5 -
    command> install 1 PortName=COM6 -
    - Configure le port du "vieux programme" sur COM5
    Chaque fois que le "vieux programme" communiquera a travers le port virtuel COM5 tu aura le résultat sur le port virtuel CNCB0 et vise versa.

    - Ton application travaillera sur 2 composants TCOMPort, Configure le premier composant (appelons-le SerialCOMPort1) sur CNCB0 (virtuel)et le deuxième composant (appelons-le SerialCOMPort2) sur CNCB1 (virtuel) (seulement si tu compte travailler avec le simulateur, sinon pointe-le vers le port réel COM1 directement a la machine)

    Chaque fois que tu reçois une notification sur le SerialCOMPort1 ca veux dire que le "vieux programme" communique avec le Port réel COM1.Si c'est un send tu récupère le paquet tu le modifie et tu le renvois sur SerialCOMPort2 (vers la machine ou le simulateur).

    Chaque fois que tu recois une notification sur le SerialCOMPort2 ca veux dire que la machine (ou le simulateur) communique avec le Port réel COM1.Si c'est un send tu récupère le paquet tu le modifie et tu le renvois sur SerialCOMPort1 (vers le "vieux programme").

    - Configure le Composant TCOMport de ton simulateur sur le port virtuel COM6.

    Pour résumer :
    1° Cas : Mode Machine
    Vieux Programme <-> COM5 <-> CNCB0 <-> Application <-> COM1 <-> Machine
    2° Cas : Mode Simulateur
    Vieux Programme <-> COM5 <-> CNCB0 <-> Application <-> CNCB1 <-> COM6 <-> Simulateur

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 69
    Points : 69
    Points
    69
    Par défaut
    Ok, j'ai fais la manip et je suis assez satisfait du comportement.
    Par contre, on n'a fait que détourner le problème. J'aurais aimé savoir généré un port COM virtuel, ca aurait été plus stylé. Mais bon on peut pas tout avoir.
    Merci quand même

  16. #16
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 271
    Points : 491
    Points
    491
    Par défaut
    Si tu veux écrire ton propre driver et tu veux toujours rester a Delphi, il y'a le Delphi Driver Development Kit

  17. #17
    Nouveau Candidat au Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2016
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Voici un autre simulateur de port COM - Virtual Serial Port Driver (https://www.eltima.com/fr/products/vspdxp/). Le programme créé des paires de ports série virtuels connectés, ressemblant en tous points à des ports série physiques et pouvant être utilisés comme tels.

  18. #18
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par fab256 Voir le message
    Si tu veux écrire ton propre driver et tu veux toujours rester a Delphi, il y'a le Delphi Driver Development Kit
    Ca commence a être un peu vieux cette solution et pas vraiment utilisable sur les OS modernes, c'est vraiment dommage.

    J'ai moi-même voulu il y a quelque temps me pencher sur le développement de ports USB midi virtuels pour Windows 10 (l'idée était de développer une platine DJ personnalisable qui s'interface aux logiciels de DJ existant.

    En Delphi ou (C++ Builder), rien que l'idée de développer un pilote physique ou virtuel, n'est même pas réalisable : on est obligé de se tourner vers Visual c++, pas le choix.
    Qui plus est, la documentation ou les sources d'inspiration concernant l'élaboration de ports virtuels sous Windows sur internet sont quasi néantes.

    Bref, j'ai laissé tomber.

    C'est un GROS manque de Delphi/C++ Builder surement du à une main mise de Microsoft sur cet aspect de développement.
    Bidouilleuse Delphi

  19. #19
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 418
    Points : 5 816
    Points
    5 816
    Par défaut
    salut

    effectivement le linker de delphi ne le permet pas
    il existe des possibilitées de créer des drivers mais pas de façon simple

    peut aurais t'on plus de chance avec fpc ... a voir
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

Discussions similaires

  1. BLUETOOTH - Port COM virtuel bloqué
    Par rob24 dans le forum Windows
    Réponses: 0
    Dernier message: 06/01/2012, 10h25
  2. Accès port COM virtuel
    Par arbtec dans le forum C#
    Réponses: 5
    Dernier message: 29/09/2008, 14h41
  3. [W98] changer le numero port COM virtuel d'un cable usb to RS232
    Par Arnard dans le forum Windows 2000/Me/98/95
    Réponses: 2
    Dernier message: 10/06/2008, 14h22
  4. creation d'une paire de port com virtuel
    Par KnightCoder dans le forum Windows
    Réponses: 1
    Dernier message: 17/09/2007, 12h00
  5. [WD11] Création Port COM Virtuel
    Par C-Faust dans le forum WinDev
    Réponses: 2
    Dernier message: 27/07/2007, 08h02

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