DrvOPCClassic Error 0x80040202

Просмотр 15 сообщений - с 1 по 15 (из 18 всего)
  • Автор
    Записи
  • #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
    Ошибка при создании подписок:
    0x80040202

    https://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-сервер становится клиентом, а Клиент становится сервером.

    Я конечно мог бы попытаться это исправить, будь этот драйвер не закрытый, т.к. его нет в исходном коде.
    Но вопрос один: доработка драйвера будет или мне мучить АРМ?
    Если с АРМ не получиться, то писать свой драйвер? 🙂

    #27673
    Mikhail
    Модератор

    Добрый день!

    Вопрос в том, можно ли тут что-то исправить в коде драйвера, чтобы подписка удалась?

    Исходники могу прислать, если нужно. Они закрыты не потому что какие-то секретные, а потому что библиотеки для OPC Classic проприетарные. В отличие библиотек OPC UA, которые распространяются открыто.

    #27675
    JurasskPark
    Участник

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

    #27679
    JurasskPark
    Участник

    https://disk.yandex.ru/i/nLGIszPiSqBShQ
    До тестового драйвера руки не дошли. Взял старый проект на с#, он подключился и данные смог отобразить.

    #27682
    Mikhail
    Модератор

    Исходники DrvOpcClassic
    У Вас OPC Core Components какой версии установлены?

    #27683
    JurasskPark
    Участник

    Скачал. Можете прятать.
    Я ставил скачанные с сайта.
    https://rapidscada.org/download/opc-core-components-redistributables-3.00.108-20191220.zip

    #27684
    Mikhail
    Модератор

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

    #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.png

    #27771
    Mikhail
    Модератор

    Правильно ли я понял, что Вы будете использовать библиотеки OPC-клиента от другого производителя, собранные Вами из исходников, в своём драйвере?

    Вообще Kepware подключался к Rapid SCADA, например, в этой теме упоминается.

    Теги на DASServer’a не любят заводить и поэтому импортировать оттуда собственно нечего

    То есть в обзоре сервера тегов нет, а на самом деле есть?

    #27772
    Mikhail
    Модератор

    Чтение тегов и подписка на теги — это разные вещи в OPC.
    Существующий драйвер использует подписку (здесь и возникла ошибка в Вашем случае). Вы будете читать теги в цикле?

    #27778
    JurasskPark
    Участник

    Правильно ли я понял, что Вы будете использовать библиотеки OPC-клиента от другого производителя, собранные Вами из исходников, в своём драйвере?

    Да.

    То есть в обзоре сервера тегов нет, а на самом деле есть?

    Да. Их нужно (пути и названия проаисыввть руками)

    Вы будете читать теги в цикле

    Цикл будет включаться, если в свойствах группы тегов будет стоять признак не подписка, а Синхроноое или Асинхроное чтение.

    #27796
    Mikhail
    Модератор

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

    На мой взгляд, самый быстрый способ — унаследовать новый драйвер от DrvOpcClassic, добавив опцию синхронного или асинхронного чтения.

    Выбор решения, конечно, на усмотрение автора драйвера.

    #27800
    JurasskPark
    Участник

    На мой взгляд, самый быстрый способ — унаследовать новый драйвер от DrvOpcClassic, добавив опцию синхронного или асинхронного чтения.

    Так я так и хотел. Я поэтому и написал, что думал быстро управлюсь. Но у меня не получилось. 🙂 В смысле я не смог заставить его читать, т.к. не смог понять как это сделать. ?

    P.S. Я поэтому и спросил, может вы добавите этот режим, а то мне писать свой драйвер не охота. ?

    #27803
    Mikhail
    Модератор

    Данную частную функцию можно добавить на коммерческой основе.
    Если делать за наш счёт, то сейчас есть задачи с большим приоритетом.

    #28069
    JurasskPark
    Участник

    Причина моей проблемы:
    https://pyatilistnik.org/oshibka-dcom-id-10036/?ysclid=lg6bjj5rff467783427
    У меня сервер 2019 с установленным патчем, где уровень авторизации изменили, а на АРМ XP, которая пытается пройти авторизацию, а 2019 её не пускает.
    В итоге поэтому подписка и не работает.

Просмотр 15 сообщений - с 1 по 15 (из 18 всего)
  • Для ответа в этой теме необходимо авторизоваться.