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

 Delphi Discussion :

Fichier string, Port com et donnée


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Inscrit en
    Mars 2008
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 75
    Par défaut Fichier string, Port com et donnée
    Bonjour a tous,

    Voila mon probleme :

    J'ai un fichier texte (*.txt) qui a la struture suivante :
    00001111
    11110000 (example)

    Bref, une suite de chiffre binaire sous forme d'octet.

    Je cherche a envoyer ces octets sur le port Com (composant TComPort), mais j'hésite sur la méthode a employer. En fait comment code windows, est-ce en ASCII, ou je doit coder les octets sous forme hexa ?

    Je precise que la réception des octets est décode par un microprocesseur.

    Un dernier details, TComPort transmet des données sous forme de string.


    Merci pour votre aide

    cordialement,

    elecpic

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Personnellement, j'utilisais la librairie CPort (pour la vitesse de réactivité) ou AsyncFree (pour la simplicité d'utilisation, hélas peu réactive si l'on est sur un protocole série rapide).

    Aucune des deux n'impose l'envoi de chaînes exclusivement, même si elles le supportent bien entendu. L'utilisation de buffers d'octets reste la méthode primaire d'envoi.

    Dans ton cas, ton fichier contient sur chaque ligne un octet encodé en binaire : il te suffit de lire les 8 bits correspondants, puis de le traduire en un Byte utilisable par les librairies de gestion du port série.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Membre confirmé

    Inscrit en
    Mars 2008
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 75
    Par défaut si j'ai tout compris ...
    bonjour Mac Lak,

    Bon, si j'ai tout bien compris, j'envoie l'octet au format texte sur le port,
    et je recupere les bits sur ma platine electronique. J'ai donc pas besoin de traduire les octets.

    Si je me trompe, merci de me le signaler.

    Merci de ta reponse et te souhaite une bonne fin de journée.

    cordialement,

    elecpic

  4. #4
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par elecpic Voir le message
    Bon, si j'ai tout bien compris, j'envoie l'octet au format texte sur le port,
    et je recupere les bits sur ma platine electronique. J'ai donc pas besoin de traduire les octets.
    Hein ?? Si, faut les traduire en Delphi depuis le fichier texte !!

    Si tu envoie la chaîne "01101001" sur le port série, ton contrôleur va péter une durite, car tu vas en réalité lui envoyer HUIT octets valant soit 48, soit 49 !

    Tu lis la chaîne (8 caractères) depuis le fichier, tu la convertis de sa représentation texte binaire vers un format numérique interne (un Byte, donc), puis tu envoie UN Byte par le port série.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  5. #5
    Membre confirmé

    Inscrit en
    Mars 2008
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 75
    Par défaut
    Donc, si je te suis, si j'envoie un '0 ou un '1', le pc envoie le code ascii corespondant (soit 1 byte).

    POur envoyer un octet binaire (ex :0000 1111), je doit faire corespondre les bytes 1 par 1:

    soit sur 1 byte (je reprend mon example):

    0+65 = 65 = A
    0+65 = 65 = A
    0+65 = 65 = A
    0+65 = 65 = A
    1+65 = 66 = B
    1+65 = 66 = B
    1+65 = 66 = B
    1+65 = 66 = B

    j'envoie donc 8 bytes qui corespondent apres decodage par le microprocesseur à mes 8 bits.

    Ca me parait un peu long pour atteindre des bonnes vitesses ...

    j'ai peut etre raté un train

    ai'je bien tout compris ?

    cordialement

    elecpic

  6. #6
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut


    Non, "00001111" vaut 15 en décimal, c'est ce "15" stocké dans un Byte que tu envoie au µC... Si t'essaie de programmer un µC sans connaître la base de l'encodage binaire, t'es pas rendu, tu sais ?

    Il te faut une fonction de ce genre :
    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 BinToDec ( BinString : String) : Byte ;
    Begin
         If Length(BinString)<>8 Then
            Raise Exception.Create("Invalid binary string") ;
         Result:=0 ;
         For I:=1 To 8 Do
             Begin
             // Identification du chiffre : 0, 1 ou erreur.
             Case BinString[I] Of
                  Case '0' : V:=0 ;
                  Case '1' : V:=1 ;
                  Else Raise Exception.Create("Invalid binary digit") ;
             End ;
             // Ajout du chiffre binaire, par décalage et ajouts successifs.
             Result := (Result Shl 1) + V ;
             End;
         // Retour du résultat.
    End;
    Pas testée, mais le principe est là.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

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

Discussions similaires

  1. [WD12E] données port com vers fichier txt
    Par ryaxx dans le forum WinDev
    Réponses: 18
    Dernier message: 10/03/2010, 11h15
  2. Port COM -> Envoie données Hexadecimale
    Par benda95280 dans le forum Langage
    Réponses: 9
    Dernier message: 21/01/2010, 12h19
  3. Réponses: 1
    Dernier message: 19/12/2006, 11h18
  4. erreur fichier ports COM
    Par _yeye_ dans le forum Visual C++
    Réponses: 3
    Dernier message: 27/09/2006, 08h16
  5. [socket] envoyer des données vers un port com
    Par Slimer dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 20/07/2004, 17h35

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