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

Composants VCL Delphi Discussion :

[Tcomport] et un petit problème de configuration


Sujet :

Composants VCL Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 075
    Points : 41 028
    Points
    41 028
    Billets dans le blog
    62
    Par défaut [Tcomport] et un petit problème de configuration
    Bonjour,

    Voila la configuration de mon port Com
    Baudrate : 19200
    Data : 8
    Parity : none
    StopBit : 1
    HandShake : DTR/DSR // soit hardware
    si j'ai bien sur facilement pu mettre les propriétés du Tcomport
    BaudRate = br19200
    DataBits = btEight
    Parity.Bits = prnone
    StopBits = sbOneStopBit
    je nage lamentablement pour la partie FlowControl
    le pire c'est que si je passe par Comport1.ShowSetupDialog (ou il y a juste a indiquer Hardware) ça baigne (du moins en partie)

    Questions subsidiaires
    - Comment me dépatouiller avec l'unicode delphi et le 'j'accepte que le ANSI du port' ?
    - Vaut-il mieux utiliser Comport.WriteStr ou Comport.WriteAsyncStr ?

    Tout bout de code pour envoi vers une imprimante ticket/chéque (partie chèque plus exactement) sera bienvenu . J'ai déjà la solution via les drivers Windows de l'imprimante (EPSON TM H6000III pour les curieux),
    mais (puriste ou 'nom d'oiseau') j'aimerais m’affranchir des drivers et envoyer directement les commandes ESC/POS
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 484
    Points : 24 959
    Points
    24 959
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    je nage lamentablement pour la partie FlowControl
    Qu'appeles-tu FlowControl ?

    J'ignore si tu en as la possibilité, j'ai vite fait développer un outil de débogage pour une collègue travaillant sur micro-proc 16bits, nous fabriquons des cartes électroniques, ma collègue s'occupe du soft intégré !
    C'était un protocole type BSC (Binary Synchronous Communications) avec le coup classique des STX/ETX + LCR

    Mon programme simule celui d'un partenaire du projet qui devrait utiliser nos cartes electroniques

    Pour la réception, le TComDataPacket se prête parfaitement à cela, il s'occupe de la réception de trame entière délimité par STX \ ETX

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
          TComDataPacket *TmpComDataPacket = new TComDataPacket(FComPort);
          TmpComDataPacket->ComPort = FComPort;
          TmpComDataPacket->StartString = (char)02; // STX
          TmpComDataPacket->StopString = (char)0x0d; // ETX
          TmpComDataPacket->IncludeStrings = true;
          TmpComDataPacket->OnPacket = ComDataPacketEventHandler;

    Chaque trame envoyée par mon programme et confirmer\infirmer par le destinataire par un ACK\NAK

    En Unicode, l'event OnPacket est un TComStrEvent, donc une horreur justement sur l'utilisation Unicode !
    En fait, à la lecture du code du TComPort, il faut uniquement prendre en compte l'octet de poids faible de l'unicode, du coup, si l'on gérait un binaire, il faut d'abord recopier 1 octet sur 2 de la chaine Unicode vers un RawByteString ou un PByte ... selon ses habitudes !

    Si j'avais du utiliser TComport en XE2, je crois que j'aurais utiliser le OnRxBuf du type TRxBufEvent qui fourni un buffer non typé en gérant moi même les STX \ ETX !

    Citation Envoyé par SergioMaster Voir le message
    - Vaut-il mieux utiliser Comport.WriteStr ou Comport.WriteAsyncStr ?
    Pour l'émission, j'ai utiliser Write avec un buffer non typé !
    Write utilise WriteAsync et gère l'attente
    WriteStr utilise WriteStrAsync qui utilise WriteAsync, je te laisse apprécier l'horrible code de WriteStrAsync qui copie l'octet de poids faible de chaque caractère unicode vers une chaine Ansi !

    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
    function TCustomComPort.WriteStrAsync(var Str: string; var AsyncPtr: PAsync): Integer;
    var sa : Ansistring; var i:integer;
    begin
      if Length(Str) > 0 then
      begin
        setlength(sa,length(str));
        {$IFDEF Unicode}
        if length(sa)>0 then
        begin
          for i := 1 to length(str) do sa[i] := ansichar(byte(str[i]));
          move(sa[1],str[1],length(sa));
        end;
        {$ENDIF}
        Result := WriteAsync(Str[1], Length(Str), AsyncPtr)
      end
      else
        Result := 0;
    end;

    je pense qu'il faut banir WriteStrAsync et WriteStr au profit de Write\WriteAsync

    Maintenant à toi devoir si préfère attendre que l'écriture soit faite avant d'envoyer la trame suivante !
    Si tu prévois de mettre ton écriture dans un thread avec une système de FIFO gérant une liste de message à envoyer, utilise Write




    Citation Envoyé par SergioMaster Voir le message
    - Comment me dépatouiller avec l'unicode delphi et le 'j'accepte que le ANSI du port' ?
    Tu as ta réponse
    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

  3. #3
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Voila la configuration de mon port Com
    Est-ce que les signaux DST/DTR sont indispensables ?

    Citation Envoyé par SergioMaster Voir le message
    Tout bout de code pour envoi vers une imprimante ticket/chéque (partie chèque plus exactement) sera bienvenu . J'ai déjà la solution via les drivers Windows de l'imprimante (EPSON TM H6000III pour les curieux),
    mais (puriste ou 'nom d'oiseau') j'aimerais m’affranchir des drivers et envoyer directement les commandes ESC/POS
    Amusant moi au contraire j'essaye de toujours utiliser le driver Windows quand il existe. Comme cela je prend un simple QR et je ne dépend plus de la com.

    Enfin quand je communique avec un automate au contraire je me passe toujours des drivers pour attaquer les coms en direct. Comme quoi chacun à ses (mauvaises ?) habitudes.
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 075
    Points : 41 028
    Points
    41 028
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Nono40 Voir le message
    Est-ce que les signaux DST/DTR sont indispensables ?
    Oui , c'est l'imprimante qui veux ça enfin telle qu'elle est configurée usine , (je vais quand même faire un tour du coté des switchs)

    Amusant moi au contraire j'essaye de toujours utiliser le driver Windows quand il existe.
    Le driver fourni par Epson fonctionne parfaitement si ce n'est que pour installer l'imprimante : il faut en installer 3

    Citation Envoyé par ShaileTroll
    Qu'appeles-tu FlowControl ?
    la propriété du TComport un peu complexe a mon avis voir image jointe (plus facile a faire , qu'une saisie de chaque élément

    Depuis mon post 1 , j'ai fouillé dans le source pour comprendre ce qui changeait via le ShowsetupDialog . Une intervention 'Urgente' m'a empêché de continuer mes investigations (j'en était au code WriteAsyncStr justement) : ça sent le WE chargé
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 075
    Points : 41 028
    Points
    41 028
    Billets dans le blog
    62
    Par défaut Boires et déboires

    Après bien des tâtonnements , j'ai plus ou moins réglé mon paramétrage
    (avec le composant sur la form il me fallait toujours passer par le ShowsetupDialog , celui-ci même en cliquant sur le bouton Annuler semble faire quelque chose) en Créant mon TComport au runtime plus de soucis
    Me reste encore a faire des calculs savants de position d'écriture de zone mais cela n'a rien a voir avec TComport .

    Je mets donc avec juste un petit point noir : cette histoire de showsetupdialog pour un composant mis au design

    Bonne fin de WE

    PS . En fait j'ai utiliser WriteUnicodeString , plutôt que les autres Write,WriteStr WriteASync etc... (la plongée dans les sources a été fructueuse )
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [CXF / SOAP] Petit problème de configuration ?
    Par chronos dans le forum Services Web
    Réponses: 1
    Dernier message: 13/03/2015, 16h04
  2. [Dual boot] petit problême de configuration
    Par Muesko dans le forum Administration système
    Réponses: 11
    Dernier message: 16/11/2008, 11h17
  3. [Configuration] petit problème avec php.ini pour la fonction mail()
    Par momoh dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 06/04/2007, 01h39
  4. [Log4j]petit problème de configuration
    Par mikey_ufc dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 09/01/2005, 23h32
  5. Problème de configuration
    Par lsdInside dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 09/10/2003, 12h34

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