2016-08-22 1 views
0

J'utilise le protocole OpcNetApi.dll d'OPC Foundation pour communiquer avec un serveur OPC DA.Fermer Connexions OPC DA

Je suis curieux de savoir s'il existe un moyen de supprimer des connexions spécifiques qui sont actuellement actives sur le serveur en utilisant cette bibliothèque ou une bibliothèque similaire.

+0

ces abonnements sont-connexions au serveur OPC? Si c'est le cas, vous pouvez probablement essayer de les supprimer par programmation. – jdecuyper

+0

Je commence à penser qu'ils sont des abonnements. Mon collègue a dit qu'il était en mesure de mettre fin à toutes les connexions, mais ils ont réapparu instantanément lorsque j'ai redémarré mon service. Je pense que je fais quelque chose de mal. Cependant, la réponse à ma question serait toujours intéressante à apprendre. –

+0

Pourriez-vous partager le code que vous utilisez pour récupérer des données du serveur OPC DA? Cela pourrait nous aider à comprendre ce qui ne va pas. – jdecuyper

Répondre

0

Je ne suis pas positif, mais je ne pense pas que ce que vous demandez est toujours possible (sans débogueur). OPC est basé sur Microsoft COM. La COM peut être mise en œuvre de deux manières: in-proc et out-of-proc. Le choix dépend du fournisseur du serveur OPC.

Avec une implémentation in-proc, si vous exécutez le client OPC sur la même machine que le serveur OPC, le serveur OPC est juste une DLL chargée directement dans l'espace mémoire du client OPC. Cette dll expose les interfaces OPC comme CreateGroup, ReadAllItems, etc. Maintenant, il s'agit probablement d'obtenir les données réelles via un autre mécanisme (nommé pipe, TCP/IP, etc.) mais cela dépend encore de l'implémentation du serveur OPC. La seule façon de vraiment forcer l'arrêt de ce serveur OPC est de mettre fin au client OPC ou d'obtenir le programme client OPC. Bien sûr, le client OPC ou le serveur OPC peut déjà avoir implémenté un mécanisme pour terminer, mais il n'y a pas de garantie.

S'il s'agit d'une implémentation OPC non conforme, le serveur OPC s'exécutera dans un exécutable distinct afin que vous puissiez trouver le nom de cet exécutable et le terminer. (Vous pouvez rechercher dans regedit le nom du serveur OPC pour trouver le nom de l'exécutable correspondant). Si je me souviens bien, le serveur OPC peut être conçu pour que tous les clients partagent un exécutable ou que chaque client OPC obtienne sa propre instance de l'exécutable.

Si vous exécutez le serveur OPC à distance, il sera probablement chargé à l'intérieur d'un programme de remplacement s'il s'agit d'une implémentation in-proc puis lié à RPC. Si vous bloquez les ports sur lesquels RPC communique, je pense que la plupart des clients décideraient de se déconnecter après un certain temps, bien qu'il n'y ait pas de garantie, ils ne tenteront pas de se reconnecter plus tard.

Voici quelques plus d'informations: https://www.opcsupport.com/link/portal/4164/4590/Article/711/May-I-get-a-In-Proc-and-Out-Of-Proc-explanation

+0

Merci pour votre réponse. Supposons que nous parlons en-proc. Aussi, en mettant de côté les threads, comment peut-on obtenir même un nombre ou une liste de connexions actives à partir de l'interface? –