Cours Supervision DDE - bonnet/supervision/cours_dde.pdf · • Les commandes de base d'échange...

20
1 Master ASE SMaRT – Supervision Industrielle – P. Bonnet LIAISON DDE MASTER ASE SMaRT Pierre BONNET 2011-2012

Transcript of Cours Supervision DDE - bonnet/supervision/cours_dde.pdf · • Les commandes de base d'échange...

1Master ASE SMaRT – Supervision Industrielle – P. Bonnet

LIAISON DDE

MASTER ASE

SMaRT

Pierre BONNET2011-2012

2Master ASE SMaRT – Supervision Industrielle – P. Bonnet

PRINCIPE DE LA LIAISON DDE ENTRE TACHES

• Processus d ’échange natif sous Windows

- existe depuis les premières versions de Windows- en concurrence avec d'autres technologies comme les named

pipes, mailslots, NetBIOS, Windows Sockets, Remote Procedure, Calls RPC.

intégré à de nombreux logiciels usuels (Word, Excel, Matlab, OpenOffice...)

mode d'échange parmi les plus utilisés dans le monde industriel.

évolutions FastDDE, AdvanceDDE...

Les fonctions DDE ne plus supportées par Microsoft, en particulier dans VB.. Des bibliothèques libres sont disponibles sur le Web exemple : http://files.codes-sources.com ou http://ndde.codeplex.com/

3Master ASE SMaRT – Supervision Industrielle – P. Bonnet

Chaque application possède une interface de gestion de la liaison DDE

Un lien DDE ne peut être lancé sur une application serveur que si cette dernière a été conçue pour répondre à ce type d'événement (interface serveur).

Pour faciliter l ’écriture des interfaces, Microsoft propose la bibliothèque C de développement Dynamic Data Exchange Management Library (DDEML). Le langage Delphi offre par exemple une très grande facilité pour créer l ’interface d ’une application serveur.

PRINCIPE DE LA LIAISON DDE ENTRE TACHES

4Master ASE SMaRT – Supervision Industrielle – P. Bonnet

FONCTIONNEMENT DE LA LIAISON DDE ENTRE TACHES

Fonctionnement général du service:

• Demande d'ouverture du canal de communication faite par le client. DDEInitiate

- Le client reçoit un « handle » identifiant sa connexion au serveur.

- Si l'application serveur n'est pas lancée, le système peut la lancer automatiquement (option) .

- En cas d'échec d'accès à l'application serveur, le client est informé.

- Le serveur peut rejeter la demande de connexion

• Fermeture du canal en fin d ’échange DDETerminate

5Master ASE SMaRT – Supervision Industrielle – P. Bonnet

Fonctionnement général du service:

• Echange de données à la demande du client

demande de lecture d ’une donnée sur le serveur:

DDERequest

demande d ’écriture d ’une donnée sur le serveur:

DDEPoke

demande d'éxécution d'un script (chaîne) sur le serveur:

DDEExecute

• Type de données échangées: toute donnée en format « clipboard » (presse-papier)

en ASCII TEXT DDE FORMAT en BINARY TABLE DDE FORMAT("Fast-Table")

FONCTIONNEMENT DE LA LIAISON DDE ENTRE TACHES

6Master ASE SMaRT – Supervision Industrielle – P. Bonnet

Eléments de définition du lienUn lien vers une application serveur est défini par 3 champs:

• le champ Application désigne le nom DDE de l'application serveur.

[Le nom du service DDE peut être différent du nom du programme]

• le champ Topic interprété par le serveur.

ce champ désigne généralement une fonctionnalité de base du serveur, comme par exemple le fichier sur lequel le serveur doit travailler.

• le champ Item interprété par le serveur désigne généralement le nom de la variable à échanger.

Ce champ est optionnel; certaines applications "serveur" n'y font pas référence

FONCTIONNEMENT DE LA LIAISON DDE ENTRE TACHES

7Master ASE SMaRT – Supervision Industrielle – P. Bonnet

Structure de données d ’un serveur multi-applications

FONCTIONNEMENT DE LA LIAISON DDE ENTRE TACHES

