Как посмотреть список opc серверов в windows

Получить список всех доступных локальных OPC серверов C# Решение и ответ на вопрос 909682

Доброго времени суток.
Пытаюсь получить список зарегистрированных OPC серверов.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpcEnumLib;
namespace OpcEnumLib
{
    class Program
    {
        static void Main(string[] args)
        {
OpcServerList list = new OpcServerList();
Guid clsidcat = new Guid("{63D5F432-CFE4-11D1-B2C8-0060083BA1FB}");
IOPCEnumGUID pIOPCEnumGuid;
list.EnumClassesOfCategories(1, ref clsidcat, 0, ref clsidcat, out pIOPCEnumGuid);
               }
    }
}

Выдает ошибку:

Невозможно привести COM-объект типа «OpcEnumLib.OpcServerListClass» к интерфейсному типу «OpcEnumLib.IOPCServerList2». Операция завершилась со сбоем, поскольку вызов QueryInterface COM-компонента для интерфейса с IID «{9DD0B56C-AD9E-43EE-8305-487F3188BF7A}» возвратил следующую ошибку: Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

Что уже только не пробовал, перерегистрировал все либы в ручную, переустанавливал opc сервера, переустанавливал OPC Core Components Redistributable с офф сайта, ничего не помогает.
Может кто сталкивался с подобным? Гуглил ничего по данному вопросу не всплывало.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

Узнайте доступные серверы доступа к данным

Предпосылки

Чтобы взаимодействовать с Сервером OPC, для программного обеспечения OPC Toolbox™ нужны два данных:

  • Имя узла компьютера, на котором был установлен Сервер OPC. Обычно имя узла является описательным термином (таким как 'plantserver') или IP-адрес (такой как 192.168.2.205).

  • ID сервера сервера вы хотите получить доступ на том хосте. Поскольку одиночный компьютер может разместить больше чем один Сервер OPC, каждому Серверу OPC, установленному на том компьютере, дают уникальный идентификатор во время процесса установки.

Ваш администратор сети сможет предоставить вам имена узлов для всех компьютеров, обеспечивающих Серверы OPC в вашей сети. Можно также получить список идентификаторов сервера для каждого хоста в сети, или можно использовать функцию тулбокса opcserverinfo к идентификаторам сервера доступа от хоста, как описано в следующем разделе.

Определите идентификаторы сервера для хоста

Когда Сервер OPC установлен, уникальный ID сервера должен быть присвоен тому Серверу OPC. ID сервера обеспечивает уникальное имя для конкретного экземпляра Сервера OPC на хосте, даже если несколько копий того же программного обеспечения сервера установлены на той же машине.

Чтобы определить идентификаторы сервера Серверов OPC, установленных на хосте, вызовите opcserverinfo функция, задавая имя узла в качестве единственного аргумента. Когда названо этим синтаксисом, opcserverinfo возвращает структуру, содержащую информацию обо всех Серверах OPC, доступных на том хосте.

info = opcserverinfo('localhost')

info = 
                 Host: 'localhost'
             ServerID: {1x4 cell}
    ServerDescription: {1x4 cell}
     OPCSpecification: {'DA2'  'DA2'  'DA2'  'DA2'}
    ObjectConstructor: {1x4 cell}

Поля в структуре, возвращенной opcserverinfo предоставьте следующую информацию.

Информация о сервере Возвращена opcserverinfo

Поле

Описание

Host

Вектор символов, который идентифицирует имя хоста. Обратите внимание на то, что никакое разрешение имени не выполняется на IP-адресе.

ServerID

Массив ячеек, содержащий идентификаторы сервера всех Серверов OPC, доступных от того хоста.

ServerDescription

Массив ячеек, содержащий описательный текст для каждого сервера.

OPCSpecification

Массив ячеек, содержащий Спецификацию OPC, которую обеспечивает сервер.

ObjectConstructor

Массив ячеек, содержащий синтаксис по умолчанию, можно использовать, чтобы создать OPC Data доступ к Объекту клиента, сопоставленному с сервером. Смотрите Создают Объект клиента DA для получения дополнительной информации.

  • Remove From My Forums
  • Question

  • Господа! Прошу помощи!
    Проблема в следующем:
    Есть машина с ОС «Win 2003 Server», в домене, (обновления обновляются).

    После деинсталляции одного «кривого» OPC сервера на машине исчез список локальных OPC серверов. Ни одним OPC эксплорером не виден. СКАДА перестала получать данные от всех ОРС серверов.
    Поковырявшись в Инете, вычитал, что необходимо прорегистрировать OPCENUM. (opcenum.exe /Service)
    Список появился :o

    Потом после переборов, деинсталляции и настроек разных OPC серверов, после очередного удаления ОРС сервера и перезагрузки, список слетел опять. Но повторная регистрация уже ни чего не давала. 

    С сайта opcfoundation.org скачал «OPC Core Components Redistributable» (OPCENUM вместе с DLL-ками). Помогло наполовину
    :wall: Списка не видно в ОРС-Эксплорере, но СКАДА со всех ОРС серверов получает данные.
    Отдельные ОРС серверы этой машины (половину списка) можно увидеть, если подключиться к ней с другой машины. Отдельные ОРС серверы запускаются удаленной машиной и передают данные, но самого перечня серверов не видно.
    Матрикон Эксплорер просто выдает какую-то ошибку типа: «Access violation at address 004F0DB3 in module ‘OPCExplorer.exe’. Read of address 00000060.», после чего можно создать на удаленной машине в ОРС-эксплоре группу, и получать достоверные данные.

    Как восстановить список OPC серверов?

    Спасибо за ответы!

Answers

  • Вопрос по конкретному приложению лучше решать в форуме по этому приложению — быстрее получите ответ.


    Сазонов Илья http://www.itcommunity.ru/blogs/sie-wl/

    • Edited by

      Tuesday, October 4, 2011 6:29 AM

    • Marked as answer by
      Vinokurov Yuriy
      Monday, October 10, 2011 7:35 PM

