Lecture de variable automate en utilisant le service web de l ETZ (application J2SE)



Documents pareils
Création d un service web avec NetBeans 5.5 et SJAS 9

Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

Applet pour visualiser les variables «automate» notifiées

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Développement Logiciel

Projet de programmation (IK3) : TP n 1 Correction

Synchro et Threads Java TM

Threads. Threads. USTL routier 1

Programmer en JAVA. par Tama

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

Interfaces graphiques avec l API Swing

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Une introduction à la technologie EJB (2/3)

TP1 : Initiation à Java et Eclipse

Auto-évaluation Programmation en Java

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Java 1.5 : principales nouveautés

Création d une application JEE

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Un ordonnanceur stupide

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

ACTIVITÉ DE PROGRAMMATION

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Flux de données Lecture/Ecriture Fichiers

Tutoriel d installation de Hibernate avec Eclipse

as Architecture des Systèmes d Information

BIRT (Business Intelligence and Reporting Tools)

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Outils, langage et approche Android Une introduction. Nicolas Stouls lyon.fr

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Calcul Parallèle. Cours 5 - JAVA RMI

Introduction : les processus. Introduction : les threads. Plan

RMI le langage Java XII-1 JMF

Desktop Intégration. Rémi Forax

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Remote Method Invocation Les classes implémentant Serializable

Introduction au langage Java

Eclipse atelier Java

INITIATION AU LANGAGE JAVA

Dis papa, c est quoi un bus logiciel réparti?

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Environnements de développement (intégrés)

Corrigé des exercices sur les références

Cours 1: Java et les objets

Remote Method Invocation (RMI)

Programmation Par Objets

Plan du cours. Historique du langage Nouveautés de Java 7

Construire des plug-ins pour SAS Management Console SAS 9.1

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Configuration du serveur web embarqué

Java 7 Les fondamentaux du langage Java

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Bases Java - Eclipse / Netbeans

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

Initiation à JAVA et à la programmation objet.

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Package Java.util Classe générique

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Configuration de SQL server 2005 pour la réplication

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

3 : créer de nouveaux onglets dans Netvibes Cliquer sur le bouton «+» et renommer le nouvel onglet (par exemple Encyclopédies en ligne)

Votre premier projet Android

Programmation système de commandes en C

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

La base de données XML exist. A. Belaïd

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

1. Installation d'un serveur d'application JBoss:

Warren PAULUS. Android SDK et Android x86

Tenrox. Guide d intégration Tenrox-Salesforce. Janvier Tenrox. Tous droits réservés.

Java Licence professionnelle CISII,

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Programme Compte bancaire (code)

EXA1415 : Annotations

Java Licence Professionnelle CISII,

Notes de cours Practical BigData

Java Licence Professionnelle CISII,

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Programmation Objet Java Correction

Machine virtuelle Java pour Palm TX

IUT BREST UN LOGICIEL SCADA : PC VUE 2010 DEP.GMP

AUVRAY Clément (168187) HOMBERGER Alexandre (186897) GLADE. Langages, outils et méthodes pour la programmation avancée Page 1 sur 12

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

NanoSense. Protocole Modbus de la sonde Particules P4000. (Version 01F)

Guide Enseignant de l application OpenERP

Java DataBaseConnectivity

TP1 : Initiation à Java et Eclipse

TD/TP PAC - Programmation n 3

Cliquez sur le site que vous souhaitez consulter, il s affichera directement dans le navigateur.

Remote Method Invocation en Java (RMI)

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Serveur d'archivage 2007 Installation et utilisation de la BD exist

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

Transcription:

Lecture de variable automate en utilisant le service web de l ETZ (application J2SE) Sommaire 1. Objectifs...2 2. Création d un nouveau projet J2SE...2 3. Intégration du client Web Service...5 3.1. Description du service web du coupleur ETZ...5 3.2. Récupération du fichier WSDL du coupleur ETZ...6 3.3. Intégration du fichier WSDL dans NetBeans...8 4. Codage de l application...9 4.1. ArrayOfInt readmultipleregister(int UnitID, int Adresse, int nbvaleur)...9 4.2. Création du Thread ClassThreadLecture...10 4.3. Modification de la classe principale ClassJFrameLecture...12 5. Copie d écran en exécution...13 6. Code source...14 6.1. ClassJFrameLecture.java...14 6.2. ClassThreadLecture.java...15 BTS iris - Lycée Eiffel - Armentières Page 1 sur 15 30/05/2007

