Upload
lehanh
View
248
Download
2
Embed Size (px)
Citation preview
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