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

API standards et tierces Android Discussion :

Problème de connexion Modbus TCP


Sujet :

API standards et tierces Android

  1. #1
    Membre du Club Avatar de royal380
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Mai 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur

    Informations forums :
    Inscription : Mai 2011
    Messages : 56
    Points : 54
    Points
    54
    Par défaut Problème de connexion Modbus TCP
    Bonjour,

    Je développe actuellement une appli androïd pour communiquer avec un automate (actuellement Schneider M340) en Modbus TCP/IP.
    J'utilise pour ça la librairie Modbus4J.

    Le problème est que dans mon LogCat je vois un truc du style :
    "Modbu4j fail to connect"

    J'arrive pourtant bien à pinger l'automate et à m'y connecter avec une appli dispo sur le market "ModbusDroid".

    Voici mon petit 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
      m_Btn.setOnClickListener(new View.OnClickListener() 
    		  {
    			  private ReadResponse rep;
     
    			public void onClick(View v) 
    		      {
    		          // Perform action on click
     
    		            IpParameters ip = new IpParameters();  
    		            ip.setHost("192.168.70.87");  
    		            ip.setPort(502);  
    		            ModbusMaster mp = new ModbusFactory().createTcpMaster(ip, false);  
    		        try {  
    		            mp.init();  
    		            coucou.setText("OK");
    		        } catch (Exception ex) {  
    		            Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);  
    		            coucou.setText("N-OK");
    		        }  
     
     
    			    	  ModbusRequest req2 = null;
    						try {
    							req2 = new ReadHoldingRegistersRequest(0,0,5);
    						} catch (ModbusTransportException e) {
    							// TODO Auto-generated catch block
    							e.printStackTrace();
    						}  
     
     
    						rep = null;
    						try {
    							rep = (ReadResponse) mp.send(req2);
    							coucou.setText("READ");
    						} catch (ModbusTransportException e) {
    							// TODO Auto-generated catch block
    							e.printStackTrace();
    							coucou.setText("READ FAIL");
    						}  
     
     
     
     
    		    }  
     
     
    		  });
    Merci d'avance

  2. #2
    Membre du Club Avatar de royal380
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Mai 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur

    Informations forums :
    Inscription : Mai 2011
    Messages : 56
    Points : 54
    Points
    54
    Par défaut
    Bonjour,

    Je rajoute la copie de mon LogCat.

    J'essaye toujours de me connecter en vain...

    Si quelqu'un a une idée ?

    Merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    06-12 09:38:16.281: W/System.err(3452): Caused by: java.net.SocketException: socket failed: EACCES (Permission denied)
    06-12 09:38:16.289: W/System.err(3452): 	at libcore.io.IoBridge.socket(IoBridge.java:583)
    06-12 09:38:16.289: W/System.err(3452): 	at java.net.PlainSocketImpl.create(PlainSocketImpl.java:201)
    06-12 09:38:16.289: W/System.err(3452): 	at java.net.Socket.checkOpenAndCreate(Socket.java:663)
    06-12 09:38:16.289: W/System.err(3452): 	at com.serotonin.modbus4j.ip.tcp.TcpMaster.openConnection(TcpMaster.java:117)
    06-12 09:38:16.289: W/System.err(3452): 	at com.serotonin.modbus4j.ip.tcp.TcpMaster.send(TcpMaster.java:63)
    06-12 09:38:16.289: W/System.err(3452): 	... 18 more
    06-12 09:38:16.289: W/System.err(3452): Caused by: libcore.io.ErrnoException: socket failed: EACCES (Permission denied)
    06-12 09:38:16.289: W/System.err(3452): 	at libcore.io.Posix.socket(Native Method)
    06-12 09:38:16.289: W/System.err(3452): 	at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:181)
    06-12 09:38:16.289: W/System.err(3452): 	at libcore.io.IoBridge.socket(IoBridge.java:568)
    06-12 09:38:16.289: W/System.err(3452): 	... 23 more

  3. #3
    Membre éclairé
    Avatar de maxusn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2012
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 174
    Points : 661
    Points
    661
    Par défaut
    Bonjour,

    avez vous ajouté a votre manifest la permission internet ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <uses-permission android:name="android.permission.INTERNET"/>

  4. #4
    Membre du Club Avatar de royal380
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Mai 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur

    Informations forums :
    Inscription : Mai 2011
    Messages : 56
    Points : 54
    Points
    54
    Par défaut
    Oui j'ai essayé ça aujourd'hui et l'erreur est toujours présente .
    Je recherche actuellement du côté AsyncTask pour lancer la configuration et la connexion...

    Mais je n'y crois pas..

    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
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.modbus"
        android:versionCode="1"
        android:versionName="1.0" >
     
    	<uses-permission android:name="android.permission.INTERNET"/>
     
        <uses-sdk
            android:minSdkVersion="7"
            android:targetSdkVersion="16" />
     
        <application
     
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.example.modbus.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
     
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
     
    </manifest>

  5. #5
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    En mode utilisateur, les sockets ne peuvent être que TCP et UDP... la librairie utilise-t-elle un autre protocole ?

    (par exemple, ouvrir un socket ICMP va envoyer EACCESS aussi).


    Mais cette erreur ressemble vraiment à un problème de permission internet !!
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  6. #6
    Membre du Club Avatar de royal380
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Mai 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur

    Informations forums :
    Inscription : Mai 2011
    Messages : 56
    Points : 54
    Points
    54
    Par défaut
    J'ouvre uniquement un Maître TCP et je ne vois pas dans la doc quelque chose qui parle d'ICMP ... :/

    J'ai lu quelque part que depuis l'API 3 on ne pouvait plus créer une connexion à partir du thread principal. J'ai donc essayé avec une AsyncTask mais toujours rien...

    Je suis débutant sur Android donc j'ai surement foiré quelque part ...




    Ecoute du click qui lance la connexion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     m_Btn.setOnClickListener(new View.OnClickListener() 
    		  {
     
    		      public void onClick(View v) 
    		      {
    		    	  new ModbusConnection().execute();
     
    		      }       
    		  });
    Fonction Async :
    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
    private class ModbusConnection extends AsyncTask<Void, Void, String> {
     
    			protected String doInBackground(Void... params) {
     
    	                return connectA();
     
    	        }
    	        // onPostExecute displays the results of the AsyncTask.
    	        @Override
    	        protected void onPostExecute(String result) {
    	            textView.setText(result);
    	       }
     
     
    	    }
    Fonction de connexion :
    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
    private String connectA() {
     
    			  modFactory = new ModbusFactory();
    			  ip = new IpParameters();
    			  ip.setHost("192.168.70.87");  
    			  ip.setPort(502);
    	          ModbusMaster modMaster = modFactory.createTcpMaster(ip, false);
    			  try {
    					modMaster.init();
    					return "CONNEC OK";
    				} catch (ModbusInitException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    					return ("CONNEC N-OK");
    				}
     
    	  	  }

  7. #7
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    192.168.70.87 ?

    Sur l'emulateur => foirage obligatoire (il n'y a pas de réseau 192.168.x.y défini sur l'émulateur, et ce réseau n'est pas routable).

    Sur un vrai device en wifi => ok, si le réseau du wifi est bien 192.168.70.0/24

    Sur un vrai device hors wifi => fail (192.168.70.0/24 adresse privée non routable).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  8. #8
    Membre du Club Avatar de royal380
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Mai 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur

    Informations forums :
    Inscription : Mai 2011
    Messages : 56
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par nicroman Voir le message
    192.168.70.87 ?.
    C'est l'adresse IP de l'automate que j'essaye d'atteindre, sachant que j'arrive très bien à le pinger depuis mon téléphone.

    Je ne suis pas sur l'émulateur mais bien sur un vrai device wifi connecté sur un routeur Cisco lui même connecté en direct via câble Ethernet sur l'automate.

    Etant donné que j'arrive à le pinger l'erreur ne vient pas du réseau je pense.

    Aujourd'hui nouveau test et nouvelle chose dans le LogCat
    (nouvelle ip automate xxxx.249)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    06-13 10:10:43.690: I/System.out(32114): Modbus4J: Open connection failed, trying again.
    06-13 10:10:43.700: I/System.out(32114): Modbus4J: Open connection failed, trying again.
    06-13 10:10:43.705: W/System.err(32114): com.serotonin.modbus4j.exception.ModbusTransportException: java.net.ConnectException: failed to connect to /192.168.70.249 (port 502) after 2000ms: isConnected failed: ECONNREFUSED (Connection refused)
    ça va marcherrrrrrr !!! je le sens

    Edit:faute de frappe

  9. #9
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    A le pinger a partir du téléphone ?

    Il y a donc un firewall qui empêche la connexion à un moment (si le service tourne bien).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  10. #10
    Membre du Club Avatar de royal380
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Mai 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur

    Informations forums :
    Inscription : Mai 2011
    Messages : 56
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par nicroman Voir le message
    A le pinger a partir du téléphone ?

    Il y a donc un firewall qui empêche la connexion à un moment (si le service tourne bien).
    Oui à partir du téléphone je le ping et il répond bien.

    J'essaye de repartir des sources de Ben Catlin qui a fait ModBusDroid mais ça manque cruellement de doc.

    Je vais changer d'automate pour voir!

  11. #11
    Membre du Club Avatar de royal380
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Mai 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur

    Informations forums :
    Inscription : Mai 2011
    Messages : 56
    Points : 54
    Points
    54
    Par défaut
    Bonjour !!

    J'arrive maintenant bien à écrire dans les registres de l'automate mais j'ai un force close tout de suite après.

    (Je sais que j'arrive à écrire dans le registre parce que je relis bien ma valeur avec une appli dispo sur le market)

    L'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Caused by: java.lang.AbstractMethodError: abstract method not implemented
    Je n'ai pas réussi à saisir d'où pouvait venir l'erreur dans ce que j'ai lu...
    Si quelqu'un peut m'éclairer ?

    Merci

  12. #12
    Membre du Club Avatar de royal380
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Mai 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur

    Informations forums :
    Inscription : Mai 2011
    Messages : 56
    Points : 54
    Points
    54
    Par défaut
    Et voilààà ça fonctionne l'erreur abstract venait du fait que deux librairies qui dépendent l'une de l'autre n'était pas de la même version!!

    J'arrive maintenant à lire et écrire dans l'automate sans plantage!

    Merci pour vos réponses et votre aide et merci à moi

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

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut connexion Modbus tcp/ip
    salut royal 380.

    je suis entrain de faire ma toute première application sous android dans le cadre d'un projet. j'ai réussi à créer dynamiquement l'interface de commande de mes automates.

    actuellement, je suis bloqué depuis 1semaine au niveau de l’implémentation de la connexion ModBus/TCP.
    après plusieurs recherches sur le net, j'ai trouvé quelques personnes ayant été confronté à ce problème.Mais nul n'a semblé allée jusqu'au bout de ses recherches excepté toi.

    ça serait très gentil de poster ton code final afin qu'on puisse s'éclairer pour mener à bien notre projet.

    Merci et au plaisir de te lire.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 07/10/2010, 15h04
  2. Réponses: 0
    Dernier message: 03/04/2010, 00h40
  3. Problème de connexion Socket en TCP
    Par jerdream78 dans le forum Réseau
    Réponses: 11
    Dernier message: 26/02/2010, 12h05
  4. Connexion ModBus TCP
    Par j.sineau dans le forum VB.NET
    Réponses: 1
    Dernier message: 07/03/2008, 08h10
  5. problème de connexion 2 PC
    Par guitalca dans le forum Développement
    Réponses: 3
    Dernier message: 22/09/2003, 14h04

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