Доброго времени суток.
Пытаюсь получить список зарегистрированных OPC серверов.
C# | ||
|
Выдает ошибку:
Невозможно привести 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
Поле |
Описание |
---|---|
|
Вектор символов, который идентифицирует имя хоста. Обратите внимание на то, что никакое разрешение имени не выполняется на IP-адресе. |
|
Массив ячеек, содержащий идентификаторы сервера всех Серверов OPC, доступных от того хоста. |
|
Массив ячеек, содержащий описательный текст для каждого сервера. |
|
Массив ячеек, содержащий Спецификацию OPC, которую обеспечивает сервер. |
|
Массив ячеек, содержащий синтаксис по умолчанию, можно использовать, чтобы создать OPC Data доступ к Объекту клиента, сопоставленному с сервером. Смотрите Создают Объект клиента DA для получения дополнительной информации. |
- Remove From My Forums
-
Question
-
Господа! Прошу помощи!
Проблема в следующем:
Есть машина с ОС «Win 2003 Server», в домене, (обновления обновляются).После деинсталляции одного «кривого» OPC сервера на машине исчез список локальных OPC серверов. Ни одним OPC эксплорером не виден. СКАДА перестала получать данные от всех ОРС серверов.
Поковырявшись в Инете, вычитал, что необходимо прорегистрировать OPCENUM. (opcenum.exe /Service)
Список появился
Потом после переборов, деинсталляции и настроек разных OPC серверов, после очередного удаления ОРС сервера и перезагрузки, список слетел опять. Но повторная регистрация уже ни чего не давала.С сайта opcfoundation.org скачал «OPC Core Components Redistributable» (OPCENUM вместе с DLL-ками). Помогло наполовину
Списка не видно в ОРС-Эксплорере, но СКАДА со всех ОРС серверов получает данные.
Отдельные ОРС серверы этой машины (половину списка) можно увидеть, если подключиться к ней с другой машины. Отдельные ОРС серверы запускаются удаленной машиной и передают данные, но самого перечня серверов не видно.
Матрикон Эксплорер просто выдает какую-то ошибку типа: «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
-
Edited by
Поразбиравшись какое-то время как правильно настроить передачу OPC-тегов по сети Ethernet я понял, что подобная настройка не совсем сложная, но слегка мудреная для тех, кто не связывался с настройкой Windows. Решил преподнести данный материал в своем блоге.
Это вторая версия статьи. Первая версия писалась в спешке и не отражала полной настройки системы. В этом материале исправлены ошибки прошлого. В любом случае, пишите комментарии, задавайте вопросы 🙂
Общий план работ
Чтобы настройка не была головной болью, нужно соблюдать определенную последовательность действий.
- Введение — вода всякая 🙂
- Проверка OPC локально — OPC-клиент на сервере должен без проблем получать данные с локального OPC-сервера.
- Отключение брандмауэра — по-началу это упрощает настройку, пока еще нет четкого понимания что нужно разрешать.
- Настройка пользователей — связка логин/пароль должна быть одинаковой на обоих компьютерах.
- Настройка DCOM — общие настройки, обеспечивающие работоспособность DCOM на компьютерах.
- Настройка OpcEnum для работы через DCOM — служба, которая отображает OPC-сервера компьютера на котором она запущена.
- Настройка целевого OPC-сервера для работы через DCOM — в моем случае это CoDeSysOPCDA
- Включение брандмауэра и создание правил — с отключенным брандмауэром жить не комфортно! Здесь же и проверим как данные летают
Введение
У меня есть отдельные требования для настройки:
- доступ к 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 через DCOM, а по-началу брандмауэр может в этом помешать. Поэтому сперва с отключенной защитой мы настраиваем наше ПО и убеждаемся, что все настроено и работает, а в конце подключаем защиту. Так проще искать ошибки в процессе.
Настройка пользователей
На обоих компьютерах должны быть пользователи с одинаковыми логинами и паролями, причем пароль должен быть не пустым. В домене можно использовать одну учетную запись. Для теста я выбрал логин opc и пароль opc — конечно же, не рекомендую использовать такую простую связку в продакшне 🙂
Итак, переходим к настройке пользователей. Текстовую последовательность я снабдил скриншотами, которые помогут проще ориентироваться в тексте. Конечно же, опытный пользователь может создать/настроить юзера так как ему будет угодно, тем не менее я предлагаю такой вариант.
- Запускаем компонент управления учетными записями пользователей control userpasswords2.
- В окне нажимаем кнопку Добавить для добавления нового пользователя в систему.
- В следующем окне задаем логин opc (поле Пользователь), и имя с описанием по желанию и жмем кнопку Далее.
- Задаем пароль opc и подтверждение, жмем Далее.
- Далее выбираем группу Администратор (или другую, которая позволит запускать OPC-сервер) и жмем кнопку Готово.
- Пользователь создан и появляется в списке Пользователи этого компьютера«. Для включения автологина, нужно выделить юзера в этом списке и снять галку Требовать ввод имени пользователя и пароля. Решать вам, нужен автологин или нет.Затем нужно сделать две вещи. Добавить юзера в группу Пользователи DCOM (таким образом всю настройку мы сможем выполнять для группы, а не для конкретного пользователя — это может быть полезно в будущем при смене пароля для opc или изменении пользователя) и настроить запрет смены пароля юзером (это на всякий случай). Для этого переходим на вкладку Дополнительно. В секции Дополнительное управление пользователями нажимаем кнопки Дополнительно (уж простите Майкрософт за тавтологию …).
- В появившемся окне слева выбираем Группы и дабл-клик на группу Пользователи DCOM.
- В открывшемся окне есть кнопка Добавить, которая запускает диалог добавление юзера в группу.
- В поле для ввода пишем логин opc и жмем кнопку OK, если все хорошо, то окно закроется …
- … а в следующем окне в списке Члены группы появится наш opc. Теперь можно закрыть окно.
- Далее слева выбираем пункт Пользователи и дважды кликнем на нашего opc, в появившемся окне ставим галки Запретить смену пароля пользователем и Срок действия не ограничен, подтверждаем кнопкой OK и закрываем окно настройки пользователей и групп.
- Также подтверждаем настройки кнопкой OK в оставшемся окне. Но окно не закроется, а выскочит просьба ввести логин и пароль пользователя для автологина. Введем данные нашего юзера и подтвердим кнопкой OK.
Внимание! Эти действия необходимо провести как на сервере, так и на клиенте.
Настройка DCOM
В данном разделе нужно настроить свойства DCOM по умолчанию на сервере, чтобы «все работало». Приступим.
- Запустим окно настройки DCOM командой dcomcnfg .
- Откроется окно Службы компонентов, в котором нужно будет раскрыть список Службы компонентов, а затем и список Компьютеры, где мы увидим еще один вложенный список Мой компьютер, на который нужно нажать правой кнопкой мыши и выбрать пункт меню Свойства.
- В появившемся окне свойств выбираем вкладку Свойства по умолчанию и устанавливаем следующие настройки:
- Галка Разрешить использование DCOM на этом компьютере — без нее DCOM работать не будет.
- В Уровень проверки подлинности по умолчанию выбираем Подключиться.
- В Уровень олицетворения по умолчанию выбираем Определить.
- После жмем кнопку OK. Система может предупредить о том, что будут изменены свойства DCOM — соглашайтесь. Окно Службы компонентов не закрывайте, оно нам еще понадобится.
Те же настройки необходимо провести и на клиенте за исключением пунктов 3.2 и 3.3 — они не повлияют на работу, но и не повредят. Самое главное, чтобы DCOM был разрешен.
Настройка OpcEnum для работы через DCOM
Служба OpcEnum отвечает за отображение OPC-серверов. Если ее настроить некорректно, то при браузинге серверов, вы не увидите ничего, кроме ошибок. Эту службу нужно настроить на сервере.
- В окне Служба компонентов должно уже быть открыто дерево до Настройка DCOM. Нужно выбрать этот элемент в левой части окна, и после этого в правой найти OpcEnum, кликнуть на него правой кнопкой мышки и выбрать пункт меню Свойства.
- Откроется окно свойств, и во вкладке Общие в списке Уровень проверки подлинности выбрать Подключиться.
- Во вкладке Размещение должен быть выбран пункт Запустить приложение на данном компьютере. Остальные галки должны быть сняты.
- Далее переходим к вкладке безопасность, где будем раздавать права на удаленный запуск, доступ и изменение настроек OpcEnum. Во всех трех случаях выбираем пункт Настроить, т.е. у нас должны быть активны три кнопки Изменить.
- Начнем с Разрешение на запуск и активацию. Нам нужно добавить нашу группу с необходимыми разрешениями, поэтому кликаем на кнопку Добавить.
- Вписываем (или ищем) Пользователи DCOM, жмем OK — группа должна добавиться.
- Итак, группа в списке, теперь надо проставить галки под словом Разрешить. (На скриншоте) Я поставил все галки, но для того чтобы служба работала по сети нам нужно лишь Удаленный запуск и Удаленная активация. После проставления галок жмем OK и открываем следующее окно — Права доступа.
- Точно так же добавляем нашу группу и разрешаем ей все, либо только Удаленный доступ, жмем OK и открываем окошко Разрешение на изменение настроек.
- В этом окне точно так же добавляем группу и разрешаем ей Полный доступ и Read — они ставятся одновременно и снимаются так же. Жмем OK и переходим ко вкладке Удостоверение окна свойств OpcEnum.
- Для службы OpcEnum возможно два варианта запуска:
- Системная учетная запись (только службы) — OPC-сервер будет запущен под системной учетной записью независимо от входа в систему. Данный вариант нам подходит и его советуют как более предпочтительный.
- Указанный пользователь — при данной настройке OPC-сервер будет запущен от имени указанного нами пользователя в одном экземпляре, в независимости от того под какой учетной записью совершен вход. Этот вариант нравится мне больше, т.к. я люблю определенность, ведь в данном случае я сам указываю пользователя.
- Определившись нажимаем OK и переходим к перезапуску службы OpcEnum. Это можно сделать из того же окна: слева выбираем Службы (локальные), справа в списке ищем OpcEnum, выбираем и перезапускаем нажатием на появившуюся ссылку.
- Дожидаемся перезапуска службы и переходим к клиенту.
- На клиенте запускаем OPC-клиент и пытаемся искать OPC-сервера, используя IP-адрес нашего сервера. Как видно на скриншоте — OPC-сервер найден.
- Но при попытке достучаться до тэгов прилетает отказ. Этого следовало ожидать, ведь мы еще не настраивали наш CoDeSysOPCDA.
Настройка целевого OPC-сервера для работы через DCOM
Итак, мы вплотную подобрались к настройке ПО, которое будет выдавать нам теги на клиенте. Настройка не сильно отличается от процедуры, описанной в предыдущем разделе.
- В Настройка DCOM ищем необходимый OPC-сервер (в данном случае — CoDeSysOPCDA), тыкаем правой кнопкой мыши и выбираем свойства.
- На вкладке Общие выбираем Уровень проверки подлинности Подключиться.
- На вкладке Размещение должен быть выбран только пункт Запустить приложение на данном компьютере.
- На вкладке Безопасность группе Пользователи DCOM даем права на удаленный запуск, доступ и изменение настроек как и в случае с OpcEnum (ниже будут скриншоты).
- На вкладке Удостоверение у нас есть 4 варианта:
- Текущий пользователь — в этом случае OPC-сервер будет запускаться от имени вошедшего в систему пользователя. Можно использовать данный вариант, но необходимо на сервере авторизовываться под учетной записью opc, что может быть не всегда удобно. Но тем не менее можно выбрать этот вариант при условии, что сервер всегда будет запущен под учеткой opc.
- Запускающий пользователь — при авторизации пользователя будет запущен экземпляр OPC-сервера. Если к серверу будет подключено два клиента, то будет запущено два OPC-сервера. В одном случае это будет отжирать ресурсы, в другом — все кроме первого клиенты не будут видеть данных.
- Указанный пользователь — как и в случае с OpcEnum этот вариант предпочтительный потому, что при такой настройке будет запущен один экземпляр под необходимой учетной записью. Я выбираю этот вариант и ввожу логин и пароль предварительно созданного пользователя.
- Системная учетная запись (только службы) — для CoDeSysOPCDA этот вариант недоступен, поэтому не рассматриваем.
- После выбора одного из вариантов и нажатия на кнопку OK, нужно перезапустить OPC-сервер, если он запущен. В случае с CoDeSysOPCDA я вырубаю процесс сервера.
- Теперь переходим к компьютеру, на котором запущен OPC-клиент и пытаемся искать OPC-сервак на удаленном сервере. Стоит заметить, что мы должны увидеть список OPC-серверов без каких-либо проблем, как и в предыдущем разделе.
- Но после манипуляций описанных в этом разделе мы должны иметь возможность создать группу в клиенте, увидеть теги и их значения. Что мы и видим на последнем скриншоте, в галерее ниже.
Включение брандмауэра и создание правил
Конечно же, нельзя забывать об отключенной в самом начале защите. Но если включить фаервол без предварительно созданных правил, то клиент не сможет достучаться до сервера. Я рассматриваю брандмауэр Windows, т.к. он идет по умолчанию и есть у всех, кто настраивает DCOM. Опытный пользователь без труда настроит другое ПО по аналогии. Подробно текстом описывать не буду (скриншоты смотрите ниже), но вот необходимые правила:
- Разрешение на доступ извне для службы OpcEnum.
- Разрешение на доступ извне по 135-му TCP-порту.
- Разрешение на доступ извне для CoDeSysOCPDA.
Рекомендую следующую последовательность действий:
- Включить брандмауэр.
- Убедиться, что данные не проходят.
- Создать правила.
- Убедиться, что данные проходят.
Вот и все. Как видите, ничего сложного в пробросе 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
41.6k26 gold badges120 silver badges131 bronze badges
asked Nov 19, 2010 at 9:31
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.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
41.6k26 gold badges120 silver badges131 bronze badges
asked Nov 19, 2010 at 9:31
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.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);
};
}
Содержание
- DCOM для ОС Windows 10
- Члены групп
- Настройки DCOM
- Настройки брандмауэра
- Настройка параметров DCOM. Dcomcnfg
- Настройка DCOM и OPC на Windows 2008 и Windows 7
- 4. Настройка параметров DCOM
- 4.1 Настройка параметров по умолчанию
- 4.2 Настройка параметров для OPC сервера
- 4.3 Настройка доступа к OPC серверам «Для всех»
- Настройка DCOM
- Настройка DCOM
- Настройка общих параметров DCOM
- 4.1.2 Настройка параметров DCOM для OPC-сервера
- DCOM для ОС Windows 10
- Члены групп
- Настройки DCOM
- Настройки брандмауэра
- Настройка параметров DCOM и Dcomcnfg на Windows 8, Windows Server 2012
- 4. Настройка параметров DCOM
- 4.1 Настройка параметров по умолчанию
- 4.2 Настройка параметров для OPC сервера
- 4.3 Настройка доступа к OPC серверам «Для всех»
Не удаётся получить данные от удалённого OPC-сервера. Подключение происходит, тэги отображаются корректно, но примитив с синим «!».
Члены групп
Убедитесь, что пользователь Dispatcher входит в группу Пользователи DCOM (англ.Distributed COM Users) и Опытные пользователи (англ.PowerUsers), а пользователь AdminScada входит в группу Администраторы.
Настройки DCOM
Откройте оснастку Службы компонентов как указано на рисунке 1.
Откройте вкладку «Безопасность COM «Служб компонентов» как указано на рисунке 2.
В разделах Права доступа и Разрешение на запуск и активацию нажмите Изменить умолчания и добавьте группу Пользователи DCOM как указано на рисунке 3
Примените изменения и нажмите кнопку OK.
Откройте свойства службы компонентов Tekon в разделе Настройка DCOM как показано на рисунке 4.
Выберите вкладку Безопасность и пункты Разрешение на запуск и активацию и Разрешение на изменение настроек рис.5.
Добавьте группу Пользователи DCOM с правами, как показано на Рис.6.
Примените изменения и нажмите кнопку OK.
Настройки брандмауэра
Убедитесь, что настройки правил Брандмауэра Windows включают в себя
Источник
Верси для печати
4. Настройка параметров DCOM
Для корректной работы OPC серверов необходимо настроить сетевые параметры и параметры безопасности DCOM.
Настройка OpcEnum не требуется, поскольку данная служба автоматически настраивается при установке «OPC Core Components».
Пример настройки параметров приведен для тестового OPC сервера «Те st OPC Server». Настройка параметров DCOM выполняется с помощью служебной команды «dcomcnfg».
Для запуска «dcomcnfg» нажмите на клавиатуре Win+ R, чтобы открыть окно запуска программ из командной строки.
Рис. 20 Запуск службы компонентов
4.1 Настройка параметров по умолчанию
Рис. 22 Безопасность COM
Кликните по кнопке №1 (рис. 22). В появившемся диалоговом окне (рис.23):
Рис. 23 Настройка прав доступа
Повторите действия в диалоговом окне «Разрешение на запуск и активацию» (рис.24), которое появляется при клике на кнопке №2 «Изменить умолчания» (рис.22).
Рис. 24 Настройка разрешений на запуск
На закладке «Набор протоколов» (рис.25) удалите все протоколы, кроме TCP/ IP и нажмите «OK» для того чтобы сохранить изменения в диалоговом окне «Свойства: Мой компьютер».
Рис. 25 Настройка разрешений на запуск
4.2 Настройка параметров для OPC сервера
Рис. 26 Настройка DCOM для OPC сервера
Поскольку все параметры были настроены для всего компьютера, то необходимо убедиться, что OPC сервер использует параметры по умолчанию.
Рис. 27 Общие свойства OPC сервера
Рис. 28 Свойства безопасности
Рис. 29 Конечные узлы
Рис. 30 Удостоверение
На закладке «Удостоверение» необходимо указать имя пользователя, который был создан ранее, от имени которого будет запускаться OPC сервер.
Замечание 1. Перед изменением настроек OPC сервера необходимо убедиться, что он не запушен и отсутствует в списке активных процессов. Или перезапустить OPC сервер после изменения настроек.
Замечание 2. Для некоторых OPC серверов необходимо, чтобы они были запущены хотя бы один раз с правами администратора, для того чтобы зарегистрироваться в системе и инициализировать параметры OPC сервера. Только после такой инициализации они будут доступны для обнаружения через OpcEnum и подключения.
4.3 Настройка доступа к OPC серверам «Для всех»
Внимание! Разрешение доступа для всех может снизить уровень безопасности компьютера.
Иногда требуется разрешить доступ к OPC серверу для всех, включая анонимных пользователей. Например, когда компьютер с сервером не включен в домен, а к серверу будут подключаться множество клиентов.
Если вы хотите дать доступ к OPC серверу для всех, то необходимо настроить индивидуальные права доступа для выбранного OPC сервера.
Откройте настройки DCOM для OPC сервера, как показано в разделе 4.2 и модифицируйте их согласно рис.31 – рис.34. Остальные опции должны соответствовать параметрам, указанным в разделе 4.2.
Рис. 31 Общие свойства
Рис. 32 Свойства безопасности
Рис. 33 Разрешения на запуск и активацию
Рис. 34 Права доступа
Рис. 35 Свойства политики безопасности
Если после изменения политики безопасности, как показано на рис. 35, OPC клиенты не могут получать список OPC серверов и подключаться к ним, то необходимо настроить и сохранить дополнительные свойства политики безопасности (рис. 36-37).
Рис. 36 DCOM: ограничения на доступ
Рис. 37 DCOM: ограничения на запуск
Процесс добавление группы пользователь подробно показан в разделе 2.2.
Источник
Настройка DCOM
Для настройки прав доступа к DCOM-приложениям в операционных системах Windows XP, Windows Server 2003 и Windows Vista используется оснастка «Службы компонентов» (Component Services) консоли управления.
Оснастку можно вызвать:
Рисунок 4.15 Запуск утилиты dcomcnfg
Рисунок 4.16 Системные инструментальные средства «Службы компонентов»
После запуска оснастки «Службы компонентов» производится поиск COM-приложений, которые ещё не зарегистрированы в системе на данный момент, и предлагается зарегистрировать их. Обычно, следует разрешать регистрацию, за исключением случаев, когда иное не указано в документации на программное обеспечение.
После запуска появляется окно «Службы компонентов» (рисунок 4.17)
Рисунок 4.17 Оснастка «Службы компонентов»
После перехода к более низкому уровню безопасности следует перезапустить операционную систему, чтобы изменения вступили в силу.
Настройка общих параметров DCOM
Для установления связи с удаленными OPC-серверами сначала следует настроить общие параметры DCOM. Для этого:
Кнопка «Изменить ограничения…» может быть не доступна, если была изменена политика «DCOM: Ограничения компьютера на доступ в синтаксисе SDDL (Security Descriptor Definition Language)». В этом случае пропустите текущий шаг.
Эти настройки необходимы для функционирования утилиты поиска OPC-серверов (OPCEnum.exe) и некоторых OPC-серверов, для которых «Уровень проверки подлинности» («Authentication Level») установлен «Нет» («None»).
Этот шаг настройки необходимо выполнить как на компьютере, где установлен OPC-сервер, так и на компьютере, где установлен OPC-клиент. Остальные шаги выполняются на компьютере сервера.
Закладка «Свойства по умолчанию» (рисунок 4.22)
Значения по умолчанию:
- Установлена галочка «Разрешить использование DCOM на этом компьютере».
- § «Уровень проверки подлинности по умолчанию» – «Подключение».
- § «Уровень олицетворения по умолчанию» – «Идентификация».
- § Снята галочка «Повышенная безопасность для отслеживания ссылок».
Рисунок 4.22 — Свойства компьютера, закладка «Свойства по умолчанию»
Добавлены следующие протоколы DCOM:
- § «TCP/IP c ориентацией на подключения»
- § «SPX c ориентацией на подключения».
Значения по умолчанию:
- § Установлена галочка «Проверять локальное хранилище при выборе раздела».
- § «Время ожидания транзакции (с)»: 60.
При работе в компьютерной сети в случае возникновения обрывов, переполнения и других критических ситуациях при попытках восстановления связи DCOM-приложения используют время ожидания транзакции (Transaction timeout). Это время, в течение которого DCOM-приложение посылает запрос к источнику данных и ожидает восстановления связи. DCOM-приложение совершает до 6 таких попыток, прежде чем подаст сигнал об ошибке в сети.
По умолчанию этот интервал равен 60 секундам. Соответственно, максимальное время, за которое DCOM-приложение определит, что сеть неисправна – 60*6 = 360 секунд или 6 минут.
Однако это время не всегда может устроить Пользователей DCOM-приложения. Очевидно, что чем короче время ожидания транзакции, тем быстрее DCOM-приложение сможет сообщить Пользователю об ошибке в сети. Поэтому, если Пользователь DCOM-приложения хочет сократить время определения ошибки в сети, он может уменьшить время ожидания транзакции.
Времени ожидания транзакции настраивается на компьютере сервера.
При изменении времени ожидания транзакции следует понимать, что это коснется ВСЕХ 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»)
- 3) В открывшемся окне «Свойства:…» перейдите на закладку «Безопасность» («Security»)
- 4) На панели «Разрешения на запуск и активацию» выберите «Настроить» и нажмите на кнопку «Изменить …». В открывшемся окне «Разрешение на запуск» (рисунок 4.26) нажмите кнопку «Добавить» и добавьте группу «Users OPC» (описание в разделе 4.1 «Создание и настройка учетных записей Пользователей»)
Для группы «Users OPC»поставьте галочки «Разрешить» для всех пунктов. Если Пользователи группы должны получить только удаленный доступ к OPC-серверу, поставьте галочки «Разрешить» только для пунктов «Удаленный запуск» и «Удаленная активация»
- 5) На панели «Права доступа» (закладка «Безопасность») выберите «Настроить» и нажмите на кнопку «Изменить …». В открывшемся окне «Разрешение на доступ» (рисунок 4.27) нажмите кнопку «Добавить» и добавьте группу «Users OPC» (описание в разделе 4.1 «Создание и настройка учетных записей Пользователей»)
Для этой группы («Users OPC») поставьте галочки «Разрешить» для всех вариантов доступа.
Если Пользователи группы должны получить только удаленный доступ к OPC-серверу, поставьте галочку «Разрешить» только для пункта «Удаленный доступ».
- 6) Для того, чтобы указать, под какой учетной записью будет запускаться OPC-сервер, перейдите на закладку «Удостоверение» (рисунок 4.28).
Выбор учетной записи для запуска данного приложения зависит от реализации данного OPC-сервера. Воспользуйтесь документацией к OPC-серверу, чтобы выбрать «запускающего» Пользователя.
Общие рекомендации по выбору Пользователя для запуска OPC-сервера приведены в таблице 4.1.
Источник
Не удаётся получить данные от удалённого OPC-сервера. Подключение происходит, тэги отображаются корректно, но примитив с синим «!».
Члены групп
Убедитесь, что пользователь Dispatcher входит в группу Пользователи DCOM (англ.Distributed COM Users) и Опытные пользователи (англ.PowerUsers), а пользователь AdminScada входит в группу Администраторы.
Настройки DCOM
Откройте оснастку Службы компонентов как указано на рисунке 1.
Откройте вкладку «Безопасность COM «Служб компонентов» как указано на рисунке 2.
В разделах Права доступа и Разрешение на запуск и активацию нажмите Изменить умолчания и добавьте группу Пользователи DCOM как указано на рисунке 3
Примените изменения и нажмите кнопку OK.
Откройте свойства службы компонентов Tekon в разделе Настройка DCOM как показано на рисунке 4.
Выберите вкладку Безопасность и пункты Разрешение на запуск и активацию и Разрешение на изменение настроек рис.5.
Добавьте группу Пользователи DCOM с правами, как показано на Рис.6.
Примените изменения и нажмите кнопку OK.
Настройки брандмауэра
Убедитесь, что настройки правил Брандмауэра Windows включают в себя
Источник
Верси для печати
Для корректной работы OPC серверов необходимо настроить сетевые параметры и параметры безопасности DCOM.
Настройка OpcEnum не требуется, поскольку данная служба автоматически настраивается при установке «OPC Core Components».
Пример настройки параметров приведен для тестового OPC сервера «Теst OPC Server» (является 32-х битным приложением). Настройка параметров DCOM выполняется с помощью панели управления «Службы компонентов» Windows. В зависимости от разрядности операционной системы и приложения OPC сервера необходимо запускать соответствующую версию панели управления:
Для выполнения команды нажмите на клавиатуре Win + R, чтобы открыть окно запуска программ из командной строки.
Рис. 19.1 Запуск службы компонентов (вариант 1)
Рис. 20 Запуск службы компонентов (вариант 2)
4.1 Настройка параметров по умолчанию
Рис. 22 Безопасность COM
Кликните по кнопке №1 (рис. 22). В появившемся диалоговом окне (рис.23):
Рис. 23 Настройка прав доступа
Повторите действия в диалоговом окне «Разрешение на запуск и активацию» (рис.24), которое появляется при клике на кнопке №2 «Изменить умолчания» (рис.22).
Рис. 24 Настройка разрешений на запуск
На закладке «Набор протоколов» (рис.25) удалите все протоколы, кроме TCP/ IP и нажмите «OK» для того чтобы сохранить изменения в диалоговом окне «Свойства: Мой компьютер».
Рис. 25 Настройка разрешений на запуск
4.2 Настройка параметров для OPC сервера
Рис. 26 Настройка DCOM для OPC сервера
Поскольку все параметры были настроены для всего компьютера, то необходимо убедиться, что OPC сервер использует параметры по умолчанию.
Рис. 27 Общие свойства OPC сервера
Рис. 28 Свойства безопасности
Рис. 29 Конечные узлы
Рис. 30 Удостоверение
На закладке «Удостоверение» необходимо указать имя пользователя, который был создан ранее, от имени которого будет запускаться OPC сервер.
Замечание 1. Перед изменением настроек OPC сервера необходимо убедиться, что он не запушен и отсутствует в списке активных процессов. Или перезапустить OPC сервер после изменения настроек.
Замечание 2. Для некоторых OPC серверов необходимо, чтобы они были запущены хотя бы один раз с правами администратора, для того чтобы зарегистрироваться в системе и инициализировать параметры OPC сервера. Только после такой инициализации они будут доступны для обнаружения через OpcEnum и подключения.
4.3 Настройка доступа к OPC серверам «Для всех»
Внимание! Разрешение доступа для всех может снизить уровень безопасности компьютера.
Иногда требуется разрешить доступ к OPC серверу для всех, включая анонимных пользователей. Например, когда компьютер с сервером не включен в домен, а к серверу будут подключаться множество клиентов.
Если вы хотите дать доступ к OPC серверу для всех, то необходимо настроить индивидуальные права доступа для выбранного OPC сервера.
Откройте настройки DCOM для OPC сервера, как показано в разделе 4.2 и модифицируйте их согласно рис.31 – рис.34. Остальные опции должны соответствовать параметрам, указанным в разделе 4.2.
Рис. 31 Общие свойства
Рис. 32 Свойства безопасности
Рис. 33 Разрешения на запуск и активацию
Рис. 34 Права доступа
Рис. 35 Свойства политики безопасности
Если после изменения политики безопасности, как показано на рис. 35, OPC клиенты не могут получать список OPC серверов и подключаться к ним, то необходимо настроить и сохранить дополнительные свойства политики безопасности (рис. 36-37).
Рис. 36 DCOM: ограничения на доступ
Процесс добавление группы пользователь подробно показан в разделе 2.2.
Источник