Définir une écriture de fichier xml intercalaire dans un automate WAGO ou un autre dispositif sur le réseau. Ce fichier utilise les spécification du plug-in
READPI pour obtenir de la part de l'automate les valeurs à relire. -cf doc du constructeur-
Deux applications iPhone/iPod sont disponibles (WagoLink et PLCLink) pour la présentation des valeurs sur un iPhone, à noter qu'un navigateur est aussi utilisable
après transformation du fichier XML résultat vers un fichier HTML.
Le fichier WagoML ne donne pas d'indication sur la présentation finale des informations, c'est du ressort de l'aapplication.
Un fichier produisant une sortie xml est introduit dans l'automate dans le dossier "webserv", il est appelé par l'application iPhone Wagolink pour affichage des résultats.
La définition de WagoML comporte les spécifications des éléments (tags) xml utilisés dans ce fichier.
Un fichier WagoML débute par les lignes suivantes :
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE wagoml PUBLIC "-//wagoml org//DTD WAGOML 1.0//EN" "http://pautex.fr/wago/DTD/WagoML-1.0.dtd"> <wagoml version="1.0" xmlns="http://pautex.fr/wago/">
Les éléments suivant sont utilisés (pas de traduction possible des items):
Ces éléments de WagoML ne sont pas tous exploités avec l'application Wagolink qui se limite au strict minimum l'application PLCLink exploite l'ensemble des items présentés avec plus de fonctions.
Un item est un block autonome, il comporte le titre de la variable, sa valeur et sa représentation sur l'iPhone, celle-ci est souvent issue d'un calcul pour la mise à l'échelle de la variable. L'item comporte aussi un lien de retour pour une action qui se réalisera.
type = lineaire
Le calcul "lineaire" est de la forme : x = data * coef + offset, d'autre méthodes peuvent se rajouter par la suite. Il y a plusieurs "item" en général
chacun correspond à un block d'affichage complet.
type = "variant"
Les types "varian" et "log11" sont spécifiques aux données des gauges à vide Varian :
type = "text"
Le type "text" nécessite une liste dans <text> pour obtenir le texte à afficher, séparez les items texte avec une virgule.
<text>Eteint,Allumé</text>
affichage = "time"
L'affichage "time" affiche : Heure:Minute en provenance d'une variable 16 bits au format : HHMM
Sur l'item ayant ce modèle d'affichage, la présence d'un lien de retour rendra l'item éditable.
Un fichier texte à charger dans l'automate dans le dossier "/webserv" via une connexion FTP sur l'automate :
Fichier disponible sur le lien suivant pour test : http://pautex.fr/wago/automat.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE wagoml PUBLIC "-//wagoml//DTD WAGOML 1.0//EN" "http://pautex.fr/wago/DTD/WagoML-1.0.dtd"> <wagoml version="1.0"> <items> <item id="0"> <ref>0</ref> <title>Test</title> <name>Température</name> <description>IW1</description> <type>lineaire</type> <unit>°C</unit> <coef>0.00793481</coef> <offset>-200</offset> <IW><!--#READPI ADR=IW1&FORMAT=%d--></IW> </item> <item id="1"> <ref>1</ref> <title>Test</title> <name>Lampe</name> <description>QX0</description> <type>direct</type> <coef>1</coef> <offset>0</offset> <IW><!--#READPI ADR=QX0.0&FORMAT=%d--></IW> </item> </items> </wagoml>
Est indiqué, dans la balise "IW" la syntaxe de remplacement de l'automate lors d'un appel de ce fichier, à voir les détails dans la documentation wago.
Est affiché la température, étiquette "Température" du tag <name>, la variable est dans le tag <IW> en texte, elle represente
un nombre (WORD).
Le calcul est une équation linéaire t = ax+b avec a = 0.00793481 indiqué dans le tag : <coef>,
le terme b = -200 indiqué dans le tag <offset>
L'unité sera derrière la valeur indiquée est ici : °C dans <unit>.
La plage de mesure est définie sur le module d'entrée de l'automate par l'intégrateur du dispositif.
Le fichier de DTD 1.0 est le suivant :
<!-- Document type declaration : wagoml Pautex JF 10/2009-2010 adresse du doc : http://pautex.fr/wago/DTD/WagoML-1.0.dtd --> <!-- wagoml : root element of any WagoMl document --> <!ELEMENT wagoml (title?, refresh?, items?, rooms?)> <!ATTLIST wagoml version CDATA #FIXED '1.0'> <!ATTLIST wagoml xmlns CDATA #IMPLIED> <!ATTLIST wagoml xmlns:xml CDATA #IMPLIED> <!-- rooms --> <!ELEMENT rooms (setting?,room*)> <!ELEMENT room (title, refresh?,pin?,modbuslog?,record?, items)> <!-- items --> <!ELEMENT refresh (#PCDATA)> <!ELEMENT items (title?, item*)> <!ELEMENT setting (title, name, modbuslog?, mbsynchrone?)> <!-- item --> <!ELEMENT item (ref?, title, pin?, email?, display?, name, description?, type?, text?,unit?, coef?, offset?, format?, minimum?, maximum?, IW?, affichage?, iframedelegate?, height?, link?, wagolink?, url?, user?, password?,IP?,unitID?,IB?,OB?)> <!ATTLIST item id CDATA #REQUIRED> <!ATTLIST room id CDATA #REQUIRED> <!-- elements de item --> <!ELEMENT ref (#PCDATA)> <!ELEMENT title (#PCDATA)> <!ELEMENT display (#PCDATA)> <!ELEMENT name (#PCDATA)> <!ELEMENT description (#PCDATA)> <!ELEMENT type ( #PCDATA )> <!ELEMENT text ( #PCDATA )> <!ELEMENT unit (#PCDATA)> <!ELEMENT coef (#PCDATA)> <!ELEMENT offset (#PCDATA)> <!ELEMENT format (#PCDATA)> <!ELEMENT minimum (#PCDATA)> <!ELEMENT maximum (#PCDATA)> <!ELEMENT IW (#PCDATA)> <!ELEMENT affichage (#PCDATA)> <!ELEMENT link (#PCDATA)> <!ELEMENT wagolink (#PCDATA)> <!ELEMENT url (#PCDATA)> <!ELEMENT user (#PCDATA)> <!ELEMENT password (#PCDATA)> <!ELEMENT IB (#PCDATA)> <!ELEMENT IP (#PCDATA)> <!ELEMENT OB (#PCDATA)> <!ELEMENT unitID (#PCDATA)> <!ELEMENT pin (#PCDATA)> <!ELEMENT modbuslog (#PCDATA)> <!ELEMENT record (#PCDATA)> <!ELEMENT mbsynchrone (#PCDATA)> <!ELEMENT email (#PCDATA)> <!ELEMENT height (#PCDATA)> <!ELEMENT iframedelegate (#PCDATA)>
Il est possible de tester la validité du fichier WagoMl sur un validateur exemple : ici pour le fichier test
Le lien teste le fichier de démonstration.
nom : wagoml
fonction : Elément racine d'un fichier de type WagoML
type : texte
occurrence : unique
parents : aucun
attributs :
nom : version
type : texte
nom : xmlns
type : texte
nom : xmlns:xml
type : texte
nom : title
fonction : Titre du fichier, titre de la mesure apparition non définie
type : texte
occurrence : simple, éventuelle
parents : wagoml
attributs : aucun
nom : items
fonction : Conteneur des éléments item
type : texte
occurrence : simple
parents : wagoml
enfants : item
attributs : aucun
nom : item
fonction : Délimite un block pour affichage d'une information
type : texte
occurrence : multiple
parents : items
enfants : ref, title, display, name, description, type, unit, coef, offset, minimum, maximum, IW, link, affichage, wagolink
attributs : nom : id type : numérique, donne l'ordre d'affichage débute à zéro
nom : ref
fonction : Référence de cette mesure, débute à 0 puis 1 etc..., donne l'ordre d'affichage sur la présentation
type : numérique
occurrence : simple éventuelle
parents : item
attributs : aucun
Remplacé par un attribut "id=" dans <item>
nom : title
fonction : Titre de la source
type : texte
occurrence : simple
parents : item
attributs : aucun
nom : display
fonction : | block | none | Mode d'affichage de la source, block par défaut.
type : texte
occurrence : simple, éventuelle
parents : item
attributs : aucun
nom : name
fonction : Nom de la variable, sera affichée avant la valeur
type : texte
occurrence : simple
parents : item
attributs : aucun
nom : description
fonction : Nom et description de la variable SSI pour un READPI sur automate, pour mémoire
type : texte
occurrence : simple
parents : item
attributs : aucun
nom : type
fonction : Type de calcul à faire : | lineaire | direct | varian | log11 | text |
type : texte
occurrence : simple
parents : item
attributs : aucun
Le type "text" fera la substitution de la variable par un élément de la liste des textes, voir balise 21 : <text> sera implementé sur Wagolink 1.4
nom : unit
fonction : Unité ajoutée après la mesure par exemple : °C, A, V etc...
type : texte
occurrence : simple
parents : item
attributs : aucun
nom : coef
fonction : Coef multiplicateur de la mesure si besoin, mesure de type : lineaire
type : Valeur numérique du coef
occurrence : simple éventuelle
parents :
attributs : aucun
nom : offset
fonction : Offset de la mesure sera ajouté si besoin, mesure de type : lineaire
type : valeur numérique de l'offset.
occurrence : simple éventuelle
parents : item
attributs : aucun
nom : format
fonction : format numérique d'affichage par exp %.2f pour les flottants. La format par défaut est : "%.1f"
type : texte
occurrence : simple éventuelle
parents : item
attributs : aucun
Sera appliqué avant représentation d'une valeur, pour limiter le nombre de chiffres significatifs.
nom : minimum
fonction : Valeur minimum du slider si défini dans affichage
type : Entier numérique
occurrence : simple éventuelle
parents : item
attributs : aucun
Sera appliqué visible sur un slider à sa gauche.
nom : maximum
fonction : Valeur maximum du slider si ce type est défini dans affichage
type : Entier numérique
occurrence : simple éventuelle
parents : item
attributs : aucun
Sera appliqué et visible à droite du slider.
nom : IW
fonction : Mesure directe remplacée par l'automate via une commande SSI READPI
type : texte
occurrence : simple
parents : item
attributs : aucun
C'est un élément important, la variable sera indiquée par l'automate via une commande SSI placée ici, exemple :
- Lecture du mot (W) entrée 0 <IW><!--#READPI ADR=IW0&FORMAT=%d--></IW>
- Lecture une sortie Byte (B) out 0.0 <IW><!--#READPI ADR=QX0.0&FORMAT=%d--></IW>
NOTE : Il ne faut pas utiliser l'écriture & sur cette commande, elle est typiquement pour l'automate et non destinée à un transfert sur
Internet, étant dans un commentaire, la validité du fichier XML est préservé.
nom : affichage
fonction : | button | switch | slider | text | time | : donnera un aspect à l'affichage de la valeur par défaut = "text".
type : texte
occurrence : simple, éventuelle
parents : item
attributs : aucun
nom : link
fonction : Lien url éventuel vers le serveur pour exécution d'une fonction sur un serveur, pour button, switch, slider
type : texte
occurrence : simple éventuelle
parents : item
attributs : aucun
Lien vers le serveur que le bouton, le switch ou le slider fera sur activation, le lien débute par : http://... et sera toujours en mode "GET".
Le lien assurera que le fonction du bouton sera faite.
Dans ce lien, placer une variable sous la forme ( ....php?variable=%d ), la valeur "%d" (entier numérique) sera ajouté par l'application WagoLink avant exécution.
l'expression "%d" dans le lien fixe indique un remplacement à faire par la nouvelle valeur.
Note 1 : Pour un slider
La syntaxe de l'url du <link> est libre contrairement à la syntaxe de <wagolink> plus bas. Typiquement vous envoyez une commande
vers une page du serveur qui est responsable de l'exécution de la commande via une programmation PHP.
Note 2 :
nom : wagolink
fonction : Lien url éventuel vers automate pour exécution d'une fonction sur automate, pour button et slider et switch, prioritaire sur <link>
type : texte
occurrence : simple éventuelle
parents : item
attributs : aucun
Lien que le bouton, le switch ou le slider fera (http://) vers l'automate en mode "POST" (comme le formulaire). Ce type est prioritaire sur <link>
Placer une URL complète comme pour un formulaire de l'automate. la valeur "%d" entier numérique sera placée par l'application compatible avant exécution.
l'expression "%d" dans le lien indique un remplacement à faire par une nouvelle valeur.
Exemple : <wagolink>http://193.168.10.10/WRITEPI?ADR1=MW0&VALUE1=%d&FORMAT1=%d </wagolink>
Note 1 : La syntaxe des paramètres : ADR1=, VALUE1=, FORMAT1= est imposé par le plug-in SSI WAGO.
La syntaxe est plus rigide que le "link" ci dessus puisque les paramètres sont obligatoires.
C'est un lien vers l'automate, pour un pseudo formulaire sur la methode "WRITEPI", est spécifié ainsi la variable de l'automate à modifier
et la valeur de la variable (%d) qui indique au remplaceur ou placer la nouvelle valeur (VALUE1=%d). Cette nouvelle valeur est l'état du switch
"1" ou "0" ou la valeur d'un slider (nombre entier).
ATTENTION : former correctement l'url (écriture du symbole & = & en particulier).
Note 2 : Le mode de passage des paramètres en "POST" n'empêche pas de pointer vers un serveur autre que l'automate visé.
- Plus de détails sur cette page : link ou wagolink ?
nom : text
fonction : Liste des textes de substitution pour une variable entière
type : texte
occurrence : simple
parents : item
attributs : aucun
Liste de textes uniquement pour le type : "text" et l'affichage : "text", les items sont séparés par une simple virgule. Le premier item est pour la valeur "0".
Il fera la substitution de la variable entrante sur "IW" par un texte de la liste.
Les autre types : lineaire, variant et direct ne sont pas concernés.
exemple : <text>Arrêt,Marche,Erreur</text>, si "IW" = 1 alors il affichera "Marche"
nom : refresh
fonction : temps en ms du refresh de la page, par défaut 2000ms
type : numérique
occurrence : simple
parents : wagoml
attributs : aucun
nom : rooms
fonction : Réalise un cloisonnement des informations sur le même automate
type : texte
occurrence : simple éventuelle
parents : wagoml
enfants : room
attributs : aucun
nom : room
fonction : conteneur des "item" descripteurs, title est le titre de la room
type : texte
occurrence : multiple
parents : rooms
enfants : title, pin, item
attributs : nom : "id", type : numérique débute à zéro
nom : url
fonction : url du fichier wagoML
type : texte
occurrence : unique
parents : item
enfants : aucun
attributs : aucun
nom : password
fonction : Password du réglage
type : texte
occurrence : unique
parents : item
enfants : aucun
attributs : aucun
nom : IP
fonction : IP de automate pour transfert Modbus
type : texte
occurrence : unique
parents : item
enfants : aucun
attributs : aucun
nom : url
fonction : Variable IEC1131, nom ou adresse numérique décimale
type : texte
occurrence : unique
parents : item
enfants : aucun
attributs : aucun
contact : Pautex JF