Стартовая страница › Форумы › Ошибки в работе › DrvOPCClassic Error 0x80040202
- В этой теме 17 ответов, 2 участника, последнее обновление 3 года, 1 месяц назад сделано
Mikhail.
-
АвторЗаписи
-
13.03.2023 в 11:40 #27669
JurasskParkУчастникДобрый день.
Сразу скажу, что на АРМ откуда собираются данные, накручены политики безопасности и стандартный ответ я знаю «настройте политики ИБ правильно, тогда и данные будут» 🙂
Это понятно. Но сообщить я должен.Если есть ошибка «0x80040202 DCOM Error», то опрос прекращается и попытка перейти с режима Подписика на режим клиент — не происходит.
2023-03-13 13:33:35 Запуск линии связи [27] BZ_DLG_ARM
2023-03-13 13:33:35 Соединение с Wonderware.KEPServer/{6e61711d-ff2d-11d2-8087-00105aa8f840}
Соединение с OPC DA сервером установлено2023-03-13 13:33:37 Создание подписок
Создание подписки «BZ_DLG_UVP1» для устройства [41] BZ_DLG_UVP3
Ошибка при создании подписок:
0x80040202https://www.opcti.com/callback-fail-dcom-error.aspx
Cause
0x80040202 error appears in the OPC Client application when it fails to receive a callback from the OPC Server.Symptoms
When an OPC Client application is unable to receive callbacks from an OPC Server, users will notice at least two symptoms: The OPC Client application will fail to create an OPC Group altogether. The OPC Client application will not be able to show data updates. Instead, data values will remain unchanged.Background
OPC supports a report-by-exception (RBX) mechanism whereby the OPC Server sends data updates to the OPC Client (such as an HMI, Historian, APC, ERP, etc.) whenever the data changes (also known as «on data change»). OPC terminology refers to this mechanism as «subscription». OPC Servers are able to achieve subscription updates through the use of asynchronous callbacks. In other words, when the OPC Server detects a change in the data, it immediately «calls» the client back with the data update. This is an asynchronous mechanism because the OPC Client does not know when the OPC Server will send the data. However, if you don’t set the security settings properly, these data updates will fail. OPC Client applications typically indicate this failure by setting the Quality value of an item to «Bad».Callbacks force an OPC Server to actively establish a connection with an OPC Client. In a sense, the OPC Server becomes a Client and the Client becomes a Server.
Test
One simple test to determine whether or not a callback is failing is to force the OPC Client to issue a «Synchronous Cache Read» or a «Synchronous Device Read». If either one of these return values with «Good» quality, then the lack of data updates is likely due to the OPC Server being unable to send callbacks to the OPC Client application.Repair Procedures
For the complete step-by-step repair procedure to fix this DCOM error, download the complete whitepaper.For automated troubleshooting, refer to OPC Expert, a software application to troubleshoot OPC connections. If OPC Expert fails to connect, it automatically informs you of the problem, diagnoses the cause, and suggests a solution. OPC Expert is free to download, does not require installation, and does not make any changes to Windows registry, so it is safe to use on your computer. Download at http://www.OpcExpert.com.
Перевод нужного куска:
Терминология OPC называет этот механизм «подпиской». OPC-серверы способны получать обновления по подписке с помощью асинхронных обратных вызовов. Другими словами, когда OPC-сервер обнаруживает изменение в данных, он немедленно «перезванивает» клиенту с обновлением данных. Это асинхронный механизм, поскольку OPC-клиент не знает, когда OPC-сервер отправит данные. Однако, если вы неправильно настроите параметры безопасности, эти обновления данных завершатся неудачей. Клиентские приложения OPC обычно указывают на этот сбой, устанавливая значение качества элемента на «Плохое».
Обратные вызовы заставляют OPC-сервер активно устанавливать соединение с OPC-клиентом. В некотором смысле OPC-сервер становится клиентом, а Клиент становится сервером.
Я конечно мог бы попытаться это исправить, будь этот драйвер не закрытый, т.к. его нет в исходном коде.
Но вопрос один: доработка драйвера будет или мне мучить АРМ?
Если с АРМ не получиться, то писать свой драйвер? 🙂13.03.2023 в 12:24 #27673
MikhailМодераторДобрый день!
Вопрос в том, можно ли тут что-то исправить в коде драйвера, чтобы подписка удалась?
Исходники могу прислать, если нужно. Они закрыты не потому что какие-то секретные, а потому что библиотеки для OPC Classic проприетарные. В отличие библиотек OPC UA, которые распространяются открыто.
13.03.2023 в 13:00 #27675
JurasskParkУчастникОк. Я тогда сделаю тестовый драйвер, если подключиться смогу и данные получить, значит можно что-то исправить.
13.03.2023 в 18:51 #27679
JurasskParkУчастникhttps://disk.yandex.ru/i/nLGIszPiSqBShQ
До тестового драйвера руки не дошли. Взял старый проект на с#, он подключился и данные смог отобразить.14.03.2023 в 12:30 #27682
MikhailМодераторИсходники DrvOpcClassic
У Вас OPC Core Components какой версии установлены?14.03.2023 в 12:38 #27683
JurasskParkУчастникСкачал. Можете прятать.
Я ставил скачанные с сайта.
https://rapidscada.org/download/opc-core-components-redistributables-3.00.108-20191220.zip15.03.2023 в 11:39 #27684
MikhailМодераторПусть исходники остаются по этой ссылке. В архиве не содержится сторонних DLL.
Обратите внимание, что Коммуникатор работает как сервис. Чаще всего ошибки классического OPC связанны именно с этим.26.03.2023 в 22:25 #27767
JurasskParkУчастникПодведем итоги спустя 2 недели:
1. Проблема не в драйвере DrvOPCClassic. Проверил остальные варианты клиентов от производителей OPC-серверов. Там точно такие же ошибки.
2. Проверил компоненты Rcw, DA. Из анализа ошибок и подключений серверов, заметил, что без подключения и попытки чтения Ae такого нет. Посмотрел код, там в Com для Ae для класса FILETIME написано, что если компилируется библиотека для Core, то эту класс не включать «If Core».
3. Собрал от Technosoftware из исходников Rcw, Com и клиента. Буду на основе их Sample переносить код в свой драйвер.
4. Учитывая что названия классов у клиентов несовместимы, взял шаблон от своего DrvModbusJP структуру и буду писать свой драйвер. Хотя я этого не хотел и думал быстренько доработаю и будет всё работать. Наивный. 🙂 Учитывая, что драйвер всё равно пишу с нуля, то отображение данных добавлю и добавление тегов в ручном режиме. Это еще одна причина, что сейчас не хватает. т.к. кое-кто из АСУТП любителей Интача, теги на DASServer’a не любят заводить и поэтому импортировать оттуда собственно нечего… А это не первый случай… )))Ну и просто картинка для тех кто дочитал до сюда.
https://i.ibb.co/qkdQKV7/01.png27.03.2023 в 12:39 #27771
MikhailМодераторПравильно ли я понял, что Вы будете использовать библиотеки OPC-клиента от другого производителя, собранные Вами из исходников, в своём драйвере?
Вообще Kepware подключался к Rapid SCADA, например, в этой теме упоминается.
Теги на DASServer’a не любят заводить и поэтому импортировать оттуда собственно нечего
То есть в обзоре сервера тегов нет, а на самом деле есть?
27.03.2023 в 12:40 #27772
MikhailМодераторЧтение тегов и подписка на теги — это разные вещи в OPC.
Существующий драйвер использует подписку (здесь и возникла ошибка в Вашем случае). Вы будете читать теги в цикле?27.03.2023 в 16:14 #27778
JurasskParkУчастникПравильно ли я понял, что Вы будете использовать библиотеки OPC-клиента от другого производителя, собранные Вами из исходников, в своём драйвере?
Да.
То есть в обзоре сервера тегов нет, а на самом деле есть?
Да. Их нужно (пути и названия проаисыввть руками)
Вы будете читать теги в цикле
Цикл будет включаться, если в свойствах группы тегов будет стоять признак не подписка, а Синхроноое или Асинхроное чтение.
28.03.2023 в 16:51 #27796
MikhailМодераторДрайвер DrvOpcClassic использует официальные свежие библиотеки от OPC Foundation. Думаю, что в режиме прямого чтения они тоже заработают. Вероятно, подписка как-то запрещена правилами безопасности OPC-сервера.
На мой взгляд, самый быстрый способ — унаследовать новый драйвер от DrvOpcClassic, добавив опцию синхронного или асинхронного чтения.
Выбор решения, конечно, на усмотрение автора драйвера.
28.03.2023 в 20:15 #27800
JurasskParkУчастникНа мой взгляд, самый быстрый способ — унаследовать новый драйвер от DrvOpcClassic, добавив опцию синхронного или асинхронного чтения.
Так я так и хотел. Я поэтому и написал, что думал быстро управлюсь. Но у меня не получилось. 🙂 В смысле я не смог заставить его читать, т.к. не смог понять как это сделать. ?
P.S. Я поэтому и спросил, может вы добавите этот режим, а то мне писать свой драйвер не охота. ?
29.03.2023 в 16:39 #27803
MikhailМодераторДанную частную функцию можно добавить на коммерческой основе.
Если делать за наш счёт, то сейчас есть задачи с большим приоритетом.07.04.2023 в 13:34 #28069
JurasskParkУчастникПричина моей проблемы:
https://pyatilistnik.org/oshibka-dcom-id-10036/?ysclid=lg6bjj5rff467783427
У меня сервер 2019 с установленным патчем, где уровень авторизации изменили, а на АРМ XP, которая пытается пройти авторизацию, а 2019 её не пускает.
В итоге поэтому подписка и не работает. -
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.