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 Perl Discussion :

Communication avec modem GSM sur port COM


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 16
    Points : 4
    Points
    4
    Par défaut Communication avec modem GSM sur port COM
    Bonjour à tous,

    Je dois réussir à communiquer avec un modem connecté sur stty0, j'ai réussi à lui envoyer des AT, ATDT et autres commandes. Il me faut maintenant lui transmettre une requête de ce style : "00 00 00 00 A2 04 00 00 00 0F"
    avec pour chaque XX un substr d'une chaîne existante.

    voici une la partie en question du script :

    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
     
     
    #fonctions
    sub purge_tty($) {
      my $buffer;
      my ($size, $first_read, $buffer) = (1, 1);
      $port->write("\r");
      do {
        ($size, $buffer) = $port->read(1024);
        undef $first_read;
      } while ($size);
     
      $port->lookclear();
     
    }
     
     
    sub reponse($) {
     
      my $buffer ="";
      my $commande = $_[0];
      my $time = $_[1];
     
      purge_tty("$port");
      $port->write("$commande\r");
       sleep($time); 
     
      while (my ($size, $buffer) = $port->read(200)) {
        last if !$size;
          return $buffer;
          }
    } 
     
    # Avec la requête :
     
    $cur=&reponse(chr(hex(substr($l_debut_hex,6,2))).chr(hex(substr($l_debut_hex,4,2))).chr(hex(substr($l_debut_hex,2,2))).chr(hex(substr($l_debut_hex,0,2))).chr(hex(substr($l_fin_hex,6,2))).chr(hex(substr($l_fin_hex,4,2))).chr(hex(substr($l_fin_hex,2,2))).chr(hex(substr($l_fin_hex,0,2))).chr(hex("00")).chr(hex("0F")), 10);
       $scur = "";
     for(my $i=0;$i<length($cur);$i++)
        {
        $scur .= sprintf("%x",ord(substr($cur,$i,1)));
        }
      print "\n $scur \n";
    Je vous remercies d'avance pour l'aide =)

    signé : Un stagiaire un peu en galère.

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Tu veux dire que tu dois transformer une chaine de caractère en une liste séparée par des espaces de ses codes ASCII ?

    Tu peux essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    my $string = "Ma commande est \x00\x03";
    my $ascii = join " ", map sprintf("%02X", ord), split //, $string;
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    Oui, enfin presque ! Il ne faut pas les espaces en fait
    Tu veux dire que dans mon cas le code serrai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    my $string = "\x".hex(substr($l_debut_hex,6,2))."\x".hex(substr($l_debut_hex,4,2))."\x".hex(substr($l_debut_hex,2,2))."\x".hex(substr($l_debut_hex,0,2))."\x".hex(substr($l_fin_hex,6,2))."\x".hex(substr($l_fin_hex,4,2))."\x".hex(substr($l_fin_hex,2,2))."\x".hex(substr($l_fin_hex,0,2))."\x".hex("00"))."\x".hex("0F");
    my $ascii =  map sprintf("%02X", ord), split //, $string;
     
    $cur=&reponse($ascii, 10);
    $scur = "";
     for(my $i=0;$i<length($cur);$i++)
        {
        $scur .= sprintf("%x",ord(substr($cur,$i,1)));
        }
      print "\n $scur \n";
    J'ai commencé le perl il y a peu (depuis le début de mon stage), je ne suis pas trop habitué à la syntaxe. Je test ce code dès que je suis au boulot ! Merci de ton aide

    edit 28/05/2013, 13h07 :
    Le code ne fonctionne pas, j'ai du mal à comprendre les instructions que t'utilise, si quelqu’un peut m'expliquer à peu pret ça serai super, en attendant je cherche

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Dans ton code, tu as supprimé le join, qui pourtant, est absolument nécessaire (voir fin de ce post pour répondre à ton besoin).

    Pour les explications, les voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $ascii = join " ", map sprintf("%02X", ord), split //, $string;
    D'abord le split :
    découpe la chaine $string avec un séparateur vide (l'expression régulière vide //), et retourne le résultat sous forme d'une liste de caractères à la fonction map.
    La fonction map s'exécute alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    map sprintf("%02X", ord)
    Pour chaque élément en paramètre (la liste des caractères), le premier argument de map est exécuté (ici, c'est une expression, mais on pourrait aussi écrire un bloc de code entre { }) et $_ est affecté avec la valeur de la liste. On formate donc chaque élément avec le sprintf("%02X", ord) (ord prend $_ en paramètre par défaut). Cette fonction map retourne à son tour une liste de chaines de caractères constituée des valeurs hexadécimales des codes ASCII de chaque lettre.
    Pour finir, le join ré-assemble toutes ces chaines avec pour séparateur le premier argument. Si tu ne souhaites pas d'espace, il suffit de mettre une chaine vide à la place :
    Pour que tu comprennes vraiment bien voici comment est exécutée cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my @caracteres = split //, $string;
    my @codes_ascii = map { sprintf("%02X", ord) } @caracteres;
    my $ascii = join "", @codes_ascii;
    une fois assemblé dans un "pipeline", ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $ascii = join "", map { sprintf("%02X", ord) } split //, $string;
    (plus de variables intermédiaires).
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup pour les explication très bien détaillées !
    Enfaite je dois envoyer à mon modem $envoi = "0100000002000000000F"; en héxadécimal par deux ("01","00" ...), mais ça je n'y arrive pas (aucune réponse), en revanche quand j'envois de l'ascii (ATZ par exemple) j'arrive à obtenir la réponse. Je voudrait donc envoyer $envoi sous forme de chaine ascii et ça devrai (théoriquement) marcher.

    si j'ai bien compris tes explications :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    my $string = "0100000002000000000F"; #j'ai les données directement sous cette forme en héxa
    my @codes_ascii = map { sprintf("%02X", chr) } $string; #Je formate ma variable $string en remplacant les caractère deux à deux par leurs symbole en ascii (chr du coup ?)
    my $ascii = join "", @codes_ascii; #Je met chaque symbole ascii les uns à la suite des autres, puis j'envois au modem.
    C'est juste ?

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Bah, $envoi est déjà une chaine ASCII...
    Je me demande si ce n'est pas plutôt l'inverse qu'il te faut du coup...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $envoi = map { pack("C", hex) } $string =~ /(..)/g;
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    C'est possible ... Connais-tu un logiciel qui me permettrai de voir ce qu'il ce passe sur le port com (je suis sous linux) ? Ça me permettrai de voir exactement ce qu'il s'y passe. La je tâtonne

  8. #8
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Avant d'essayer d'envoyer une chaine "travaillée", essaye d'envoyer des chaînes "en dur", genre : $envoi = "\x0\x0\x10\x03"; (cet exemple est bidon, il faut bien sûr envoyer une commande reconnue).
    Pourrais-tu poster la doc de l'interface de ton modem ?

    Je ne connais pas de sniffer rs232, mais j'ai trouvé entre autre ça sur le gg : http://www.cyberciti.biz/faq/howto-m...port-in-linux/
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    J'arrive justement à envoyer des chaines simples comme :
    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
     
    #------------------- ATZ -------------------#
    print "ATZ en cours .....\n";
    my $string = "41545A"; #ATZ en héxa
    $envoi = pack("H[2]"x3, substr($string,0,2), substr($string,2,2), substr($string,4,2));
     
    while ($bol == 0)
    {
        $cur = &reponse($envoi, 2);
        $nb_try++;
        if ($cur =~ "OK"){
          $bol = 1;
          print"OK\n";
     
        }
        elsif ($nb_try > 9)
        {
          die("Atz impossible\n");      
        }
    }
    pour la chaîne "travaillée" :
    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
     
        #préparation de la requête à envoyer
        my $l_debut = "3"; 
        my $l_fin = "5";
        my $l_debut_hex = uc(sprintf("%x", $l_debut)); 
        my $l_fin_hex = uc(sprintf("%x", $l_fin));
       while(length($l_debut_hex) < 8)
        {
        $l_debut_hex = "0".$l_debut_hex;
        }
     
      while(length($l_fin_hex) < 8)
        {
        $l_fin_hex = "0".$l_fin_hex;
        }
     
    #découpe de la requête
    $c0 = substr($l_debut_hex,6,2);
    $c1 = substr($l_debut_hex,4,2);
    $c2 = substr($l_debut_hex,2,2);
    $c3 = substr($l_debut_hex,0,2);
    $c4 = substr($l_fin_hex,6,2);
    $c5 = substr($l_fin_hex,4,2);
    $c6 = substr($l_fin_hex,2,2);
    $c7 = substr($l_fin_hex,0,2);
    $c8 = "00";
    $c9 = "0F";
     
    $envoi = pack("H[2]"x10, $c0,$c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9);
     
    $cur = &reponse($envoi, 10);
     
     
    print "\n cur : $cur \n";
     
     
     $scur = "";
     for(my $i=0;$i<length($cur);$i++)
        {
        $scur .= sprintf("%x",ord(substr($cur,$i,1)));
        }
      print "\nscur : $scur \n";
    #test de la réponse, la réponse doit avoir une taille de 568 ou 284, y'a des #tests inutiles mais bon .. c'est pour essayer
     
      if (length($cur) ==  284 || length($cur) == 568){
        print "cur ok ----- !!!! ----\n" }
      elsif(length($scur) ==  284 || length($scur) == 568){
        print "scur ok ---- !!!! ---- \n" }
      else {
          print "\n raté ---- raté ! ---- \n"; #toujours obtenu cette ligne
      }
    J'ai installé jpnevulator, mais le script ne récupère pas les réponses quand jpnevulator est lancé (j'ai bien 2 bash différents), tant pis pour le sniffer.

    J'ai déjà cherché la doc de l'interface du modem impossible de la trouver

    Je commence à penser que le problème ne vient pas du code en lui même mais plutôt de l’enchaînement des requête que je fais avant. Je suis entrain d'y travailler.

  10. #10
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Si tu n'as pas la doc de l'interface, comment connais-tu les commandes à envoyer ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  11. #11
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    Je dois refaire le comportement d'un logiciel sous windows pour qu'il fonctionne sous linux. Pour savoir les commandes à envoyer et les réponses que je dois recevoir, j'ai étudié le protocole (sous licence pro) avec l'aide d'un sniffer de port com sous windows.

    Nota : J'ai bien demandé l'autorisation au propriétaire

  12. #12
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    OK, pourrais-tu montrer ici un résultat de sniffer, pour une commande AT, ATDT et pour une commande "du 3e autre type" ( ) ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  13. #13
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    bien sur, voici :

    ATZ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Requête:xx/xx/xxxx hh:mm:ss.ms
     
     41 54 5A 0D 0A                                    ATZ..           
     
     
    Réponse:xx/xx/xxxx hh:mm:ss.ms (+0.0300 seconds)
     
     41 54 5A 0D 0D 0A 4F 4B 0D 0A                     ATZ...OK..
    ATDT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Requête:xx/xx/xxxx hh:mm:ss.ms (+0.0200 seconds)
     
     41 54 44 54 xx xx xx xx xx xx xx xx xx xx 0D 0A   ATDTxxxxxxxxxx..
     
     
    Réponse:xx/xx/xxxx hh:mm:ss.ms (+0.0200 seconds)
     
     41 54 44 54 xx xx xx xx xx xx xx xx xx xx 0D 0A   ATDTxxxxxxxxxx..
     0D 0A 43 4F 4E 4E 45 43 54 20 39 36 30 30 0D 0A   ..CONNECT 9600..

    requête du 3em type (remake ) :

    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
     
    Requête:xx/xx/xxxx hh:mm:ss.ms(+0.0000 seconds)
     
     
     00 00 00 00 01 00 00 00 00 0F                     ..........      
     
     
    Réponse:xx/xx/xxxx hh:mm:ss.ms(+1.0816 seconds)
     
     
     00 00 00 00 00 00 00 00 00 00 C0 40 00 00 00 00   ..........À@....
     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
     68 7D 88 41 AD 3E 1C 3D 00 00 40 40 03 C0 19 3F   h}ˆA*>.=..@@.À.?
     91 CE A0 43 EA 04 24 41 0E A0 46 41 6D B3 8D 41   ‘Î Cê.$A. FAm³A
     85 59 09 42 94 B3 94 C3 BD 49 24 44 00 00 00 00   …Y.B”³”ýI$D....
     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
     75 14 00 00 00 00 00 00 30 80 AC 2B 44 44 5F 32   u.......0€¬+DD_2
     5F 32 34 00 00 00 00 00 60 02 00 00 21 04 05 50   _24.....`...!..P
     01 00 00 00 32 00 1C 00 06 00 04 00 04 00 04 00   ....2...........
     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
     00 00 00 00 00 00 00 00 00 00 00 00 2A 10 40 44   ............*.@D
     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40   ...............@
     00 00 00 00 00 00 00 00 00 00 80 40 00 00 00 00   ..........€@....
     00 00 00 00 00 00 C0 40 00 00 00 00 00 00 00 00   ......À@........
     00 00 00 00 00 00 00 00 00 00 00 00 68 7D 88 41   ............h}ˆA
     AD 3E 1C 3D 00 00 40 40 03 C0 19 3F 91 CE A0 43   *>.=..@@.À.?‘Î C
     EA 04 24 41 0E A0 46 41 6D B3 8D 41 85 59 09 42   ê.$A. FAm³A…Y.B
     94 B3 94 C3 BD 49 24 44 00 00 00 00 00 00 00 00   ”³”ýI$D........
     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   ................
     00 00 00 00 00 00 00 00 00 00 00 00 75 14 00 00   ............u...
    Pour "la requête du 3em type" la réponse c'est des données (aucune interprétation pour nous, y'a un petit script chargé de les mettre en forme après).

  14. #14
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    OK, c'est donc bien du binaire, et pas de l'ASCII.

    Par exemple, la requête "00 00 00 00 01 00 00 00 00 0F"
    s'écrirait
    $string = "\x0\x0\x0\x0\x1\x0\x0\x0\x0\xf";

    Essaye en envoyant ça au bon moment dans le protocole.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  15. #15
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    Ca ne marche pas (aucune réponse) ... Je désespère !
    Vu que ça marche pour l'ATZ et que je pars je pars de l'héxa (41545A) je pense que le code en lui même est bon, enfin je vois pas pourquoi la requête ATZ et toutes celles avant fonctionnent et celle ci non (j'envois 0000000001000000000F), ce qui me fait dire que le code est bon. Qu'en penses-tu ?

  16. #16
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Ca peut être lié à la configuration du port (nb de bits, de bits de stop, parité, ...), et/ou au fait que tu émettes ou non un "\r" après la commande ...
    As-tu essayé avec un chat vers le tty, directement depuis Linux ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  17. #17
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 16
    Points : 4
    Points
    4
    Par défaut
    Désolé du retard de la réponse j'étais en déplacement,
    Après les tests c'est bien ça ! Le \r est fautif (pourquoi ? je ne sais pas )
    Je récupère bien les données mais elles ne font pas la bonne taille, enfin c'est une autre histoire !

    Un grand merci à toi Philou je passe en résolu !

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

Discussions similaires

  1. [Débutant] Communication sur port com
    Par alinokk dans le forum C#
    Réponses: 0
    Dernier message: 08/05/2012, 13h42
  2. Communication avec un FT232 sur un port com virtuel
    Par fcrd03 dans le forum LabVIEW
    Réponses: 1
    Dernier message: 13/03/2012, 19h09
  3. Probleme communication bluetooth sur port Com
    Par Folkene dans le forum C++
    Réponses: 0
    Dernier message: 30/05/2009, 18h45
  4. Communiquer sur port COM avec MSCOMM (RS232) et VISCA (caméra sony)
    Par Chekov dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 07/03/2008, 20h44
  5. Réponses: 4
    Dernier message: 19/03/2007, 09h56

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