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

avec Java Discussion :

Module TINIm400 - Temporisation et threads


Sujet :

avec Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Module TINIm400 - Temporisation et threads
    Bonjour à tous,
    Dans le cadre de mon projet de fin d'année en BTS IRIS j'ai pour objectif de réaliser une application permettant de gérer une communication entre capteur et une machine en utilisant un module TINI comme pont réseau.
    Le système fonctionne de la sorte :

    La carte envoi une requête au capteur, permettant d'activer l'envoi de données en boucle.
    La carte reçoit les données en boucle, via une communication série. Puis elle renvoi cela sur Ethernet vers le port TCP n°4000 de la carte Ethernet de la machine.

    L'application que je code est upload sur la carte.
    A l'heure actuelle, je parviens à écrire sur le port série, écouter le port série, récupérer l'information et la restransmettre sur la machine via Ethernet.

    Cependant je rencontre les exigences suivantes dans mon CDC :

    -L'acquisition doit s'effectuer toute les secondes.
    -Si la donnée récupèrée a la même valeur que la donnée précédente, alors elle ne doit pas être envoyée ( différentiel).
    -Gestion des threads

    Voici 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
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    import javax.comm.*;
    import java.io.*;
    import java.net.*;
    import java.lang.*;
    import com.dalsemi.tininet.*;
    import com.dalsemi.system.*;
     
    class SerialToEthernet extends Thread {
    	// Utilisation d'un buffer de 1024 pour le transfert de données
    	private static final int INPUT_BUF_LEN = 1024;
    	// Serial port and associated streams
    	private SerialPort sp;
    	private InputStream spin;
    	private OutputStream spout;
    	// Socket and associated streams
    	private Socket s;
    	private InputStream sin;
    	private OutputStream sout;
     
    	// commande à taper pour éxecuter le programme : java SerialToEthernet.tini 192.168.100.3 le port est déjà passé en argument dans le programeme
    	private SerialToEthernet(String server)
    	throws Exception {
     
    		// Creation et initialisation du port serie
    		sp = (SerialPort)
     
    		// Ouverture du port serie
    		CommPortIdentifier.getPortIdentifier("serial0").open(
    		"SerialToEthernet", 5000);
     
    		// RTS
    		TINIOS.setRTSCTSFlowControlEnable(0, false);
     
    		// 8 data bits, 1 stop bit, pas de parité
    		sp.setSerialPortParams(115200, SerialPort.DATABITS_8,
    		SerialPort.STOPBITS_1,
    		SerialPort.PARITY_NONE);
     
    		// Controle de flux
    		sp.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN |
    		SerialPort.FLOWCONTROL_RTSCTS_OUT);
     
    		// Initialisation des flux d'entrées et de sorties'
    		spin = sp.getInputStream();
    		spin = sp.getInputStream();
    		spout = sp.getOutputStream();
     
    		// Timeout de lecture de 100ms
    		sp.enableReceiveTimeout(100);
     
    		// Parametrage du seuil de reception et du buffer
    		sp.enableReceiveThreshold(INPUT_BUF_LEN);
     
    		// Connection au serveur TCP
    		s = new Socket(server, 4400);
    		sin = s.getInputStream();
    		sout = s.getOutputStream();
     
    		// Création et lancement d'un thread Serial To Ethernet'
    		(new Thread(new SerialReader(this, INPUT_BUF_LEN))).start();
     
    		// Lancement du thread de maintenance
    		super.start();
        }
     
    //l'utilisation de l'élément volatile s'explique ici par le fait, que la variable running peut être accessible par tout les threads.
    private volatile boolean running = true;
    private int serialTotal = 0;
    private int networkTotal = 0;
     
    public void run() {
        while (running) {
    		try {
    			Thread.sleep(1000);
    		} catch (InterruptedException ie) {}
    		//System.out.println("Bytes received from serial:" + serialTotal);
    		//System.out.println("Bytes received from network:" + networkTotal);
    }
    }
     
    private class SerialReader implements Runnable {
    private byte[] serBuf;
    private Thread maint;
    private SerialReader(Thread maint, int size) {
    	serBuf = new byte[size];
    	this.maint = maint;
    }
    public void run() {
    	while (running) {
    		try {
    			System.out.println("Lecture des datas sur le port série");
    			int count = spin.read(serBuf, 0, serBuf.length);
    			//S'il existe encore des données à lire sur le port alors on continue la lecture'
    			if (count > 0) {
    				System.out.println("Ecriture des datas sur Ethernet");
    				sout.write(serBuf, 0, count);
    				serialTotal += count;
    			}
    		} catch (IOException ioe) {
    			// Problème de connection avec le serveur
    			System.out.println(ioe.getMessage());
    			ioe.printStackTrace();
    			running = false;
    			maint.interrupt();
    			break;
    		}
    	}
    }
    }
    }

    J'ai commenté le code comme j'ai pu je le pense lisible et compréhensible si vous désirez plus d'informations n'hésitez pas à me le dire.

    Les problèmes que je recontre :

    -J'ignore totalement comment implémenter dans l'application actuelle la temporisation, je pensais que c'était avec la fonction setEnableReceiveTimeout mais il semblerait que non.

    -Voila quelques mois que je travaille là dessus, je dois insérer ma fonction concernant l'écriture sur le port série dans ,cette applicatiopn principale et je me sens perdu dans ma gestion de thread.

    Si j'avais à expliquer la manière dont les threads sont gérés dans cette application :

    Il existe une variable running dont l'attribut volatile permet de partager celle ci avec plusieurs thread. De ce fait je peux passer du thread gérant la partie série avec le thread gérant la partie ethernet.

    Il faut savoir que je ne travaille pas avec un capteur mais avec un simulateur de capteur que j'ai réalisé sur labview, pour faire simple une application qui envoi une chaîne de caractère sur une tempo définie à une vitesse précise et sur un port précis.

    Voilà, je pense avoir été clair, TINI est une plateforme assez vieille ( 15/16 ans) et la plupart des sites que je rencontre sont fermés ou vides. C'est pourquoi je viens à vous pour vous faire part de mes problèmes, en espèrant y trouver des solutions.

    Merci

    TOMOYO

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Petite relance sur le sujet, y a t'il des personnes qui s'y connaissent?

Discussions similaires

  1. Probleme module Threading avec Py2exe
    Par Messiah93 dans le forum Général Python
    Réponses: 7
    Dernier message: 17/01/2009, 07h35
  2. Temporisation d'action, Threads
    Par windob dans le forum Langage
    Réponses: 3
    Dernier message: 13/10/2008, 18h04
  3. temporisation de thread
    Par s.grenet dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 07/01/2008, 19h33
  4. Module Threading, utilisation timer(x,y) .
    Par aladin46 dans le forum Général Python
    Réponses: 3
    Dernier message: 02/01/2005, 18h55

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