1. Objectifs L objectif de ce chapitre consiste uniquement à utiliser les méthodes du service web du coupleur ETZ pour afficher dans une application Java SE les codes lus par la caméra du Tapiris. L appel de la méthode readmultipleregisters() de lecture du code caméra et l affichage de ce code dans le JFrame seront codés dans un Thread. 2. Création d un nouveau projet J2SE File > New Project > General > Java Application Décochez «Create Main Class» BTS iris - Lycée Eiffel - Armentières Page 2 sur 15 30/05/2007

Création d une fiche graphique JFrame : Clic droit sur le projet > New > File/Folder > Java GUI Forms > JFrame Form BTS iris - Lycée Eiffel - Armentières Page 3 sur 15 30/05/2007

Donnez un nom à la classe : ClassJFrameLecture Créez en même temps le package «com.iris» Cliquez sur Finish Sélection du nouveau JFrame comme classe principale du projet : Clic droit sur le projet > Properties > Run >Main Class = «com.iris.classjframelecture» Création des composants de l IHM (affichage en mode «Design») : En cliquant glissant de la palette vers la JFrame, créez les composants suivants : 1. Ajout d un JButton : Variable Name = JBtnLancer et text = «Lancer la lecture» 2. Ajout d un JButton : Variable Name = JBtnQuitter et text = «Quitter» 3. Ajout d un JLabel : Variable Name = JLblCamera et text = «???» Création de l évènement «onclick» sur le bouton JButtonQuitter : Dans l affichage Design, clic droit sur le bouton JButtonQuitter > Events > Mouse > mouseclicked Modification du code de la fonction générée pour fermer l application : System.exit(0) ; BTS iris - Lycée Eiffel - Armentières Page 4 sur 15 30/05/2007

