Applet pour visualiser les variables «automate» notifiées Sommaire 1. Introduction...2 2. Lecture de variables «automate» notifiées...2 2.1. IHM servant au test :...2 2.2. Codage de l'applet :...2 3. Codage de l'applet de lecture notifiée...5 Lycée G. Eiffel - Armentières Page 1 sur 5 22/05/2006
1. Introduction Grâce aux librairies Java fournies par Schneider SAcomm.jar), il est possible de lire et écrire les valeurs des variables en mémoire. On peut ainsi connaître l état de la partie opérative : On peut lire le nombre de produits évacués pour chaque poste. Connaître les touches appuyées sur le clavier Lire et modifier la fréquence de chargement des produits Lire le numéro de produit reconnu par la caméra Dans ce document nous réaliserons un test de lecture en «mode notifié». 2. Lecture de variables «automate» notifiées 2.1. IHM servant au test : Cette IHM très simple servira à tester la lecture de variables notifiées. Exemple : nombre de produits évacués au poste 1 (%MW797). jtextfieldnbprodposte1 2.2. Codage de l'applet : Dans notre exemple nous ne mettrons en œuvre que la classe MonitorShort. Il est évident que pour d autres types de variables, il faut analyser le package SAcomm.jar pour trouver la fonction et / ou la classe correspondante (classes : MonitorInt, MonitorBool, ) Ref serialversionuid : long = 2136192383 status : int iddatatype : short address : String Ref(arg0 : short) getstatus() : int getdatatype() : short getbytevalue() : byte getshortvalue() : short getintvalue() : int getlongvalue() : long getfloatvalue() : float setstatus(arg0 : int) : void setdatatype(arg0 : short) : void isvalue() : boolean getaddress() : String setaddress(arg0 : String) : void addpropertychangelistener(arg0 : PropertyChangeListener) : void removepropertychangelistener(arg0 : PropertyChangeListener) : void firepropertychange(arg0 : String, arg1 : Object, arg2 : Object) : void getnumbervalue() : Number getnumbers() : Number[] getstring() : String firestatuspropertychange(arg0 : Integer) : void MonitorShort serialversionuid : long = 1996487035 MonitorShort() getvalue() : byte getvalues() : byte[] getvalues(arg0 : int) : byte MonitorShort(arg0 : ValueAdaptor) ReadRef serialversionuid : long = 2144335309 strval : String idvaluetype : short qty : short ReadRef(arg0 : short) getquantity() : short setquantity(arg0 : short) : void getvaluetype() : short setvaluetype(arg0 : short) : void initvals() : void getnumbers() : Number[] getstring() : String setvalues(arg0 : Number[]) : void setstring(arg0 : String) : void MonitorRef serialversionuid : long = -176226337 callbackname : String xactid : int fregistered : boolean fsubscribed : boolean subscribemsg : String finitialupdate : boolean MonitorRef(arg0 : short) isregistered() : boolean issubscribed() : boolean setquantity(arg0 : short) : void register() : void deregister() : void setdatatype(arg0 : short) : void setregistered(arg0 : boolean) : void setsubscribed(arg0 : boolean) : void MonitorRef(arg0 : ValueAdaptor, arg1 : short) getsubscribestatus() : String setaddress(arg0 : String) : void serverchanged(arg0 : ServerChangeEvent) : void updatevalue(arg0 : ValueChangeEvent) : void firestatuspropertychange(arg0 : Integer) : void setsubscribestatus(arg0 : String) : void Lycée G. Eiffel - Armentières Page 2 sur 5 22/05/2006
Voici les étapes fondamentales permettant de lire la valeur d une variable notifiée : On veut créer une applet qui sera automatiquement "notifiée" lors du changement de valeur d une variable dans la mémoire de l automate. Pour cela, la classe AppletLectureContinue doit implémenter l interface PropertyChangeListener afin de se mettre en écoute des changements de valeur des variables automate : import com.schneiderautomation.factorycast.* ; public class AppletLectureContinue extends Applet implements PropertyChangeListener Pour implémenter cette interface, il est nécessaire aussi d importer les classes : import java.beans.*; On créé une instance de la classe CommBean permettant de communiquer avec l automate : // Objet de communication avec l'automate private CommBean commfactorycast ; // Création de l'objet de communication avec l'automate commfactorycast = new CommBean() ; On créé une instance de la classe MonitorShort permettant de lire la valeur d une variable : /* Objet permettant de "surveiller" le changement de valeur d'une ou plusieurs variables dans la mémoire de l'automate */ private MonitorShort monitor ; MonitorShort permet de lire des variables de type short. Il existe d autres classes pour les autres types de variables (MonitorReal, MonitorString, ). On associe monitor, permettant la lecture notifiée, à l objet commfactorycast qui permet la communication avec l automate. /* Création de l'objet permettant de "surveiller" le changement de valeur d'une ou plusieurs variables dans la memoire de l'automate */ monitor = new MonitorShort(commFactoryCast.getAdaptor()); On définit quelques caractéristiques pour la lecture de variable en renseignant l objet de type MonitorShort. Ici on indique l adresse que l on veut lire (%MW797 correspond au Nombre de produits évacués au poste 1) : //Initialise le monitor monitor.addpropertychangelistener( this ); // redirection des évènements //automate vers les «listener» de l applet monitor.setaddress("%mw797"); monitor.register(); Lycée G. Eiffel - Armentières Page 3 sur 5 22/05/2006
On tente de se connecter à l automate et de démarrer la communication : try { // On tente une connexion avec l'automate commfactorycast.connect("192.168.33.8", false); // On lance la communication commfactorycast.start(); catch (Exception ex) { // Gestion d erreur System.out.println("Erreur :" + ex.getmessage()); On devra ensuite surcharger la méthode propertychange( PropertyChangeEvent evt ) de l interface PropertyChangeListener pour que l applet AppletLectureContinue puisse modifier le TextField à chaque changement de valeur de la variable notifiée de l automate PropertyChangeListener (from beans) propertychange(arg0 : PropertyChangeEvent) : void PropertyChangeEvent (from beans) PropertyChangeEvent(arg0 : Object, arg1 : String, arg2 : Object, arg3 : Object) getpropertyname() : String getnewvalue() : Object getoldvalue() : Object setpropagationid(arg0 : Object) : void getpropagationid() : Object On peut donc traiter les données suivant le type de changement de propriétés effectuées. Voici le prototype de la fonction propertychange() que l on doit surcharger : public void propertychange(propertychangeevent evt ) { String prop = evt.getpropertyname() ; if(prop.equals("value")) { valeur = monitor.getvalue(); // lecture des nouvelles valeurs // On affiche le résultat dans une zone d edition jtextfieldnbprodposte1.settext(string.valueof(valeur)); Le paramètre evt permet de d utiliser la fonction getpropertyname(). Grâce cette fonction, on peut récupérer le type d événement qui vient de se réaliser : «value» pour un changement de valeur de la variable récupérée par monitor.getvalue(). Lycée G. Eiffel - Armentières Page 4 sur 5 22/05/2006
La déconnexion s'effectue comme suit : try { commfactorycast.disconnect() ; catch(exception e) { // Gestion de l erreur System.out.println("Erreur :" + e.getmessage()); 3. Codage de l'applet de lecture notifiée En annexe, vous trouverez le code source de cette applet «test lecture notifiée» (Travail élève) Lycée G. Eiffel - Armentières Page 5 sur 5 22/05/2006