Поразбиравшись какое-то время как правильно настроить передачу OPC-тегов по сети Ethernet я понял, что подобная настройка не совсем сложная, но слегка мудреная для тех, кто не связывался с настройкой Windows. Решил преподнести данный материал в своем блоге.

Это вторая версия статьи. Первая версия писалась в спешке и не отражала полной настройки системы. В этом материале исправлены ошибки прошлого. В любом случае, пишите комментарии, задавайте вопросы 🙂

Общий план работ

Чтобы настройка не была головной болью, нужно соблюдать определенную последовательность действий.

  1. Введение — вода всякая 🙂
  2. Проверка OPC локально — OPC-клиент на сервере должен без проблем получать данные с локального OPC-сервера.
  3. Отключение брандмауэра — по-началу это упрощает настройку, пока еще нет четкого понимания что нужно разрешать.
  4. Настройка пользователей — связка логин/пароль должна быть одинаковой на обоих компьютерах.
  5. Настройка DCOM — общие настройки, обеспечивающие работоспособность DCOM на компьютерах.
  6. Настройка OpcEnum для работы через DCOM — служба, которая отображает OPC-сервера компьютера на котором она запущена.
  7. Настройка целевого OPC-сервера для работы через DCOM — в моем случае это CoDeSysOPCDA
  8. Включение брандмауэра и создание правил — с отключенным брандмауэром жить не комфортно! Здесь же и проверим как данные летают

Введение

У меня есть отдельные требования для настройки:

  • доступ к OPC-серверу будет осуществляться по логину и паролю
  • доступ будет осуществляться только к тому OPC-серверу, который мы укажем

Вариант где все для всех разрешено описывать не буду.

Что мы имеем:

  • Условный сервер (так и будем его далее называть) – этот компьютер связывается с контроллером. В моем случае это виртуальная машина с Windows 7 Professional SP1 с последними обновлениями и CoDeSys 3.4. Виртуалка имеет имя W7-DCOM-1.
  • В качестве контроллера выступает софтовый PLC от CoDeSys.
  • Условный клиент – компьютер с OPC DA клиентом — в моем случае это еще одна виртуалка с Windows 7 Professional SP1 с последними обновлениями, в качестве OPC-клиента я выбрал продукт от kassl.de. Виртуалка имеет имя W7-DCOM-2.
  • Обе виртуалки находятся в рабочей группе, домен отсутствует, связь между ними есть.

Проверка OPC локально

Для проверки я запустил OPC-клиент, подключился к предварительно настроенному OPC-серверу на сервере. После того как есть 100%-ая уверенность в работоспособности OPC-сервера локально можно приступать к настройке DCOM.

Проверка работы OPC на локальном компьютере

Отключение брандмауэра

Наша цель — настроить OPC через DCOM, а по-началу брандмауэр может в этом помешать. Поэтому сперва с отключенной защитой мы настраиваем наше ПО и убеждаемся, что все настроено и работает, а в конце подключаем защиту. Так проще искать ошибки в процессе.

Настройка пользователей

На обоих компьютерах должны быть пользователи с одинаковыми логинами и паролями, причем пароль должен быть не пустым. В домене можно использовать одну учетную запись. Для теста я выбрал логин opc и пароль opc — конечно же, не рекомендую использовать такую простую связку в продакшне 🙂

Итак, переходим к настройке пользователей. Текстовую последовательность я снабдил скриншотами, которые помогут проще ориентироваться в тексте. Конечно же, опытный пользователь может создать/настроить юзера так как ему будет угодно, тем не менее я предлагаю такой вариант.

  1. Запускаем компонент управления учетными записями пользователей control userpasswords2.
  2. В окне нажимаем кнопку Добавить для добавления нового пользователя в систему.
  3. В следующем окне задаем логин opc (поле Пользователь), и имя с описанием по желанию и жмем кнопку Далее.
  4. Задаем пароль opc и подтверждение, жмем Далее.
  5. Далее выбираем группу Администратор (или другую, которая позволит запускать OPC-сервер) и жмем кнопку Готово.
  6. Пользователь создан и появляется в списке Пользователи этого компьютера«. Для включения автологина, нужно выделить юзера в этом списке и снять галку Требовать ввод имени пользователя и пароля. Решать вам, нужен автологин или нет.Затем нужно сделать две вещи. Добавить юзера в группу Пользователи DCOM (таким образом всю настройку мы сможем выполнять для группы, а не для конкретного пользователя — это может быть полезно в будущем при смене пароля для opc или изменении пользователя) и настроить запрет смены пароля юзером (это на всякий случай). Для этого переходим на вкладку Дополнительно. В секции Дополнительное управление пользователями нажимаем кнопки Дополнительно (уж простите Майкрософт за тавтологию …).
  7. В появившемся окне слева выбираем Группы и дабл-клик на группу Пользователи DCOM.
  8. В открывшемся окне есть кнопка Добавить, которая запускает диалог добавление юзера в группу.
  9. В поле для ввода пишем логин opc и жмем кнопку OK, если все хорошо, то окно закроется …
  10. … а в следующем окне в списке Члены группы появится наш opc. Теперь можно закрыть окно.
  11. Далее слева выбираем пункт Пользователи и дважды кликнем на нашего opc, в появившемся окне ставим галки Запретить смену пароля пользователем и Срок действия не ограничен, подтверждаем кнопкой OK и закрываем окно настройки пользователей и групп.
  12. Также подтверждаем настройки кнопкой OK в оставшемся окне. Но окно не закроется, а выскочит просьба ввести логин и пароль пользователя для автологина. Введем данные нашего юзера и подтвердим кнопкой OK.

Внимание! Эти действия необходимо провести как на сервере, так и на клиенте.

1. Создание и настройка пользователя

2. Создание и настройка пользователя

3. Создание и настройка пользователя

4. Создание и настройка пользователя

5. Создание и настройка пользователя