Certains serveurs peuvent présenter plusieurs services DDE (le superviseur Panorama en est un exemple; chaque service est spécifié par un nom d'application différent (ou un nom de topic différent selon la conception du serveur).

8Master ASE SMaRT – Supervision Industrielle – P. Bonnet

Exemple de lien DDE sur Tableur Excel (formule)

• Excel est à la fois serveur et client DDE

• L'écriture d'une liaison DDE est directe dans le sens Serveur -->Excel (client)

le lien DDERequest fait partie du vocabulaire des formules de calcul Excel (champ calculé)

• la syntaxe de la formule Excel est := Application | Topic ! Item

L'affectation d'une valeur à une cellule par un lien DDE est équivalent à un DDERequest automatique

• sous OpenOffice, la formule est :

= DDE(Application ; Topic ; Item)

FONCTIONNEMENT DE LA LIAISON DDE ENTRE TACHES

9Master ASE SMaRT – Supervision Industrielle – P. Bonnet

Exemple: Lien DDE sur tableur Excel (formule)

• Exemple: échange entre deux applications Excel ouvertes simultanément

serveur « Compta.xls » client « Recap.xls »

lecture de la cellule A1 du classeur « Compta » par l ’application « Recap » ; la valeur sera affichée dans la cellule B1 du classeur "Recap »

formule de B1 : = ‘ Excel ’ | ‘ Compta.xls ’ !  ’L1C1 ’

Remarques:

• la syntaxe de désignation des cellules du type Ligne/Colonne (vocabulaire transposé en Row/Column en anglais mais refusé sur un Excel français!).

• le lien DDE écrit sous forme de fonction dans une cellule est exécuté automatiquement lors de la réécriture de la valeur source sur le serveur . La suppression du recalcul automatique côté client entraîne l'arrêt de l'échange DDE.

FONCTIONNEMENT DE LA LIAISON DDE ENTRE TACHES

10Master ASE SMaRT – Supervision Industrielle – P. Bonnet

PROGRAMMATION VBA DE LA LIAISON DDE

Activation de la liaison DDE sous programmation VBA

• Les commandes de base d'échange DDE sous VBA sont:NumLien = DDEInitiate(DdeApplName, TopicName)

DDEPoke NumLien, ItemName, ValeurValeur = DdeRequest(NumLien, ItemName)

DDETerminate(NumLien)

Les paramètres DDEApplName, TopicName et ItemName sont de type chaîne de caractères.

• Les commandes sont "bloquantes" pour l'application cliente en cas de lenteur ou de non réponse du serveur. La liaison est dite synchrone : le client attend la réponse du serveur

Un mécanisme de TimeOut existe pour sortir de ces fonctions en cas de blocage prolongé

11Master ASE SMaRT – Supervision Industrielle – P. Bonnet

• Il est possible de demander au serveur d'avertir le client de tout changement dans la donnée demandée (liaison asynchrone).

DDEAdvise DDEUnadvise

Le client est prévenu par un évènement- il reçoit automatiquement la donnée (« hot link »)- il demande la donnée (« warm link ») sur réception de l'évènement

• Fonctions non-implantées en VBA

Existent dans de nombreux autres langages

• plus d'information sur les aspects synchrone/asynchrone : http://www.angelfire.com/biz/rhaminisys/ddeinfo.html

PROGRAMMATION DE LA LIAISON DDE

12Master ASE SMaRT – Supervision Industrielle – P. Bonnet

• Exemple de liaison asynchrone Matlab<-->Excel (DDEAdvise) % Initialize conversation with Excel.chan = ddeinit('excel', 'Classeur1');

% Set range of cells in Excel for poking.

range = 'l1c1:l20c20';

% Create a surface of peaks plot.

h = surf(peaks(20));

% Get the z data of the surface.

z = get(h, 'zdata');

% Poke the z data to the Excel spread sheet.

rc = ddepoke(chan, range, z);

% Set up a hot link ADVISE loop with Excel

% The callback (event) sets the zdata and cdata for the surface h to be the new data sent from Excel.

rc = ddeadv(chan, range,'set(h,''zdata'',z);set(h,''cdata'',z);','z');

% Create a push button that will end the ADVISE terminate the DDE conversation,

c = uicontrol('String','&Close','Position',[5 5 80 30],'Callback',...

'rc = ddeunadv(chan,range);ddeterm(chan);close;');

PROGRAMMATION DE LA LIAISON DDE

13Master ASE SMaRT – Supervision Industrielle – P. Bonnet

PROGRAMMATION DE LA LIAISON DDE

• La fonction DDEExecute permet de transmettre des instructions à l ’application serveur (elle-même pouvant les retransmettre au périphérique éventuellement)

Exemples d ’application: - mise en service de l ’appareil, arrêt, programmation de l ’appareil- exécution d'une "macro" dans Excel DDEExecute("[RUN("MyMacro")]")

La fonction "execute" suppose que le serveur peut interpréter des commandes sous forme de chaîne de caractère (par exemple: Matlab, Excel...)

14Master ASE SMaRT – Supervision Industrielle – P. Bonnet

PROGRAMMATION DE LA LIAISON DDE

• Exemple de fonction DDEExecute Excel-->Matlab

'Exemple de lien DDE avec une variable Matlab du type vecteurSub Lien_Matlab()Dim MyArrayDim MyChannel'Demarrage MatlabShell "C:\Matlab6\bin\win32\Matlab.exe"MyChannel = DDEInitiate("Matlab", "Engine")DDEExecute MyChannel, "h=peaks(10);colormap(pink);mesh(h);drawnow"MyArray = DDERequest(MyChannel, "h")Sheets("feuil1").SelectRange("A1:J10").Value = MyArray'Fermeture de MatlabDDEExecute MyChannel, "exit"'Fermeture du lien DDEDDETerminate MyChannelEnd Sub

15Master ASE SMaRT – Supervision Industrielle – P. Bonnet

PROGRAMMATION DE LA LIAISON DDE

• Recherche des liens modifiés dans un classeur

'Liste des liens DDE ou OLE du classeur et définition de la procédure à exécuterSub LinkList()

Dim ListeLiens As VariantListeLiens = ActiveWorkbook.LinkSources(xlOLELinks)If Not IsEmpty(ListeLiens) Then

For i = 1 To UBound(ListeLiens)ActiveWorkbook.SetLinkOnData ListeLiens(i), "LinkChange" & Mid$(Str$(i), 2, 1)'Définit la procédure à appeler si le lien i change

Next iElse

MsgBox "Ce classeur ne contient pas de liaison DDE ou OLE" End IfEnd Sub

'Procédures à exécuter sur changement de valeur DDE ou OLESub LinkChange1()

MsgBox "Lien 1 modifié"End SubSub LinkChange2()

MsgBox "Lien 2 modifié"End Sub

L'événement Worksheet_Change() ne répond pas à un changement de valeur d'un lien DDE.La méthode SetLinkOnData permet de lancer une procédure en cas d'activation d'un lien DDE ou OLE .

16Master ASE SMaRT – Supervision Industrielle – P. Bonnet

LIAISON DDE ENTRE DEUX TACHES RESEAU

Lien NetDDE

• Le lien NetDDE permet d ’établir l ’échange DDE entre deux applications supportées par deux machines distantes reliées en réseau (ethernet)

Le lien NetDDE est fait par le module NetDDE.exe fourni par divers constructeurs (Wonderware, Microsoft...)

17Master ASE SMaRT – Supervision Industrielle – P. Bonnet

Lien NetDDE

• Le module NetDDE est un service sous WindowsXP droits d ’administration réservés aux utilisateurs autorisés démarrage manuel ou automatique

• Le service NetDDE gère les droits d ’accès du client auprès du serveur sécurité des transactions

Les informations d ’administration du lien DDE sont sauvegardées dans la base de registre (HKEY_LOCAL_MACHINE\Software\Microsoft\NetDDE\DDE Shares\ )

• Le service NetDDE présente un interface de type DDE côté application pas de modification de l ’applicatif pour un travail en réseau

LIAISON DDE ENTRE DEUX TACHES RESEAU

18Master ASE SMaRT – Supervision Industrielle – P. Bonnet

Lien NetDDE (WinXP): Propriétés

LIAISON DDE ENTRE DEUX TACHES RESEAU

19Master ASE SMaRT – Supervision Industrielle – P. Bonnet

Lien NetDDE: Fonctionnement

LIAISON DDE ENTRE DEUX TACHES RESEAU

20Master ASE SMaRT – Supervision Industrielle – P. Bonnet

LIAISON DDE Complément

Lien DDE sous VB6Il est possible de lier un contrôle VB6 (boîte Texte, curseur...) à un serveur DDE externe. Les fonctions sont différentes de la syntaxe VBA; de plus, la fonction hotlink/warm link est possible.

Lecture synchroneLabel1.LinkTopic = "Excel|Classeur1.xls" ‘ DDE Service Name and TopicLabel1.LinkItem = "Tension" ‘ DDE Item NameLabel1.LinkMode = 2 ‘ 0=no link 1=warm link 2=cold linkLabel1.LinkRequest... ‘ Request Data from ExcelLabel1.LinkMode = 0 ‘ Close the linkEcritureLabel1.LinkTopic = "Excel|Classeur1.xls"Label1.LinkItem = "Courant" ‘ DDE Item NameLabel1.LinkMode = 2 Label1.Caption = "1.23" ‘ Set up data stringLabel1.LinkPoke... ‘ Send dataLabel1.LinkMode = 0 ‘ Close the link