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

Langage Delphi Discussion :

Communication avec balance precia molen i20


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut Communication avec balance precia molen i20
    Bonjour,

    Je cherche à récupérer le poids net d'une balance via une application Delphi utilisant une Socket.
    J'ai donc écris mon code :

    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
    procedure TFrm_Poids.Button1Click(Sender: TObject);
    var
      sMessage : char;
    begin
     
      sMessage := Char(0x1) ;
      // Connexion au serveur socket (imprimante)
      CSockPoids.Address := '192.168.xx.xx';
      CSockPoids.Port := 11001;
      CSockPoids.Open;
     
      Try
      // Transmission de texte au serveur
      CSockPoids.Socket.SendText(       );
      Memo1.Lines.Add('Message envoyé');    // voir SendBuf pour mes tests suivants
      //CSockPoids.Socket.SendBuf()
      except
      on E : ESocketError do ShowMessage('Anomalie envoi du message vers imprimante');
      end;
     
     
     
    end;
    Je sais ce que je dois envoyer à ma balance en hexa grâce à sa doc : SOH ENQ 0 3 L CR LF
    SOH : Début de l'en-tête (0x1)
    ENQ = Demande (0x5)
    0 3 = Poids net (0x30 0x33)
    L = Lecture seule (0x4c)
    CR = Carriage return (0x0D)
    LF = Line Feed (0x0A)

    Mais je ne sais pas comment l'écrire en Delphi ... Que vaut il mieux utiliser ?

    J'ai tenté ça :
    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
    procedure TFrm_Poids.Button1Click(Sender: TObject);
    var
      sMessage : char;
    begin
     
     
      // Connexion au serveur socket (imprimante)
      CSockPoids.Address := '192.168.xx.xx';
      CSockPoids.Port := 11001;
      CSockPoids.Open;
     
      Try
      // Transmission de texte au serveur
      if CSockPoids.Socket.SendText(Chr(01)+Chr(05)+Chr(48)+Chr(51)+Chr(76)+Chr(13)+Chr(10))>0 then
        Memo1.Lines.Add('Message envoyé');    // voir SendBuf pour mes tests suivants
        sMessage :=
      //CSockPoids.Socket.SendBuf()
      except
      on E : ESocketError do ShowMessage('Anomalie envoi du message vers imprimante');
      end;
     
     
     
    end;
    Cela ne me fait pas d'erreur ça compile, maintenant il faut que je récupère la réponse de l'imprimante, je ne sais pas encore comment faire ? Surtout que l'on m'a prévenu que la balance ne renvoyait pas de marqueur de fin ... j'ai l'habitude de coder en WD qui permet de pallier à ça grâce aux fonctions SocketChangeModeTransmission(sNomSocket, SocketMarqueurFinBuffer) mais avec Delphi je ne sais pas comment le gérer, je continue à regarder

    Merci d'avance
    Windows XP
    Delphi 7

    WinDev Mobile 17

  2. #2
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjout,
    Citation Envoyé par juju1988 Voir le message
    Je sais ce que je dois envoyer à ma balance en hexa grâce à sa doc : SOH ENQ 0 3 L CR LF
    SOH : Début de l'en-tête (0x1)
    ENQ = Demande (0x5)
    0 3 = Poids net (0x30 0x33)
    L = Lecture seule (0x4c)
    CR = Carriage return (0x0D)
    LF = Line Feed (0x0A)

    Mais je ne sais pas comment l'écrire en Delphi ... Que vaut il mieux utiliser ?
    sur Sendtext n'indique rien ?

    Ce que vous appelez Hexa peut s'écrire dans une chaine en préfixant d'un dièse les codes (décimaux cette fois) : #01#05#30#33#76#13#10
    La commande CSockPoids.Socket.SendText(#01#05#30#33#76#13#10); devrait faire l'affaire.
    Reste à lire les résultats...

    SendBuf est plus utile pour de plus gros paquets ou contenant des #0.
    On pourrait écrire CSockPoids.Socket.SendBuf(#01#05#30#33#76#13#10, 7);
    Philippe.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Après plusieurs tests voici ce que j'ai fait (j'ai utilisé ton SendText pour le moment ) :

    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
    procedure TForm1.ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
      StatusBar1.SimpleText := 'Connecté à la balance i20';
    end;
     
    procedure TForm1.ClientSocket1Connecting(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
      StatusBar1.SimpleText := 'Tentative de connexion à l''adresse : '+ Edit2.Text;
    end;
     
    procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
      StatusBar1.SimpleText := 'Déconnecté';
    end;
     
    procedure TForm1.ClientSocket1Error(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    begin
      if ErrorEvent=eeConnect then
      begin
        ShowMessage('Impossible de se connecter à  '+Edit3.Text);
        ErrorCode:=0;// pour ne pas déclencher un autre message d'erreur par Delphi
      end;
      StatusBar1.SimpleText:='Déconnecté';
    end;
     
    procedure TForm1.ClientSocket1Read(Sender: TObject;
      Socket: TCustomWinSocket);
    begin
      RichEdit1.Lines.Add(Socket.RemoteHost+'  '+Socket.ReceiveText);
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      ClientSocket1.Port:= StrToInt(Edit3.Text);
      ClientSocket1.Host :=Edit2.Text;
      ClientSocket1.Open;
    end;
     
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      ClientSocket1.Close;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Edit1.Text := '';
      Edit2.Text := '192.168.xx.xx';
      Edit3.Text := 'xx';
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ClientSocket1.Socket.SendText(#01#05#30#33#76#13#10);
    end;
    Je récupère un message, mais c'est pas très lisible ... vous avez une idée ?

    Nom : ProgramBalance.png
Affichages : 2811
Taille : 10,5 Ko
    Windows XP
    Delphi 7

    WinDev Mobile 17

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Alors si je regarde le contenu de mon ReceiveText j'ai :

    #1#2'00'#$D#$A

    je suis perdue c'est quoi comme codification là ?

    Est ce que c'est
    SOH + STX + 00 (mon poids ?) + CR + LF

    ?

    Mais dans ce cas là pourquoi je n'ai pas le bon poids ?
    Windows XP
    Delphi 7

    WinDev Mobile 17

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    et si le poids était 10,200 k ?
    y avait-il quelque chose sur la balance et si oui de quel poids ?
    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

  6. #6
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 930
    Points : 1 959
    Points
    1 959
    Par défaut
    Et tu n'as pas des précisions dans la doc ?

    Le protocole utilisé, c'est A+ ou Modbus ?

    Regardes ici, peut être que cela t'aidera

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    SI j'ai tout compris à la doc je suis avec un protocole ethernet ma balance à une adresse IP, j'utilise donc le protocole ASCII... non ?

    Nom : PoidsNet.png
Affichages : 2782
Taille : 20,6 Ko

    Et oui ma balance dispose d'un petit instrument qui me permet de stimuler un poids via une molette que je tourne ... Il est en ce moment sur 63.5 kg (poids net)

    Et peut importe sa valeur j'ai toujours dans ma variable sMsg : #1#2'00'#$D#$A

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      sMsg := Socket.ReceiveText;
      RichEdit1.Lines.Add(Socket.RemoteHost+'  '+Socket.ReceiveText);
    J'avais vu la discussion de vallgui quand j'ai fait mes recherches mais je ne pense pas être dans le cas du checksum ... si ?
    Images attachées Images attachées
    Windows XP
    Delphi 7

    WinDev Mobile 17

  8. #8
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 930
    Points : 1 959
    Points
    1 959
    Par défaut
    Bonjour,

    ASCII n'est pas un protocole mais une table de conversion de caractères et Ethernet est utilisé pour le transport de l'information ( au même titre que la liaison série que tu n'utilises pas ).

    Il est vrai que dans leur doc, c'est mal précisé, en fait, tu dois certainement utilisé leur protocole de communication A+.

    Je ne connais pas ce protocole mais après avoir lu très rapidement la doc, les 20 premiers caractères ( codés en ASCII ) représentent des codes de communication :
    #1 : début de l'entête
    #2 : début du texte

    Ce qui est étonnant c'est que tu ne reçois jamais le code de fin de text ( #3 ), tu es sûr de bien afficher le code ascii du message que tu reçois ?

  9. #9
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Pour recevoir la trame configurée, dans la documentation (page 25) il est indiqué d'envoyer: $01$30$31$0D$0A donc en décimal: #01#48#49#13#10.
    Qu'est-ce que ça donne si tu envoies ça?
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour
    Citation Envoyé par free07 Voir le message
    Je ne connais pas ce protocole mais après avoir lu très rapidement la doc
    itou

    la première chose que j'ai noté est que l'envoi d'une demande est selon la configuration de la machine
    selon le case on envoi ou non le numéro de la machine,le checksum
    la première idée qui me vient donc à l'esprit est : envois tu la bonne commande ?
    [Edit]
    si on se réfère à la page 21 (bien regarder la configuration nécessaire)
    que donne l'envoi de SOH+CR+LF
    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

  11. #11
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 857
    Points : 11 291
    Points
    11 291
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    La doc indique (sauf erreur) que la trame complète (par défaut) que tu as mise en exemple est renvoyée pour la demande SOH CR LF, si tu te situes dans le cas esclave A+ sans n° id de balance (00).

    La demande particulière SOH ENQ '03' 'L' CR LF de la seule masse nette devrait entraîner le retour de SOH STX '03' (code du bloc demandé) 'masse nette sur 10 caractères' CR LF

    Le caractère ETX n'est pas utilisé dans ces cas, je suppose, car trames de format et taille fixes.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Free07 Bonjour,

    ASCII n'est pas un protocole mais une table de conversion de caractères et Ethernet est utilisé pour le transport de l'information ( au même titre que la liaison série que tu n'utilises pas ).

    Il est vrai que dans leur doc, c'est mal précisé, en fait, tu dois certainement utilisé leur protocole de communication A+.

    Je ne connais pas ce protocole mais après avoir lu très rapidement la doc, les 20 premiers caractères ( codés en ASCII ) représentent des codes de communication :
    #1 : début de l'entête
    #2 : début du texte

    Ce qui est étonnant c'est que tu ne reçois jamais le code de fin de text ( #3 ), tu es sûr de bien afficher le code ascii du message que tu reçois ?
    Si si je reçois bien CR + LF en marqueur fin.

    Linkin Pour recevoir la trame configurée, dans la documentation (page 25) il est indiqué d'envoyer: $01$30$31$0D$0A donc en décimal: #01#48#49#13#10.
    Qu'est-ce que ça donne si tu envoies ça?
    si je fais ça, cela ne passe même pas dans ma procédure OnRead.

    SergioMaster

    la première chose que j'ai noté est que l'envoi d'une demande est selon la configuration de la machine
    selon le case on envoi ou non le numéro de la machine,le checksum
    la première idée qui me vient donc à l'esprit est : envois tu la bonne commande ?
    [Edit]
    si on se réfère à la page 21 (bien regarder la configuration nécessaire)
    que donne l'envoi de SOH+CR+LF
    Youpi je reçois la réponse complète avec mon poids net : #1#2'040602'#2'0100105.8kg'#2'0200042.2kg'#2'0300063.6kg'#$D#$A

    Tourlourou Bonjour,

    La doc indique (sauf erreur) que la trame complète (par défaut) que tu as mise en exemple est renvoyée pour la demande SOH CR LF, si tu te situes dans le cas esclave A+ sans n° id de balance (00).

    La demande particulière SOH ENQ '03' 'L' CR LF de la seule masse nette devrait entraîner le retour de SOH STX '03' (code du bloc demandé) 'masse nette sur 10 caractères' CR LF

    Le caractère ETX n'est pas utilisé dans ces cas, je suppose, car trames de format et taille fixes.
    J'ai pas compris la nuance...
    Windows XP
    Delphi 7

    WinDev Mobile 17

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Youpiii j'avais mal traduit la commande complète est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ClientSocket1.Socket.SendText(#01#05#48#51#76#13#10);
    #48 et #51 = Poids net
    Windows XP
    Delphi 7

    WinDev Mobile 17

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    Encore une petite question,

    Je reçois donc : #1#2'0300063,6kg'#$D#$A

    Comment je fais pour récupérer ce qui est entre les deux '' ...

    J'ai tenté

    ==> en gros hein j'ai essayé de mettre les ' de toutes les façons possible ... en vain, ou encore de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringReplace(sMsg,'''','\',[ReplaceAll])
    pour pouvoir ensuite récupérer ce qui sera entre \ mais en vain également ...

    Question bête certainement mais je trouve pas ...
    Windows XP
    Delphi 7

    WinDev Mobile 17

  15. #15
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 930
    Points : 1 959
    Points
    1 959
    Par défaut
    Citation Envoyé par juju1988 Voir le message
    Encore une petite question,

    Je reçois donc : #1#2'0300063,6kg'#$D#$A

    Comment je fais pour récupérer ce qui est entre les deux '' ...
    Si j'ai bien compris les codes de communication de ce protocole, C'est pas le code #2 qui indique le début du texte ?

    Si c'est le cas tu recherches la 1ère occurence de #2, si le caractère suivant est une apostrophe, tu récupères le texte jusqu'à l'autre occurence de l'apostrophe.

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    #2 = Start of text oui et mon 03 indique que ensuite il y a mon poids net.
    J'ai essayé donc en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      i := Pos('#2', sMsg);
      showMessage(inttostr(i));
    et mon i = 0....

    Autre truc bête que j'ai fait en attendant pour que ça fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sMsg2 := Copy(sMsg,5,9);
    5 est le premier 0 de mon poids alors que si on compte la chaine #1#2'0300063,6kg'#$D#$A c'est le 8ème caractère comme s'il ne comptait pas le '03 ... par contre si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sMsg2 := Copy(sMsg,5,9);
    ça me prend bien depuis le début du message, je ne comprend plus rien
    Windows XP
    Delphi 7

    WinDev Mobile 17

  17. #17
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    L'apostrophe est-elle vraiment envoyé par la balance, ou est-elle rajoutée par Delphi lors du déboguage (Evaluer/Modifier)?
    Je verrais bien quelque chose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    const
    cstDebut=#2;
    cstFin=#13#10;
    begin
    sMsg2 := Copy(sMsg,Pos(cstDEbut,sMsg)+Length(cstDebut),Pos(cstFin,sMsg)-Pos(cstDebut,sMsg)+Length(cstDebut));
    end;
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  18. #18
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 930
    Points : 1 959
    Points
    1 959
    Par défaut
    Quel est le type de sMsg ? c'est AnsiString ou String ? Faut que tu fasses attention au codage de ta chaîne de caractères.

    Ton problème ne vient pas du fait que tu travailles sur des chaines de caractères Unicode ?

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Points : 124
    Points
    124
    Par défaut
    C'est ça le problème je ne sais pas d'où vient les apostrophes delphi ou balance...

    Si je fais comme tu m'as dit je récupère également le 03 et le #$D#$A du coup j'ai rajouté un +2 ça m'enlève le 03 mais je n'arrive pas à enlever le #$D#$A...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sMsg2 := Copy(sMsg,Pos(cstDEbut,sMsg)+Length(cstDebut)+2,Pos(cstFin,sMsg)-Pos(cstDebut,sMsg)+Length(cstDebut));

    Mon sMsg c'est du string je viens d'essayer en AnsiString mais mon test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      i := Pos('#2', sMsg);
      showMessage(inttostr(i));
    me renvoi toujours 0
    Windows XP
    Delphi 7

    WinDev Mobile 17

  20. #20
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 857
    Points : 11 291
    Points
    11 291
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     i := Pos(#2, sMsg);
      showMessage(inttostr(i));
    il n'y a pas d'apostrophes autour du caractère.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

Discussions similaires

  1. Communication avec indicateurs PRECIA MOLEN
    Par el_pedro dans le forum C#
    Réponses: 4
    Dernier message: 20/07/2013, 23h36
  2. [C#][PRECIA MOLEN][I20] Communication
    Par David55 dans le forum WinDev
    Réponses: 2
    Dernier message: 10/04/2013, 10h42
  3. Réponses: 36
    Dernier message: 05/08/2012, 01h34
  4. Envoie données balance Precia Molen
    Par Elwe31 dans le forum VB.NET
    Réponses: 7
    Dernier message: 21/09/2011, 09h26
  5. [Dialog06] Protocol de communication avec Balances
    Par darkendorf dans le forum Windows
    Réponses: 1
    Dernier message: 15/06/2010, 09h08

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