6. Создание и настройка пользователя

7. Создание и настройка пользователя

8. Создание и настройка пользователя

9. Создание и настройка пользователя

10. Создание и настройка пользователя

11. Создание и настройка пользователя

12. Создание и настройка пользователя

13. Создание и настройка пользователя

14. Создание и настройка пользователя

Настройка DCOM

В данном разделе нужно настроить свойства DCOM по умолчанию на сервере, чтобы «все работало». Приступим.

  1. Запустим окно настройки DCOM командой dcomcnfg .
  2. Откроется окно Службы компонентов, в котором нужно будет раскрыть список Службы компонентов, а затем и список Компьютеры, где мы увидим еще один вложенный список Мой компьютер, на который нужно нажать правой кнопкой мыши и выбрать пункт меню Свойства.
  3. В появившемся окне свойств выбираем вкладку Свойства по умолчанию и устанавливаем следующие настройки:
    1. Галка Разрешить использование DCOM на этом компьютере — без нее DCOM работать не будет.
    2. В Уровень проверки подлинности по умолчанию выбираем Подключиться.
    3. В Уровень олицетворения по умолчанию выбираем Определить.
  4. После жмем кнопку OK. Система может предупредить о том, что будут изменены свойства DCOM — соглашайтесь. Окно Службы компонентов не закрывайте, оно нам еще понадобится.

Те же настройки необходимо провести и на клиенте за исключением пунктов 3.2 и 3.3 — они не повлияют на работу, но и не повредят. Самое главное, чтобы DCOM был разрешен.

1. Общие настройки DCOM

2. Общие настройки DCOM

3. Общие настройки DCOM

Настройка OpcEnum для работы через DCOM

Служба OpcEnum отвечает за отображение OPC-серверов. Если ее настроить некорректно, то при браузинге серверов, вы не увидите ничего, кроме ошибок. Эту службу нужно настроить на сервере.

  1. В окне Служба компонентов должно уже быть открыто дерево до Настройка DCOM. Нужно выбрать этот элемент в левой части окна, и после этого в правой найти OpcEnum, кликнуть на него правой кнопкой мышки и выбрать пункт меню Свойства.
  2. Откроется окно свойств, и во вкладке Общие в списке Уровень проверки подлинности выбрать Подключиться.
  3. Во вкладке Размещение должен быть выбран пункт Запустить приложение на данном компьютере. Остальные галки должны быть сняты.
  4. Далее переходим к вкладке безопасность, где будем раздавать права на удаленный запуск, доступ и изменение настроек OpcEnum. Во всех трех случаях выбираем пункт Настроить, т.е. у нас должны быть активны три кнопки Изменить.
  5. Начнем с Разрешение на запуск и активацию. Нам нужно добавить нашу группу с необходимыми разрешениями, поэтому кликаем на кнопку Добавить.
  6. Вписываем (или ищем) Пользователи DCOM, жмем OK — группа должна добавиться.
  7. Итак, группа в списке, теперь надо проставить галки под словом Разрешить. (На скриншоте) Я поставил все галки, но для того чтобы служба работала по сети нам нужно лишь Удаленный запуск и Удаленная активация. После проставления галок жмем OK и открываем следующее окно — Права доступа.
  8. Точно так же добавляем нашу группу и разрешаем ей все, либо только Удаленный доступ, жмем OK и открываем окошко Разрешение на изменение настроек.
  9. В этом окне точно так же добавляем группу и разрешаем ей Полный доступ и Read — они ставятся одновременно и снимаются так же. Жмем OK и переходим ко вкладке Удостоверение окна свойств OpcEnum.
  10. Для службы OpcEnum возможно два варианта запуска:
    1. Системная учетная запись (только службы) — OPC-сервер будет запущен под системной учетной записью независимо от входа в систему. Данный вариант нам подходит и его советуют как более предпочтительный.
    2. Указанный пользователь — при данной настройке OPC-сервер будет  запущен от имени указанного нами пользователя в одном экземпляре, в независимости от того под какой учетной записью совершен вход. Этот вариант нравится мне больше, т.к. я люблю определенность, ведь в данном случае я сам указываю пользователя.
  11. Определившись нажимаем OK и переходим к перезапуску службы OpcEnum. Это можно сделать из того же окна: слева выбираем Службы (локальные), справа в  списке ищем OpcEnum, выбираем и перезапускаем нажатием на появившуюся ссылку.
  12. Дожидаемся перезапуска службы и переходим к клиенту.
  13. На клиенте запускаем OPC-клиент и пытаемся искать OPC-сервера, используя IP-адрес нашего сервера. Как видно на скриншоте — OPC-сервер найден.
  14. Но при попытке достучаться до тэгов прилетает отказ. Этого следовало ожидать, ведь мы еще не настраивали наш CoDeSysOPCDA.

Настройка целевого OPC-сервера для работы через DCOM

