DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Fonctions WLangage / Communication / Fonctions OLE
  • Présentation
  • Programmation Automation pour OPC
  • Présentation
  • Déterminer le nom du serveur OPC à utiliser
  • Spécificités de la programmation Automation pour OPC
  • Limitations du WLangage
  • Erreurs renvoyées par le serveur Automation
  • Interfaces Automation pour le mode Asynchrone
  • Notes
  • Exemple
  • Dialogue avec un serveur OPC UA
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Présentation
OPC est le terme employé pour désigner "OLE for Process Control".
OPC est une implémentation standardisée à base de OLE/COM pour la gestion des périphériques physiques (automates, alarmes, capteurs, ...).
Pour plus d'informations, consultez le site : http://www.opcfoundation.org/
WINDEV permet d'accéder à des données :
  • via Automation.
  • via ActiveX (spécification OPC DA Auto 2.0).
  • via un serveur OPC UA.
L'utilisation de OPC en WINDEV est donc effectuée grâce à un objet Automation ou d'un ActiveX qui sert de couche client OPC. Cet objet Automation ou cet ActiveX est en général fourni par le constructeur du matériel électronique.
Le fonctionnement global de OPC avec WINDEV utilise donc les principes de base de la programmation des objets Automation et des ActiveX.
Remarque : Dans la suite du document, les objets Automation et les ActiveX seront désignés par les termes génériques "objets Automation".
Programmation Automation pour OPC

Présentation

La programmation des objets Automation pour OPC en WLangage correspond à la programmation des objets Automation en général. Pour plus d'informations, consultez l'aide des Objets Automation.
Il y a toutefois quelques contraintes liées aux normes OPC et aux implémentations internes des objets Automation fournis.

Déterminer le nom du serveur OPC à utiliser

Pour utiliser la syntaxe automation, il est nécessaire de connaître le nom du serveur OPC. Ce nom est propre à chaque fournisseur de matériel OPC.
Ce nom ne peut être trouvé automatiquement. Pour connaître cette information, contactez le fournisseur du serveur OPC.

Spécificités de la programmation Automation pour OPC

1. Les indices des tableaux commencent à 1
Il est absolument nécessaire de forcer l'indice de début des tableaux au début du code d'initialisation du projet par ligne de code suivante :
AutomationParamètre(apIndiceBaseTableau, 1)
Pour plus de détails, consultez l'aide de la fonction AutomationParamètre.
2. Le passage des paramètres des types simples (entier, chaîne, ...) par référence n'est généralement pas accepté.
En WINDEV, le passage par référence est le mode par défaut. Il est nécessaire de forcer le passage des variables par valeur en encadrant chaque paramètre de parenthèses. Par exemple :
oServeur>>Connect((sServeurOPC),(sNomMachine))
3. Gestion des tableaux :
  • Les tableaux en entrée doivent être passés par valeur (en encadrant le paramètre de parenthèses)
  • Les tableaux en sortie doivent être obligatoirement créés de taille 0 et passé par référence.
