Le mode de surveillance permet de lire les valeurs des variables de serveur. Il remplace la méthode de regroupement en appelant périodiquement la méthode UA_ReadList.
Les blocs fonction suivants sont utilisés pour créer des souscriptions et y ajouter des éléments surveillés.
Création d'une souscription : Pour créer une souscription, un descripteur de connexion valide est nécessaire. Le descripteur de connexion est acquis à l'aide de UA_Connect une fois pour toutes. UA_SubscriptionCreate crée une souscription et doit être appelé pour chaque souscription nécessaire. La valeur SubscriptionHdl applicable est renvoyée lorsque l'exécution du bloc fonction UA_SubscriptionCreate aboutit.
Surveillance d'un élément : Pour surveiller un élément, un NodeHdl pour le noeud concerné est nécessaire. Par conséquent, UA_SubscriptionCreate et UA_NodeGetHandleList vont être appelés tous les deux avant l'appel du UA_MonitoredItemAddList associé.
Ajout d'éléments : UA_MonitoredItemAddList permet d'ajouter des éléments à une souscription identifiée par SubscriptionHdl. Les éléments à surveiller sont affectés à ce bloc fonction sous forme de descripteur de noeud NodeHdl.
Fin de souscription : Lorsque la communication est terminée, n'oubliez pas de supprimer la souscription. Libérez le descripteur de noeud avant de vous déconnecter. Si UA_SubscriptionDelete n'est pas appelé, la souscription continue de fonctionner, même si UA_NodeReleaseHandleList est appelé.

Modes de surveillance
Les modes de surveillance inversent l'interaction de communication : Le programme de contrôle initie la communication, mais cela entraîne la transmission de valeurs du serveur OPC UA vers le programme de contrôle.
Comme le montre le schéma ci-dessus, une souscription et des éléments surveillés doivent être configurés.
Il existe deux modes pour récupérer les valeurs les plus récentes au sein du programme de contrôle :
Synchronisation du contrôleur :
Utilisation du bloc fonction UA_MonitoredItemAddList avec UAMonitoringSyncMode (UAMS_ControllerSync) : les valeurs mises à jour sont récupérées une fois l'appel UA_MonitoredItemOperateList terminé. Cela signifie que la logique du programme de contrôle détermine quand les valeurs sont mises à jour. Si ce bloc n'est pas appelé, aucune mise à jour n'est fournie au programme de contrôle.
Le traitement actuellement spécifié des éléments surveillés et des souscriptions est basé sur la liaison d'un noeud UA (identifié par NodeHdl) à une variable d'automate (définie dans le programme de l'automate). En appelant le bloc fonction UA_MonitoredItemOperateList, les valeurs fournies par le serveur UA sont transférées dans les variables de l'automate.
Synchronisation du micrologiciel :
Le micrologiciel met à jour les valeurs en interne dans la mémoire du contrôleur.
Après avoir ajouté des éléments surveillés, le programme de contrôle peut appeler UA_SubscriptionProcessed pour savoir si des valeurs ont été modifiées. Cependant, le programme de contrôle n'a pas forcément la main sur le moment où les mises à jour sont déployées dans sa mémoire. En mode de synchronisation micrologiciel, la mise à jour est effectuée au début de la tâche MAST.
Les deux modes de surveillance (synchronisation du contrôleur et synchronisation du micrologiciel) sont fournis.
En général, une taille de file d'attente QueueSize supérieure à la taille du tableau de variables de l'automate renvoie une erreur détectée, indiquée dans les NodeErrorIDs correspondants de UA_MonitoredItemAddList immédiatement après le retour de l'appel. Un débordement (valeurs perdues) est signalé dans les NodeQualityIDs appropriés et les valeurs minimales perdues sont signalées dans le paramètre MinLostValueCount associé.
En général, une taille de file d'attente QueueSize supérieure à la taille du tableau de variables de l'automate renvoie une erreur détectée, indiquée dans les NodeErrorIDs correspondants de UA_MonitoredItemAddList immédiatement après le retour de l'appel. Un débordement (valeurs perdues) est signalé dans les NodeQualityIDs appropriés et les valeurs minimales perdues sont signalées dans le paramètre MinLostValueCount associé.
Le paramètre QueueSize défini dans la structure UAMonitoringParameter peut être utilisé pour indiquer le mode de surveillance : Avec la configuration de QueueSize > 1 dans le but de ne pas perdre de données modifiées, il incombe également à l'utilisateur de récupérer ces valeurs une par une.
QueueSize est donc utilisé pour déterminer le mode de fonctionnement comme suit :
QueueSize > 0 avec un exemple de file d'attente de cette taille. Si la valeur est "0", la valeur de QueueSize "1" est appliquée. Cela signifie que pour un élément surveillé, à la fois localement et côté serveur, le nombre de modifications de données pouvant être stockées est égal à QueueSize. Le serveur supprime les modifications de données si l'intervalle de publication est trop grand. Le client supprime les modifications de données si le cycle UA_MonitoredItemOperateList n'est pas suffisant. La stratégie de suppression du plus ancien est implicitement appliquée.
La taille maximale de file d'attente prise en charge est 3.