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 :

Portage d'un script Linux vers Windows


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Stagiaire
    Inscrit en
    Juillet 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Stagiaire

    Informations forums :
    Inscription : Juillet 2014
    Messages : 5
    Par défaut Portage d'un script Linux vers Windows
    Bonjour,

    j'ai récupéré un script (voir ci-dessous depuis http://www.jibble.org/currentcost/
    Dans la version Windows, j'ai ajouté le module Win32:: SerialPort et changé les appels du script en conséquence.
    Actuellement, je bute sur la ligne open(SERIAL, "+>$PORT"); qui me renvoie un Permission denied.
    D'ailleurs, je pense que le port devrait être ouvert en lecture, mais cela ne change rien à l'erreur.
    Merci pour votre aide et vos suggestions.

    Version d'origine :
    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
    #!/usr/bin/perl -w
     
    # Reads data from a Current Cost device via serial port.
     
    use strict;
    use Device::SerialPort qw( :PARAM :STAT 0.07 );
     
    my $PORT = "/dev/ttyS0";
     
    my $ob = Device::SerialPort->new($PORT);
    $ob->baudrate(2400);
    $ob->write_settings;
     
    open(SERIAL, "+>$PORT");
    while (my $line = <SERIAL>) {
        if ($line =~ m!<ch1><watts>0*(\d+)</watts></ch1>.*<tmpr> *([\-\d.]+)</tmpr>!) {
            my $watts = $1;
            my $temp = $2;
            print "$watts, $temp\n";
        }
    }
    Version adaptée pour Windows qui plante (j'ai ajouté des settings pour le port COM mais cela ne pose pas de pb)

    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
    use strict;
     
    use Win32::SerialPort qw( :PARAM :STAT 0.07 );
    my $PORT = "COM4";
     
    my $ob = Win32::SerialPort->new($PORT);
     
    $ob->baudrate(57600);
    $ob->parity("none");
    $ob->databits(8);
    $ob->stopbits(1);
    $ob->write_settings;
    open(SERIAL, "+>$PORT") or die "Can't open COM4: $!"; 
    while (my $line = <SERIAL>) {
    	if ($line =~ m!<tmpr> *([\-\d.]+)</tmpr>.*<watts>0*(\d+)</watts>!) {
    		my $temp = $1;
    		my $watts = $2;
    		print "$watts, $temp\n";
    	}
    }

  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 : 59
    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
    Par défaut
    Sur quelle plateforme Perl ? (cygwin, ActivePerl, Strawberry perl) ?
    Si tu parles de /dev/ttyS0, je suppose que c'est cygwin ? Si c'est bien Cygwin, tu peux utiliser directement Device::SerialPort, c'est ce que j'ai fait.
    Si tu utilises Strawberry ou ActivePerl, il faudrait que j'expérimente.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Stagiaire
    Inscrit en
    Juillet 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Stagiaire

    Informations forums :
    Inscription : Juillet 2014
    Messages : 5
    Par défaut
    ActivePerl sous Windows.
    Le code Windows est à partir de la ligne 23 (ce sont 2 codes différents mais en rédigeant mon post sur ce forum, ils ont été regroupés)

  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 : 59
    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
    Par défaut
    Désolé, je ne tourne qu'à Strawberry ou cygwin, et je ne peux pas me permettre d'installer AP en plus pour éviter tout pb sur ma version en production (Strawberry).
    Cela dit, tu as essayé avec un hyper-terminal d'accéder à ce port ? Ne dois-tu pas exécuter ton pgm perl en mode "Admin" ?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Stagiaire
    Inscrit en
    Juillet 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Stagiaire

    Informations forums :
    Inscription : Juillet 2014
    Messages : 5
    Par défaut
    Pas de pb avec HyperTerminal et d'autres softs 100% Windows.
    Même avec élévation de privilèges sous Windows, ça plante.
    Le code sous Strawberry ne doit pas être différent de celui indiqué. Tu peux le tester stp ?

  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 : 59
    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
    Par défaut
    Je ne peux pas le tester, car Strawberry refuse d'installer Win32::SerialPort (pb de désarchivage). Faudrait que j'essaye de l'installer à la main, et je ne sais pas si j'aurais le temps aujourd'hui.

Discussions similaires

  1. debogage et portage d'une biblio de linux vers windows
    Par shadowless dans le forum Langage
    Réponses: 3
    Dernier message: 03/05/2011, 09h08
  2. Portage de linux vers windows d'une bibliothèque
    Par shadowless dans le forum Débuter
    Réponses: 31
    Dernier message: 24/04/2011, 23h58
  3. Problème portage code Linux vers Windows
    Par scary dans le forum Windows
    Réponses: 14
    Dernier message: 11/01/2010, 17h56
  4. problème portage ioctl socket Linux vers Windows
    Par progfou dans le forum Réseau
    Réponses: 19
    Dernier message: 06/10/2009, 19h44
  5. Problème de portage Linux vers Windows, wxwidgets
    Par zoom* dans le forum wxWidgets
    Réponses: 6
    Dernier message: 22/07/2008, 09h59

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