4 - Chapitre Iv - Opc - Copie
4 - Chapitre Iv - Opc - Copie
4 - Chapitre Iv - Opc - Copie
Serveurs/clients OPC (OLE (Object Linking and Embedding) for Process Control)
OPC signifie
définition récente
OPC UA s'appuie exclusivement sur XML; cette norme a pour objet de définir les moyens d'accès aux informations à un niveau élevé
( typiquement MES, ERP) ; elle présente l'avantage de ne pas être liée à une spécification propriétaire (DCOM) et de pouvoir être implantée sur
toute structure (automate, microcontroleur...)
Serveur OPC - Pierre Bonnet 10
SERVEURS OPC
Sur quelle architecture repose OPC [version "classique"] ?
- la spécification COM/DCOM de Microsoft
Distributed Component Objet Model
- COM implémente les connections entre les différents composants logiciels d'une
application et forme un "bus" logiciel indépendant du langage de programmation.
- COM n'est intégré nativement que sur machine Windows d'où difficulté d'intégration
directe d'un serveur ou d'un client sur une machine embarquée (automate...).
- le modèle COM ou ActiveX est conçu pour permettre à des applications d'accéder à des
composants pré-écrits et enregistrés sur une machine Windows. Le composants ActiveX
est généralement un fichier de type exe , dll ou ocx . C'est une norme propriétaire
(Microsoft) et non ouverte , sa durée de vie est imposée par le propriétaire . Microsoft
souhaite actuellement faire disparaître DCOM au profit de .NET
- Tous les composants ActiveX suivent un modèle de programmation unique défini par
Microsoft. Les outils de développement usuels (famille Visual Studio) permettent de gérer
le modèle de façon transparente pour le programmeur.
- Pour le client (appelant), tous les composants ActiveX sont accessibles par
l'intermédiaire de pointeurs d'interface. Si le composants est sur la même machine que
l'appelant (composant in-process) , l'appel du client est direct pour le composant.
- Lorsque le composant ActiveX est hors de la machine du client (out-of-process) , l'appel atteint
d'abord un objet de type proxy fourni par le modèle COM. Cet appel est reçu par un stub
(squelette de classe) sur la machine distante, qui appelle lui-même le composant COM .
Source: http://pagesperso-orange.fr/visual.basic/mandcom.htm
Attention : l'appel au composant distant nécessite une gestion des droits d'accès sur le client et sur le
serveur (voir http://www.opcactivex.com par exemple)
Interface IOPC Shut Down qui permet aux serveurs de signaler à leurs
clients qu ’ils s ’arrêtent
Collecter les données issues des périphériques matériels (lecture) ou leurs faire parvenir
les mises à jour de données (écriture)
Ces opérations sont périodiques (lecture) ou apériodiques (lecture, écriture), en mode
synchrone (attente de la réponse/acquittement) ou asynchrone (réponse/acquittement
signalée par un évènement)
Répondre aux requêtes de clients (fournir les données, écrire vers le matériel...)
Avertir les clients abonnés des changements d ’état des variables par un évènement
Pour le client, l' Item OPC ne représente pas la valeur de la donnée source mais la
référence à cette donnée.
Plusieurs Items peuvent exister pour la même donnée source (méthodes d'accès
différentes, redondance...)
Le client peut s'informer de la structure du serveur par une requête du type "Browse"
Serveur OPC - Pierre Bonnet 18
SERVEURS OPC
Exemple de Structure de données d ’un serveur OPC Data Access (côté serveur)
Source: Kassl.de
L ’objet Groupe contient les informations sur lui-même et décrit l ’organisation logique des
items côté client.
Les Groupes peuvent être renommés ou créés dynamiquement à la demande du client. Leur
contenu est modifiable dynamiquement par le client.
- son nom
- son type (Simple, Entier, flottant, Booléen, énumération, tableau...)
- sa valeur
- sa qualité (bon, mauvais, incertain...)
- son unité de mesure, échelle mini, maxi
- son horodatage (timestamp) [ heure UTC]
- ses propriétés ( commentaire, droits lecture/écriture,
vitesse de rafraîchissement, fuseau horaire...)
Chaque client construit son ou ses groupes d'items sur le serveur à l'aide des fonctions
spécifiques . Il définit le mode d'accès :
- direct (écriture)
- cyclique (lecture)
- abonnement à un changement dans le groupe (évènement)
Serveur OPC - Pierre Bonnet 23
SERVEURS OPC
Structure de données d ’un serveur OPC Data Access
Objet Item OPC (exemple analysé à l'aide du browser Kassl)
Source: kassl.de
Source: Faweb
Connexion
Set MyServer = New OPCServer
MyServer.Connect (ServeurId)
Déconnexion
MyServer.Disconnect
Set MyServer = Nothing
Attention : Toutes ces fonctions peuvent générer des erreurs, par exemple si la
connexion est refusée (erreur sur le nom du serveur) , le nombre maximum de groupes
atteints... Il est impératif de prévoir leur gestion.
Sub mon_programme
On Error GoTo Gestion_Erreur
mes_commandes_source_erreur 'connexion ou déconnexion par ex.
...
Exit Sub
Gestion_Erreur:
MsgBox "Erreur!"
End sub
Les Items seront construits dans un tableau et déposés dans un groupe avec un appel unique
de méthode au Serveur OPC .
Lecture item
MyItem.Read OPCDevice
valeur_item = MyItem.Value
qualite_item = MyItem.Quality
horodatage_item = MyItem.TimeStamp
La méthode de lecture utilisée ici est la lecture simple synchrone (blocage de l'appelant
en attente de la réponse)
Ecriture item
MyItem.Write (valeur_a_ecrire)
Ces opérations peuvent être faites sur un groupe complet avec des opérations
asynchrones (performances améliorées)
client serveur
Lecture synchrone : le client est
Call bloqué dans sa tache jusqu'à la fin
MyGroup.SynchRead() de traitement de l'écriture par le
serveur
End
client serveur
Lecture asynchrone : le client peut
Call continuer sa tâche (sur processeur
MyGroup.AsyncRead()
multicore). Il est prévenu de la fin de
End lecture par le serveur par appel de la
procédure évènementielle.
MyGroup_AsyncReadComplete()
client serveur
Ecriture synchrone : le client est
Call bloqué dans sa tache jusqu'à la fin
MyGroup.SynchWrite() de traitement de l'écriture par le
serveur (ce temps comprend la
End lecture ou l'écriture physique de la
sortie sur le matériel couplé au
serveur)
client serveur
Ecriture asynchrone : le client peut
MyGroup.AsyncWrite() Call continuer sa tâche (sur processeur
multicore). Il est prévenu de la fin de
End l'écriture par le serveur par appel de
la procédure événementielle (gestion
MyGroup_AsyncWriteComplete() des éventuelles erreurs d'écriture,
cycle suivant...)
Source: Faweb
Dynamic Data Exchange ne tient pas compte des spécificités des environnements
industriels
DDE est la propriété de Microsoft qui n'a pas souhaité maintenir cette
fonctionnalité depuis de nombreuses années (abandon total sur la plate-forme .net
puis sur Win Seven ) au profit de COM . Certains éditeurs (Wonderware)
poursuivent la maintenance des liaisons établies sous DDE (FastDDE).