Итак, мы вплотную подобрались к настройке ПО, которое будет выдавать нам теги на клиенте. Настройка не сильно отличается от процедуры, описанной в предыдущем разделе.

  1. В Настройка DCOM ищем необходимый OPC-сервер (в данном случае — CoDeSysOPCDA), тыкаем правой кнопкой мыши и выбираем свойства.
  2. На вкладке Общие выбираем Уровень проверки подлинности Подключиться.
  3. На вкладке Размещение должен быть выбран только пункт Запустить приложение на данном компьютере.
  4. На вкладке Безопасность группе Пользователи DCOM даем права на удаленный запуск, доступ и изменение настроек как и в случае с OpcEnum (ниже будут скриншоты).
  5. На вкладке Удостоверение у нас есть 4 варианта:
    1. Текущий пользователь — в этом случае OPC-сервер будет запускаться от имени вошедшего в систему пользователя. Можно использовать данный вариант, но необходимо на сервере авторизовываться под учетной записью opc, что может быть не всегда удобно. Но тем не менее можно выбрать этот вариант при условии, что сервер всегда будет запущен под учеткой opc.
    2. Запускающий пользователь — при авторизации пользователя будет запущен экземпляр OPC-сервера. Если к серверу будет подключено два клиента, то будет запущено два OPC-сервера. В одном случае это будет отжирать ресурсы, в другом — все кроме первого клиенты не будут видеть данных.
    3. Указанный пользователь — как и в случае с OpcEnum этот вариант предпочтительный потому, что при такой настройке будет запущен один экземпляр под необходимой учетной записью. Я выбираю этот вариант и ввожу логин и пароль предварительно созданного пользователя.
    4. Системная учетная запись (только службы) — для CoDeSysOPCDA этот вариант недоступен, поэтому не рассматриваем.
  6. После выбора одного из вариантов и нажатия на кнопку OK, нужно перезапустить OPC-сервер, если он запущен. В случае с CoDeSysOPCDA я вырубаю процесс сервера.
  7. Теперь переходим к компьютеру, на котором запущен OPC-клиент и пытаемся искать OPC-сервак на удаленном сервере. Стоит заметить, что мы должны увидеть список OPC-серверов без каких-либо проблем, как и в предыдущем разделе.
  8. Но после манипуляций описанных в этом разделе мы должны иметь возможность создать группу в клиенте, увидеть теги и их значения. Что мы и видим на последнем скриншоте, в галерее ниже.

Включение брандмауэра и создание правил

Конечно же, нельзя забывать об отключенной в самом начале защите. Но если включить фаервол без предварительно созданных правил, то клиент не сможет достучаться до сервера. Я рассматриваю брандмауэр Windows, т.к. он идет по умолчанию и есть у всех, кто настраивает DCOM. Опытный пользователь без труда настроит другое ПО по аналогии. Подробно текстом описывать не буду (скриншоты смотрите ниже), но вот необходимые правила:

  1. Разрешение на доступ извне для службы OpcEnum.
  2. Разрешение на доступ извне по 135-му TCP-порту.
  3. Разрешение на доступ извне для CoDeSysOCPDA.

Рекомендую следующую последовательность действий:

  1. Включить брандмауэр.
  2. Убедиться, что данные не проходят.
  3. Создать правила.
  4. Убедиться, что данные проходят.

Вот и все. Как видите, ничего сложного в пробросе OPC-тегов через DCOM нет. Самое главное, чтобы были необходимые права на выполнение всех манипуляций. Для настройки OPC-сервер в Windows XP воспользуйтесь этой статьей.

Asked
12 years, 2 months ago

Viewed
5k times

I’m writing opc client on c#.
I want to get list of all opc servers on machine, how can i do it?
I’m using opc .net API from opc foundation.

mac's user avatar

mac

41.6k26 gold badges120 silver badges131 bronze badges

asked Nov 19, 2010 at 9:31

eba's user avatar

Per example to list all OPC DA 2.0 servers on a specific machine:

public void GetServers()
{
    IDiscovery discovery = new OpcCom.ServerEnumerator();

    //Get all local OPC DA servers of version 2.0
    Opc.Server[] localservers = discovery.GetAvailableServers(Specification.COM_DA_20);

    //Get all OPC DA servers of version 2.0 of machine "MyMachine"
    Opc.Server[] hostservers = discovery.GetAvailableServers(Specification.COM_DA_20, "MyMachine", null);
}

answered Jan 6, 2011 at 16:02

Francis B.'s user avatar

Francis B.Francis B.

6,9582 gold badges32 silver badges54 bronze badges

Asked
12 years, 2 months ago

Viewed
5k times

I’m writing opc client on c#.
I want to get list of all opc servers on machine, how can i do it?
I’m using opc .net API from opc foundation.

mac's user avatar

mac

41.6k26 gold badges120 silver badges131 bronze badges

asked Nov 19, 2010 at 9:31

eba's user avatar

Per example to list all OPC DA 2.0 servers on a specific machine:

public void GetServers()
{
    IDiscovery discovery = new OpcCom.ServerEnumerator();

    //Get all local OPC DA servers of version 2.0
    Opc.Server[] localservers = discovery.GetAvailableServers(Specification.COM_DA_20);

    //Get all OPC DA servers of version 2.0 of machine "MyMachine"
    Opc.Server[] hostservers = discovery.GetAvailableServers(Specification.COM_DA_20, "MyMachine", null);
}

answered Jan 6, 2011 at 16:02

Francis B.'s user avatar

Francis B.Francis B.

6,9582 gold badges32 silver badges54 bronze badges

I am not familiar with OpenSCADA. However I have developed OPC clients in c++. If you are looking for a class id for an OPC server running locally, you can use this function:

CLSID clsid;
hr = CLSIDFromProgID(L"Matrikon.OPC.Simulation", &clsid);
printf("OPC Server clsid: %p %p %p %p%p%p%p%p%p%p%pn", (void*)opcServerId.Data1, (void*)opcServerId.Data2, (void*)opcServerId.Data3, (void*)opcServerId.Data4[0], (void*)opcServerId.Data4[1], (void*)opcServerId.Data4[2], (void*)opcServerId.Data4[3], (void*)opcServerId.Data4[4], (void*)opcServerId.Data4[5], (void*)opcServerId.Data4[6], (void*)opcServerId.Data4[7]);

If you are connecting to an OPC server which is installed on a remote computer which has not been installed locally, you must create a connection to OPCEnum (hopefully installed on both local and remote computer). You can create an COM object on the remote server which will translate a OPC server name into a CLSID. Here is some code demonstrating this.