Code source généré : Remarque : les composants graphiques de la JFrame sont tous créés dans la méthode initcomponents(). Cette méthode n est pas modifiable à partir du code source, NetBeans ne présente pas son code directement, il est replié dans l éditeur de code source. package com.iris; public class ClassJFrameLecture extends javax.swing.jframe { public ClassJFrameLecture() { initcomponents(); // <editor-fold defaultstate="collapsed" desc=" Generated Code "> private void initcomponents() { /* * Code de création des composants graphiques *... */ private void jbtnquittermouseclicked(java.awt.event.mouseevent evt) { System.exit(0) ; public static void main(string args[]) { java.awt.eventqueue.invokelater(new Runnable() { public void run() { new ClassJFrameLecture().setVisible(true); ); private javax.swing.jbutton jbtnlancer; private javax.swing.jbutton jbtnquitter; private javax.swing.jlabel jlblcamera; 3. Intégration du client Web Service 3.1. Description du service web du coupleur ETZ Voici les méthodes disponibles sur le service web (implémentation d un accès aux données en Modbus) : ReadDeviceIdentification Transparent Ready Modbus BASIC class. Operation to read device identification. inputs: int UnitID. outputs: DeviceIdentification ReadDeviceIdentificationResult. ReadMultipleRegisters Transparent Ready Modbus BASIC class. Operation to read multiple registers. inputs: int UnitID, int Address, int Quantity. outputs: int[] ReadMultipleRegistersResult. BTS iris - Lycée Eiffel - Armentières Page 5 sur 15 30/05/2007

WriteMultipleRegisters Transparent Ready Modbus BASIC class. Operation to write multiple registers. inputs: int UnitID, int Address, int[] Value. outputs: ReadCoils Transparent Ready Modbus REGULAR class. Operation to read multiple coils. inputs: int UnitID, int Address, int Quantity. outputs: int[] ReadCoilsResult. WriteMultipleCoils Transparent Ready Modbus REGULAR class. Operation to write multiple coils. inputs: int UnitID, int Address, int[] Value. outputs: ReadInt32 Extension of Transparent Ready Modbus REGULAR class. Operation to read integer (32 bits). inputs: int UnitID, int Address, int Quantity. outputs: int[] ReadInt32Result. WriteInt32 Extension of Transparent Ready Modbus REGULAR class. Operation to write integer (32 bits). inputs: int UnitID, int Address, int[] Value. outputs: Remarques : Les méthodes XXXRegisters() travaillent sur des mots mémoire (%MW) et les méthodes XXXCoils() travaillent sur des bits mémoire (%M). Le coupleur ETZ 510 est capable de traiter au maximum une requête SOAP toutes les 200 ms (appel d une méthode du Web Service). 3.2. Récupération du fichier WSDL du coupleur ETZ A l aide d un navigateur web, connectez-vous sur l adresse du coupleur ETZ : http://192.168.33.8 Cliquez sur Documentation puis Web Services. Choisissez le service web «ModbusXmlDa» (utilisation directe des adresses mémoires de l automate, les accès sont plus rapides que par les symboles) BTS iris - Lycée Eiffel - Armentières Page 6 sur 15 30/05/2007

Copier le raccourci vers WSDL 1.1 http://192.168.33.8/ws/modbusxmlda?wsdl BTS iris - Lycée Eiffel - Armentières Page 7 sur 15 30/05/2007

3.3. Intégration du fichier WSDL dans NetBeans Clic droit sur le projet > New > File / Folder > Web Services > Web Service Client Remplissez le champ «WSDL URL» avec l adresse du fichier WSDL récupéré précédemment Remplissez le champ «Package» avec modbusxmlda Cliquez sur Finish NetBeans génère le paquetage modbusxmlda. Les classes générées se situent dans le dossier \J2SELectureETZ\build\classes\ modbusxmlda. BTS iris - Lycée Eiffel - Armentières Page 8 sur 15 30/05/2007

Les méthodes du service web sont visibles dans l inspecteur de projet dans le dossier «Web Service References». 4. Codage de l application Nous créerons une classe Thread «ClassThreadLecture» pour appeler la méthode exportée du service web «readmultipleregisters()». La valeur lue par la caméra sera affichée dans la propriété «text» de JLblCamera du jframe. La lecture et l affichage s effectueront toutes les 200 ms. Le coupleur ETZ 510 est capable de traiter au maximum une requête SOAP toutes les 200 ms (appel d une méthode du Web Service). 4.1. ArrayOfInt readmultipleregister(int UnitID, int Adresse, int nbvaleur) Rappel : %MW162 = adresse mémoire de l automate contenant le code lu par la caméra Dans notre exemple, nous utiliserons la classe ArrayOfInt comme valeur de retour. Cette classe est créée avec le stub. BTS iris - Lycée Eiffel - Armentières Page 9 sur 15 30/05/2007

package modbusxmlda; import java.util.arraylist; import java.util.list; import javax.xml.bind.annotation.xmlaccesstype; import javax.xml.bind.annotation.xmlaccessortype; import javax.xml.bind.annotation.xmlelement; import javax.xml.bind.annotation.xmltype; @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "ArrayOfInt", proporder = { "_int" ) public class ArrayOfInt { @XmlElement(name = "int", namespace = "http://www.schneiderelectric.com/ws/modbusxmlda/", type = Integer.class) protected List<Integer> _int; public List<Integer> getint() { if (_int == null) { _int = new ArrayList<Integer>(); return this._int; Les paramètres de la méthode readmultipleregister() sont : UnitID = 0 par défaut car non utilisé dans la version actuelle Adresse = 162, cf. adresse mémoire désirée de l automate nbvaleur = nombre d adresses mémoires consécutives à lire 4.2. Création du Thread ClassThreadLecture Clic droit sur le paquetage com.iris > New > Java Class Nommez la nouvelle classe : ClassThreadLecture Modifiez le code généré pour : Dérivation de la classe Thread Création de la méthode run() package com.iris; public class ClassThreadLecture extends Thread { public ClassThreadLecture() { public void run() { BTS iris - Lycée Eiffel - Armentières Page 10 sur 15 30/05/2007

L appel de la méthode readmultipleregisters() du service web peut se faire de deux façons : Cliquer glisser la méthode à partir de l inspecteur de projets vers le code source Clic droit dans le code > Web Service Client Resources > Call web Service Operation > Sélectionnez la méthode readmultipleregisters() > OK Modifiez le code généré dans la méthode run() du Thread en respectant les consignes suivantes : Le code mémoire de la caméra est address = 162 Le thread doit lire en boucle toutes les 200 ms Le résultat de la lecture est affiché dans jlblcamera de ClassJFrameLecture Remarque : par souci de lisibilité, nous avons supprimé le nom du paquetage modbusxmlda devant chaque objet et nous avons importé le paquetage au début du code source : import modbusxmlda.* ; BTS iris - Lycée Eiffel - Armentières Page 11 sur 15 30/05/2007

package com.iris; import javax.swing.jlabel; import modbusxmlda.* ; // @author BTS iris Armentières public class ClassThreadLecture extends Thread { ModbusXmlDa service ; ModbusXmlDaSoap port ; ArrayOfInt result ; JLabel adrjlabel ; public ClassThreadLecture(JLabel prmlbl) { adrjlabel = prmlbl ; try { // Call Web Service Operation service = new modbusxmlda.modbusxmlda(); port = service.getmodbusxmldasoap(); catch (Exception ex) { //ex.printstacktrace(); public void run() { try { while (!interrupted()){ result = port.readmultipleregisters(0, 162, 1); adrjlabel.settext(result.getint().get(0).tostring()) ; sleep(200) ; // pour ne pas surcharger le service web ETZ // et en tenant compte du cycle de l'automate catch (InterruptedException ex) { //ex.printstacktrace(); 4.3. Modification de la classe principale ClassJFrameLecture Dans ClassJFrameLecture.java : Création d un attribut private ClassThreadLecture objthreadlecture ; Dans le constructeur, création de l objet Thread objthreadlecture = new ClassThreadLecture (jlblcamera) ; Création et lancement des Threads dans l évènement «onclick» du bouton JBtnLancer objthreadlecture.start() ; Arrêt des Threads dans l évènement «onclick» du bouton JBtnQuitter objthreadlecture.interrupt() ; try { objthreadlecture.join() ; catch (InterruptedException ex) { ex.printstacktrace(); BTS iris - Lycée Eiffel - Armentières Page 12 sur 15 30/05/2007

5. Copie d écran en exécution BTS iris - Lycée Eiffel - Armentières Page 13 sur 15 30/05/2007

6. Code source 6.1. ClassJFrameLecture.java package com.iris; /** * @author BTS iris Armentières */ public class ClassJFrameLecture extends javax.swing.jframe { private ClassThreadLecture objthreadlecture ; /** Creates new form ClassJFrameLecture */ public ClassJFrameLecture() { initcomponents(); objthreadlecture = new ClassThreadLecture (jlblcamera) ; // <editor-fold defaultstate="collapsed" desc=" Generated Code "> private void initcomponents() { [ ] // </editor-fold> private void jbtnlancermouseclicked(java.awt.event.mouseevent evt) { objthreadlecture.start() ; jbtnlancer.setenabled(false) ; private void jbtnquittermouseclicked(java.awt.event.mouseevent evt) { objthreadlecture.interrupt() ; try { objthreadlecture.join() ; catch (InterruptedException ex) { ex.printstacktrace(); System.exit(0) ; public static void main(string args[]) { java.awt.eventqueue.invokelater(new Runnable() { public void run() { new ClassJFrameLecture().setVisible(true); ); // Variables declaration - do not modify private javax.swing.jbutton jbtnlancer; private javax.swing.jbutton jbtnquitter; private javax.swing.jlabel jlblcamera; // End of variables declaration BTS iris - Lycée Eiffel - Armentières Page 14 sur 15 30/05/2007

6.2. ClassThreadLecture.java package com.iris; import javax.swing.jlabel; import modbusxmlda.* ; /** * @author BTS iris Armentières */ public class ClassThreadLecture extends Thread { ModbusXmlDa service ; ModbusXmlDaSoap port ; ArrayOfInt result ; JLabel adrjlabel ; public ClassThreadLecture(JLabel prmlbl) { adrjlabel = prmlbl ; try { // Call Web Service Operation service = new modbusxmlda.modbusxmlda(); port = service.getmodbusxmldasoap(); catch (Exception ex) { //ex.printstacktrace(); public void run() { try { while (!interrupted()){ result = port.readmultipleregisters(0, 162, 1); adrjlabel.settext(result.getint().get(0).tostring()) ; sleep(200) ; // pour ne pas surcharger le service web ETZ // et en tenant compte du cycle de l'automate catch (InterruptedException ex) { //ex.printstacktrace(); BTS iris - Lycée Eiffel - Armentières Page 15 sur 15 30/05/2007