2016-08-22 3 views
0

Я использую OPC Foundation OpcNetApi.dll для связи с сервером OPC DA.Закройте соединения OPC DA

Мне любопытно, есть ли программный способ убить определенные соединения, которые в настоящее время активны на сервере, используя эту библиотеку или аналогичную библиотеку.

+0

Являются ли эти соединения подписки на сервер OPC? Если это так, вы могли бы попытаться удалить их программно. – jdecuyper

+0

Я начинаю думать, что они подписки. Мой коллега сказал, что он смог завершить все подключения, но они сразу же появились, когда я возобновил свою службу. Я думаю, что я делаю что-то неправильно. Однако ответ на мой вопрос будет интересен для изучения. –

+0

Не могли бы вы использовать код, который вы используете для извлечения данных с сервера OPC DA? Это может помочь нам понять, что происходит не так. – jdecuyper

ответ

0

Я не уверен, но я не думаю, что то, о чем вы просите, всегда возможно (без отладчика). OPC основан на Microsoft COM. Существует два способа, с помощью которых можно реализовать COM: in-proc и out-of-proc. Выбор зависит от поставщика OPC-сервера.

С внедрением в proc, если вы используете OPC-клиент на том же компьютере, что и OPC-сервер, тогда OPC-сервер - это просто DLL, загружаемая непосредственно в пространство памяти клиента OPC. Эта dll предоставляет интерфейсы OPC, такие как CreateGroup, ReadAllItems и т. Д. Теперь это, вероятно, получение фактических данных через какой-либо другой механизм (именованный канал, TCP/IP и т. Д.), Но это снова зависит от реализации сервера OPC. Единственный способ действительно остановить этот OPC-сервер - это прекратить работу OPC-клиента или получить клиентскую программу OPC. Конечно, OPC-клиент или OPC-сервер, возможно, уже реализовали механизм для завершения, но нет гарантии.

Если это реализация OPC вне очереди, тогда OPC-сервер будет запускаться в отдельном исполняемом файле, чтобы вы могли найти имя этого исполняемого файла и завершить его. (Вы можете выполнить поиск в regedit для имени OPC-сервера, чтобы найти соответствующее исполняемое имя). Если я правильно помню, OPC-сервер может быть спроектирован так, чтобы все клиенты имели один исполняемый файл, или каждый OPC-клиент получает свой собственный экземпляр исполняемого файла.

Если вы запускаете OPC-сервер удаленно, он, вероятно, будет загружен внутри программы-заглушки, если он будет реализован в-proc, а затем привязан к RPC. Если вы блокируете порты, обмениваемые RPC, я думаю, что большинство клиентов решат отключиться через некоторое время, хотя нет никакой гарантии, что они не будут пытаться повторно подключиться позже.

Вот еще информация: https://www.opcsupport.com/link/portal/4164/4590/Article/711/May-I-get-a-In-Proc-and-Out-Of-Proc-explanation

+0

Благодарим вас за ответ. Предположим, мы говорим в-proc. Кроме того, останавливая нити в сторону, как можно получить хотя бы число или список активных соединений из интерфейса? –

Смежные вопросы