//the first part of an OPC client is to connect to the OPCEnum service on the remote machine so we can look up the clsid of the OPC Server (given as a string).
//This code should get a list of OPC servers on a remote or local machine assuming that OPCEnum is running.
const CLSID CLSID_OpcServerList = {0x13486D51,0x4821,0x11D2, {0xA4,0x94,0x3C, 0xB3,0x06,0xC1,0x0,0x0}}; //{ 0x50fa5e8c, 0xdfae, 0x4ba7, { 0xb6, 0x9a, 0x8f, 0x38, 0xc2, 0xfd, 0x6c, 0x27 } }; //{0x13486D50,0x4821,0x11D2, {0xA4,0x94,0x3C, 0xB3,0x06,0xC1,0x0,0x0}};
const IID IID_IOPCServerList = {0x13486D50,0x4821,0x11D2, {0xA4,0x94,0x3C, 0xB3,0x06,0xC1,0x0,0x0}}; //for some reason the interface IID is the same as the CLSID.
const IID IID_IOPCServerList2 = {0x9DD0B56C,0xAD9E,0x43EE, {0x83,0x05,0x48, 0x7F,0x31,0x88,0xBF,0x7A}};

IOPCServerList *m_spServerList = NULL;
IOPCServerList2 *m_spServerList2 = NULL;

COSERVERINFO ServerInfo = {0};
ServerInfo.pwszName = hostName; //L"localhost"; 
ServerInfo.pAuthInfo = NULL;

MULTI_QI MultiQI [2] = {0};

MultiQI [0].pIID = &IID_IOPCServerList;
MultiQI [0].pItf = NULL;
MultiQI [0].hr = S_OK;

MultiQI [1].pIID = &IID_IOPCServerList2;
MultiQI [1].pItf = NULL;
MultiQI [1].hr = S_OK;

//  Create the OPC server object and query for the IOPCServer interface of the object
HRESULT hr = CoCreateInstanceEx (CLSID_OpcServerList, NULL, CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER, &ServerInfo, 1, MultiQI); // ,IID_IOPCServer, (void**)&m_IOPCServer);
//hr = CoCreateInstance (CLSID_OpcServerList, NULL, CLSCTX_LOCAL_SERVER ,IID_IOPCServerList, (void**)&m_spServerList);
if (hr == S_OK)
{
    printf("Part1 okayn");
    m_spServerList = (IOPCServerList*)MultiQI[0].pItf;
    //m_spServerList2 = (IOPCServerList2*)MultiQI[1].pItf;
}
else
{
    printf("Co create returned: %pn",(void *)hr);
    m_spServerList = NULL;
    //qDebug() << (void *)REGDB_E_CLASSNOTREG;
}



//try and get the class id of the OPC server on the remote host

CLSID opcServerId;
CLSID clsid;

if (m_spServerList)
{
    hr=m_spServerList->CLSIDFromProgID(serverName,&opcServerId);
    m_spServerList->Release();
}
else
{
    hr = S_FALSE;
    opcServerId.Data1 = 0;
    clsid.Data1 = 0;
}

//try to attach to an existing OPC Server (so our OPC server is a proxy)

if (hr != S_OK)
{   
    wprintf(L"Couldn't get class id for %sn Return value: %p", serverName, (void *)hr);
}
else
{
    printf("OPC Server clsid: %p %p %p %p%p%p%p%p%p%p%pn", (void*)opcServerId.Data1, (void*)opcServerId.Data2, (void*)opcServerId.Data3, (void*)opcServerId.Data4[0], (void*)opcServerId.Data4[1], (void*)opcServerId.Data4[2], (void*)opcServerId.Data4[3], (void*)opcServerId.Data4[4], (void*)opcServerId.Data4[5], (void*)opcServerId.Data4[6], (void*)opcServerId.Data4[7]);
}

//  Create the OPC server object and query for the IOPCServer interface of the object.
//Do it on the remote computer.

MultiQI [0].pIID = &IID_IOPCServer;
MultiQI [0].pItf = NULL;
MultiQI [0].hr = S_OK;

if (opcServerId.Data1)
{
    hr = CoCreateInstanceEx (opcServerId, NULL, CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER, &ServerInfo, 1, MultiQI); 
}
else
{
    hr = S_FALSE;
}

if (hr != S_OK)
{
    m_IOPCServer = NULL;
    printf("Couldn't create server.n");
}
else
{
    //CoCreateInstanceEx should have returned an array of pointers to interfaces. Since we only asked for 1, lets just get it.
    m_IOPCServer = (IOPCServer*) MultiQI[0].pItf;
    printf("Created remote OPC server.n");
}

Here is also some commented out code demonstrating how you can enumerate all remote OPC servers. Interestingly, you can get the CLSID for these remote servers, but I believe there is a separate COM object you must create on the remote computer in order to back calculate a readable name for these. (I looked into it, but didn’t need it myself so I have forgotten which interface it was).

//list all the OPC interfaces.

CLSID catid[2];
catid[0]=CATID_OPCDAServer10;  //= CATID_OPCDAServer10;    //OPC1.0
catid[1] = CATID_OPCDAServer20;
IOPCEnumGUID *pEnumGUID;
hr = m_spServerList->EnumClassesOfCategories(2, catid, 0, NULL, (IEnumGUID**)&pEnumGUID);
printf("Enum Result: %u", (void*) hr);

if (hr == S_OK)
{
    //pEnumGUID->Reset();

    GUID serverGUID;
    ULONG numberServers = 8;
    //pEnumGUID->Next(maxServers,serverGUIDs, &numberServers);

    while ((hr = pEnumGUID->Next (1, &serverGUID, &numberServers)) == S_OK)
    {
        WCHAR* wszProgID;
        hr = ProgIDFromCLSID (serverGUID, &wszProgID); //This probably won't work unless the same OPC server is installed locally.

        printf("server: %ls n",wszProgID);

        CoTaskMemFree (wszProgID);
    };
}   