Exemple :
nTabHandleServeur est un tableau de 1 entier // entrée
nTabValeur est un tableau de 0 Variant // sortie
nTabErreurSortie est un tableau de 0 entier // sortie
...
oGroupe>>SyncRead(2,1,(nTabHandleServeur),vTabValeur,nTabErreur)
4. Pour le mode asynchrone (rappel de procédure WLangage par l'objet Automation), les objets Automation généralement fournis proposent des interfaces sans description. Il est donc nécessaire d'utiliser la première syntaxe de la fonction AutomationEvénement.

Limitations du WLangage

En mode asynchrone, pour manipuler un tableau de valeurs il est nécessaire de manipuler les cases du tableau une par une. Cette fonctionnalité n'est pas disponible dans cette version.

Erreurs renvoyées par le serveur Automation

Les informations contenues dans les erreurs sont directement renvoyées par les objets Automation.
Le manque d'informations provient donc de l'implémentation de l'objet Automation OPC.
Il ne nous est pas possible de documenter tous les cas d'erreurs de tous les fournisseurs.

Interfaces Automation pour le mode Asynchrone

1. Détermination par la base de registre
Il est possible de chercher les Interfaces automation pour le mode asynchrone dans la base de registre sur une machine sur laquelle a été installé l'objet Automation à utiliser.
Pour trouver l'interface des événements du serveur OPC, rechercher "DIOPCServerEvent" dans les données. La clé contenant cette valeur est la clé à utiliser.
Pour trouver l'interface des événements du groupe OPC, rechercher "DIOPCGroupEvent" dans les données. La clé contenant cette valeur est la clé à utiliser.
Pour trouver l'interface des événements de l'ensemble des groupes OPC, rechercher "DIOPCGroupsEvent" dans les données. La clé contenant cette valeur est la clé à utiliser.
Si plusieurs valeurs sont trouvées, c'est qu'il y a plusieurs objets Automation OPC installés sur la machine :
  • la sous-clé TypeLib à une valeur "(par défaut)" du genre : {01704EB3-44B5-11D3-9C09-00105A3DD3AC} qui correspond à l'identifiant de l'objet Automation
  • faire une recherche de clé de cette valeur trouvée {01704EB3-44B5-11D3-9C09-00105A3DD3AC}
  • cette clé possède des sous-clé du genre "1.0" ou "2.0" qui donne le nom de l'objet Automation OPC qui fournit l'interface
2. Détermination par OLEView
"OLE View" est un outil livré avec MS Visual Studio.
  1. Lancer OLE View.
  2. Dans l'arbre de gauche, ouvrir la branche "Type Libraries".
  3. Chercher le client OPC voulu : par exemple, "Siemens OPC DAAutomation 2.0" ou "Matrikon OPC Automation 2.0".
  4. Double-cliquer sur la ligne de l'arbre pour afficher la description : une nouvelle fenêtre s'ouvre avec un arbre à gauche et du texte à droite.
  5. Copier tout le texte dans un éditeur de texte.
Pour trouver l'interface des événements du groupe OPC, rechercher "dispinterface DIOPCGroupEvent" pour trouver un bloc ressemblant au bloc suivant :
[
uuid(F8582D2B-88FB-11D0-B850-00C0F0104305),
helpstring("OPC Group Events"),
nonextensible
]
dispinterface DIOPCGroupEvent {
properties:
methods:
[id(0x00000001)]
void DataChange(
[in] long TransactionID,
[in] long NumItems,
[in] SAFEARRAY(long)* ClientHandles,
[in] SAFEARRAY(VARIANT)* ItemValues,
[in] SAFEARRAY(long)* Qualities,
[in] SAFEARRAY(DATE)* TimeStamps);
[id(0x00000002)]
void AsyncReadComplete(
[in] long TransactionID,
[in] long NumItems,
[in] SAFEARRAY(long)* ClientHandles,
[in] SAFEARRAY(VARIANT)* ItemValues,
[in] SAFEARRAY(long)* Qualities,
[in] SAFEARRAY(DATE)* TimeStamps,
[in] SAFEARRAY(long)* Errors);
[id(0x00000003)]
void AsyncWriteComplete(
[in] long TransactionID,
[in] long NumItems,
[in] SAFEARRAY(long)* ClientHandles,
[in] SAFEARRAY(long)* Errors);
[id(0x00000004)]
void AsyncCancelComplete([in] long CancelID);
};
L'interface est donnée au début du bloc : ici {F8582D2B-88FB-11D0-B850-00C0F0104305}.
Le numéro d'événement est donné pour chaque événement : ici, id(0x00000001) pour l'événement DataChange.
Pour trouver l'interface des événements du serveur OPC, rechercher "dispinterface DIOPCServerEvent " pour trouver un bloc ressemblant au bloc suivant :
[
uuid(F8582D26-88FB-11D0-B850-00C0F0104305),
helpstring("OPC Server Event"),
nonextensible
]
dispinterface DIOPCServerEvent {
properties:
methods:
[id(0x00000001)]
void ServerShutDown([in] BSTR Reason);
};
L'interface est donnée au début du bloc : ici { F8582D26-88FB-11D0-B850-00C0F0104305}.
Le numéro d'événement est donné pour chaque événement : ici, id(0x00000001) pour l'événement ServerShutDown.

Notes

  • WINDEV supporte les fonctionnalités Client OPC d'accès aux données.
  • WINDEV supporte la spécification DA Auto 2.0 (accès aux données par interface Automation).
  • WINDEV ne supporte pas les tableaux de valeurs en mode asynchrone. Si le tableau est de petite taille, il est possible de définir un élément OPC pour chaque valeur du tableau.

Exemple

WINDEV est fourni en standard avec un exemple de gestion OPC. Cet exemple ne peut pas être utilisé en l'état. Il doit être adapté à votre serveur OPC.
Liste des exemples associés :
WD OPC Exemples didactiques (WINDEV) : WD OPC
[ + ] Cet Exemple montre l'implémentation du protocole OPC en WINDEV.
OPC signifie OLE for Process Control.
C'est une implémentation standardisée à base de OLE/COM pour la gestion des périphériques physiques (automates, alarmes, capteurs, ...).
Pour plus d'informations, consultez l'aide de WINDEV ou le site : http://www.opcfoundation.org/
WINDEV permet la mise en place d'accès aux données par Automation ou par ActiveX (spécification OPC DA Auto 2.0).
L'utilisation de OPC en WINDEV passe donc par l'utilisation d'un objet Automation ou d'un ActiveX qui sert de couche client OPC.
Cet objet Automation ou cet ActiveX est en général fourni par le constructeur du matériel électronique.
Le fonctionnement global de OPC en WINDEV se ramène donc aux principes de base de la programmation des objets Automation et des ActiveX.
Dialogue avec un serveur OPC UA
WINDEV permet de dialoguer avec un serveur OPC UA. Pour plus de détails, consultez l'exemple fournit avec le produit.
Liste des exemples associés :
WD OPC UA Exemples didactiques (WINDEV) : WD OPC UA
[ + ] Cet exemple montre comment dialoguer avec un serveur OPC UA.
Version minimum requise
  • Version 9
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 25/05/2022

Signaler une erreur ou faire une suggestion | Aide en ligne locale