Содержание

  1. DCOM для ОС Windows 10
  2. Члены групп
  3. Настройки DCOM
  4. Настройки брандмауэра
  5. Настройка параметров DCOM. Dcomcnfg
  6. Настройка DCOM и OPC на Windows 2008 и Windows 7
  7. 4. Настройка параметров DCOM
  8. 4.1 Настройка параметров по умолчанию
  9. 4.2 Настройка параметров для OPC сервера
  10. 4.3 Настройка доступа к OPC серверам «Для всех»
  11. Настройка DCOM
  12. Настройка DCOM
  13. Настройка общих параметров DCOM
  14. 4.1.2 Настройка параметров DCOM для OPC-сервера
  15. DCOM для ОС Windows 10
  16. Члены групп
  17. Настройки DCOM
  18. Настройки брандмауэра
  19. Настройка параметров DCOM и Dcomcnfg на Windows 8, Windows Server 2012
  20. 4. Настройка параметров DCOM
  21. 4.1 Настройка параметров по умолчанию
  22. 4.2 Настройка параметров для OPC сервера
  23. 4.3 Настройка доступа к OPC серверам «Для всех»

Не удаётся получить данные от удалённого OPC-сервера. Подключение происходит, тэги отображаются корректно, но примитив с синим «!».

Члены групп

Убедитесь, что пользователь Dispatcher входит в группу Пользователи DCOM (англ.Distributed COM Users) и Опытные пользователи (англ.PowerUsers), а пользователь AdminScada входит в группу Администраторы.

Настройки DCOM

Откройте оснастку Службы компонентов как указано на рисунке 1.

400px DCOM settings mycomp view

Откройте вкладку «Безопасность COM «Служб компонентов» как указано на рисунке 2.

400px COM security page

В разделах Права доступа и Разрешение на запуск и активацию нажмите Изменить умолчания и добавьте группу Пользователи DCOM как указано на рисунке 3

DCOM users add

Примените изменения и нажмите кнопку OK.

Откройте свойства службы компонентов Tekon в разделе Настройка DCOM как показано на рисунке 4.

400px DCOM Tekon settings

Выберите вкладку Безопасность и пункты Разрешение на запуск и активацию и Разрешение на изменение настроек рис.5.

400px DCOM Tekon security settings

Добавьте группу Пользователи DCOM с правами, как показано на Рис.6.

DCOM Tekon security settings users

Примените изменения и нажмите кнопку OK.

Настройки брандмауэра

Убедитесь, что настройки правил Брандмауэра Windows включают в себя

Источник

ico printer2Верси для печати

4. Настройка параметров DCOM

Для корректной работы OPC серверов необходимо настроить сетевые параметры и параметры безопасности DCOM.

Настройка OpcEnum не требуется, поскольку данная служба автоматически настраивается при установке «OPC Core Components».

Пример настройки параметров приведен для тестового OPC сервера «Те st OPC Server». Настройка параметров DCOM выполняется с помощью служебной команды «dcomcnfg».

Для запуска «dcomcnfg» нажмите на клавиатуре Win+ R, чтобы открыть окно запуска программ из командной строки.

dcom opc config clip image038

Рис. 20 Запуск службы компонентов

4.1 Настройка параметров по умолчанию

dcom opc config clip image040

dcom opc config clip image042

Рис. 22 Безопасность COM

Кликните по кнопке №1 (рис. 22). В появившемся диалоговом окне (рис.23):

dcom opc config clip image044

Рис. 23 Настройка прав доступа

Повторите действия в диалоговом окне «Разрешение на запуск и активацию» (рис.24), которое появляется при клике на кнопке №2 «Изменить умолчания» (рис.22).

dcom opc config clip image046

Рис. 24 Настройка разрешений на запуск

На закладке «Набор протоколов» (рис.25) удалите все протоколы, кроме TCP/ IP и нажмите «OK» для того чтобы сохранить изменения в диалоговом окне «Свойства: Мой компьютер».

dcom opc config clip image048

Рис. 25 Настройка разрешений на запуск

4.2 Настройка параметров для OPC сервера

dcom opc config clip image050

Рис. 26 Настройка DCOM для OPC сервера

Поскольку все параметры были настроены для всего компьютера, то необходимо убедиться, что OPC сервер использует параметры по умолчанию.

dcom opc config clip image052

Рис. 27 Общие свойства OPC сервера

dcom opc config clip image054

Рис. 28 Свойства безопасности

dcom opc config clip image056

Рис. 29 Конечные узлы

dcom opc config clip image058

Рис. 30 Удостоверение

На закладке «Удостоверение» необходимо указать имя пользователя, который был создан ранее, от имени которого будет запускаться OPC сервер.

Замечание 1. Перед изменением настроек OPC сервера необходимо убедиться, что он не запушен и отсутствует в списке активных процессов. Или перезапустить OPC сервер после изменения настроек.

Замечание 2. Для некоторых OPC серверов необходимо, чтобы они были запущены хотя бы один раз с правами администратора, для того чтобы зарегистрироваться в системе и инициализировать параметры OPC сервера. Только после такой инициализации они будут доступны для обнаружения через OpcEnum и подключения.

4.3 Настройка доступа к OPC серверам «Для всех»

Внимание! Разрешение доступа для всех может снизить уровень безопасности компьютера.

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

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

Откройте настройки DCOM для OPC сервера, как показано в разделе 4.2 и модифицируйте их согласно рис.31 – рис.34. Остальные опции должны соответствовать параметрам, указанным в разделе 4.2.

dcom opc config clip image060

Рис. 31 Общие свойства

dcom opc config clip image062

Рис. 32 Свойства безопасности

dcom opc config clip image064

Рис. 33 Разрешения на запуск и активацию

dcom opc config clip image066

Рис. 34 Права доступа

dcom opc config clip image068

Рис. 35 Свойства политики безопасности

Если после изменения политики безопасности, как показано на рис. 35, OPC клиенты не могут получать список OPC серверов и подключаться к ним, то необходимо настроить и сохранить дополнительные свойства политики безопасности (рис. 36-37).

dcom opc config clip image070

Рис. 36 DCOM: ограничения на доступ

dcom opc config clip image072

Рис. 37 DCOM: ограничения на запуск

Процесс добавление группы пользователь подробно показан в разделе 2.2.

Источник

Настройка DCOM

Для настройки прав доступа к DCOM-приложениям в операционных системах Windows XP, Windows Server 2003 и Windows Vista используется оснастка «Службы компонентов» (Component Services) консоли управления.

Оснастку можно вызвать:

image002

Рисунок 4.15 Запуск утилиты dcomcnfg

image004

Рисунок 4.16 Системные инструментальные средства «Службы компонентов»

После запуска оснастки «Службы компонентов» производится поиск COM-приложений, которые ещё не зарегистрированы в системе на данный момент, и предлагается зарегистрировать их. Обычно, следует разрешать регистрацию, за исключением случаев, когда иное не указано в документации на программное обеспечение.

После запуска появляется окно «Службы компонентов» (рисунок 4.17)

image006

Рисунок 4.17 Оснастка «Службы компонентов»

После перехода к более низкому уровню безопасности следует перезапустить операционную систему, чтобы изменения вступили в силу.

Настройка общих параметров DCOM

Для установления связи с удаленными OPC-серверами сначала следует настроить общие параметры DCOM. Для этого:

image008

image010

Кнопка «Изменить ограничения…» может быть не доступна, если была изменена политика «DCOM: Ограничения компьютера на доступ в синтаксисе SDDL (Security Descriptor Definition Language)». В этом случае пропустите текущий шаг.

Эти настройки необходимы для функционирования утилиты поиска OPC-серверов (OPCEnum.exe) и некоторых OPC-серверов, для которых «Уровень проверки подлинности» («Authentication Level») установлен «Нет» («None»).

image012

Этот шаг настройки необходимо выполнить как на компьютере, где установлен OPC-сервер, так и на компьютере, где установлен OPC-клиент. Остальные шаги выполняются на компьютере сервера.

image014

Закладка «Свойства по умолчанию» (рисунок 4.22)

Значения по умолчанию:

    Установлена галочка «Разрешить использование DCOM на этом компьютере».
    § «Уровень проверки подлинности по умолчанию» – «Подключение».
    § «Уровень олицетворения по умолчанию» – «Идентификация».
    § Снята галочка «Повышенная безопасность для отслеживания ссылок».

image016

Рисунок 4.22 — Свойства компьютера, закладка «Свойства по умолчанию»

Добавлены следующие протоколы DCOM:

      § «TCP/IP c ориентацией на подключения»
      § «SPX c ориентацией на подключения».

image018

Значения по умолчанию:

      § Установлена галочка «Проверять локальное хранилище при выборе раздела».
      § «Время ожидания транзакции (с)»: 60.

При работе в компьютерной сети в случае возникновения обрывов, переполнения и других критических ситуациях при попытках восстановления связи DCOM-приложения используют время ожидания транзакции (Transaction timeout). Это время, в течение которого DCOM-приложение посылает запрос к источнику данных и ожидает восстановления связи. DCOM-приложение совершает до 6 таких попыток, прежде чем подаст сигнал об ошибке в сети.

По умолчанию этот интервал равен 60 секундам. Соответственно, максимальное время, за которое DCOM-приложение определит, что сеть неисправна – 60*6 = 360 секунд или 6 минут.

Однако это время не всегда может устроить Пользователей DCOM-приложения. Очевидно, что чем короче время ожидания транзакции, тем быстрее DCOM-приложение сможет сообщить Пользователю об ошибке в сети. Поэтому, если Пользователь DCOM-приложения хочет сократить время определения ошибки в сети, он может уменьшить время ожидания транзакции.

image020

Времени ожидания транзакции настраивается на компьютере сервера.

При изменении времени ожидания транзакции следует понимать, что это коснется ВСЕХ DCOM-приложений, работающих на этом компьютере. Поэтому, если нет сильной необходимости изменить значение по умолчанию для этого пункта, то изменять его не рекомендуется.

4.1.2 Настройка параметров DCOM для OPC-сервера

Настройки, описанные в этом пункте, производятся на компьютере, где установлен OPC-сервер.

Для того чтобы настроить параметры DCOM для конкретного OPC-сервера, следует:

      1) В оснастке «Службы компонентов» выберите раздел «Корень консоли/Службы компонентов/Компьютеры/Мой компьютер/Настройка DCOM» («Console Root/Component Services/Computers/My Computer/DCOM Config»)
      2) Откройте контекстное меню нужного OPC-сервера (рисунок 4.25) и выберите пункт «Свойства» («Properties»)

image022

      3) В открывшемся окне «Свойства:…» перейдите на закладку «Безопасность» («Security»)
      4) На панели «Разрешения на запуск и активацию» выберите «Настроить» и нажмите на кнопку «Изменить …». В открывшемся окне «Разрешение на запуск» (рисунок 4.26) нажмите кнопку «Добавить» и добавьте группу «Users OPC» (описание в разделе 4.1 «Создание и настройка учетных записей Пользователей»)

image024

Для группы «Users OPC»поставьте галочки «Разрешить» для всех пунктов. Если Пользователи группы должны получить только удаленный доступ к OPC-серверу, поставьте галочки «Разрешить» только для пунктов «Удаленный запуск» и «Удаленная активация»

      5) На панели «Права доступа» (закладка «Безопасность») выберите «Настроить» и нажмите на кнопку «Изменить …». В открывшемся окне «Разрешение на доступ» (рисунок 4.27) нажмите кнопку «Добавить» и добавьте группу «Users OPC» (описание в разделе 4.1 «Создание и настройка учетных записей Пользователей»)

image026

Для этой группы («Users OPC») поставьте галочки «Разрешить» для всех вариантов доступа.

Если Пользователи группы должны получить только удаленный доступ к OPC-серверу, поставьте галочку «Разрешить» только для пункта «Удаленный доступ».

      6) Для того, чтобы указать, под какой учетной записью будет запускаться OPC-сервер, перейдите на закладку «Удостоверение» (рисунок 4.28).

image028

Выбор учетной записи для запуска данного приложения зависит от реализации данного OPC-сервера. Воспользуйтесь документацией к OPC-серверу, чтобы выбрать «запускающего» Пользователя.

Общие рекомендации по выбору Пользователя для запуска OPC-сервера приведены в таблице 4.1.

Источник

Не удаётся получить данные от удалённого OPC-сервера. Подключение происходит, тэги отображаются корректно, но примитив с синим «!».

Члены групп

Убедитесь, что пользователь Dispatcher входит в группу Пользователи DCOM (англ.Distributed COM Users) и Опытные пользователи (англ.PowerUsers), а пользователь AdminScada входит в группу Администраторы.

Настройки DCOM

Откройте оснастку Службы компонентов как указано на рисунке 1.

400px DCOM settings mycomp view

Откройте вкладку «Безопасность COM «Служб компонентов» как указано на рисунке 2.

400px COM security page

В разделах Права доступа и Разрешение на запуск и активацию нажмите Изменить умолчания и добавьте группу Пользователи DCOM как указано на рисунке 3

DCOM users add

Примените изменения и нажмите кнопку OK.

Откройте свойства службы компонентов Tekon в разделе Настройка DCOM как показано на рисунке 4.

400px DCOM Tekon settings

Выберите вкладку Безопасность и пункты Разрешение на запуск и активацию и Разрешение на изменение настроек рис.5.

400px DCOM Tekon security settings

Добавьте группу Пользователи DCOM с правами, как показано на Рис.6.

DCOM Tekon security settings users

Примените изменения и нажмите кнопку OK.

Настройки брандмауэра

Убедитесь, что настройки правил Брандмауэра Windows включают в себя

Источник

ico printer2Верси для печати

Для корректной работы OPC серверов необходимо настроить сетевые параметры и параметры безопасности DCOM.

Настройка OpcEnum не требуется, поскольку данная служба автоматически настраивается при установке «OPC Core Components».

Пример настройки параметров приведен для тестового OPC сервера «Теst OPC Server» (является 32-х битным приложением). Настройка параметров DCOM выполняется с помощью панели управления «Службы компонентов» Windows. В зависимости от разрядности операционной системы и приложения OPC сервера необходимо запускать соответствующую версию панели управления:

Для выполнения команды нажмите на клавиатуре Win + R, чтобы открыть окно запуска программ из командной строки.

opc dcom win 8 2012 16

Рис. 19.1 Запуск службы компонентов (вариант 1)

opc dcom win 8 2012 16 2

Рис. 20 Запуск службы компонентов (вариант 2)

4.1 Настройка параметров по умолчанию

opc dcom win 8 2012 17 s

opc dcom win 8 2012 18

Рис. 22 Безопасность COM

Кликните по кнопке №1 (рис. 22). В появившемся диалоговом окне (рис.23):

opc dcom win 8 2012 19

Рис. 23 Настройка прав доступа

Повторите действия в диалоговом окне «Разрешение на запуск и активацию» (рис.24), которое появляется при клике на кнопке №2 «Изменить умолчания» (рис.22).

opc dcom win 8 2012 20

Рис. 24 Настройка разрешений на запуск

На закладке «Набор протоколов» (рис.25) удалите все протоколы, кроме TCP/ IP и нажмите «OK» для того чтобы сохранить изменения в диалоговом окне «Свойства: Мой компьютер».

opc dcom win 8 2012 21

Рис. 25 Настройка разрешений на запуск

4.2 Настройка параметров для OPC сервера

opc dcom win 8 2012 22 s

Рис. 26 Настройка DCOM для OPC сервера

Поскольку все параметры были настроены для всего компьютера, то необходимо убедиться, что OPC сервер использует параметры по умолчанию.

opc dcom win 8 2012 23

Рис. 27 Общие свойства OPC сервера

opc dcom win 8 2012 24

Рис. 28 Свойства безопасности

opc dcom win 8 2012 26

Рис. 29 Конечные узлы

opc dcom win 8 2012 25

Рис. 30 Удостоверение

На закладке «Удостоверение» необходимо указать имя пользователя, который был создан ранее, от имени которого будет запускаться OPC сервер.

Замечание 1. Перед изменением настроек OPC сервера необходимо убедиться, что он не запушен и отсутствует в списке активных процессов. Или перезапустить OPC сервер после изменения настроек.

Замечание 2. Для некоторых OPC серверов необходимо, чтобы они были запущены хотя бы один раз с правами администратора, для того чтобы зарегистрироваться в системе и инициализировать параметры OPC сервера. Только после такой инициализации они будут доступны для обнаружения через OpcEnum и подключения.

4.3 Настройка доступа к OPC серверам «Для всех»

Внимание! Разрешение доступа для всех может снизить уровень безопасности компьютера.

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

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

Откройте настройки DCOM для OPC сервера, как показано в разделе 4.2 и модифицируйте их согласно рис.31 – рис.34. Остальные опции должны соответствовать параметрам, указанным в разделе 4.2.

opc dcom win 8 2012 27

Рис. 31 Общие свойства

opc dcom win 8 2012 28

Рис. 32 Свойства безопасности

opc dcom win 8 2012 29

Рис. 33 Разрешения на запуск и активацию

opc dcom win 8 2012 30

Рис. 34 Права доступа

opc dcom win 8 2012 31 s

Рис. 35 Свойства политики безопасности

Если после изменения политики безопасности, как показано на рис. 35, OPC клиенты не могут получать список OPC серверов и подключаться к ним, то необходимо настроить и сохранить дополнительные свойства политики безопасности (рис. 36-37).

opc dcom win 8 2012 32 s

Рис. 36 DCOM: ограничения на доступ

Процесс добавление группы пользователь подробно показан в разделе 2.2.

Источник

Like this post? Please share to your friends:
  • Как посмотреть скорость wifi на windows 10
  • Как посмотреть содержимое резервной копии iphone на компьютере windows
  • Как посмотреть список com портов в windows
  • Как посмотреть содержимое папки через командную строку windows
  • Как посмотреть скопированный ранее текст на компьютере windows 10