Доброго всем здравия.
Появилась нужда в собственном OPC DA клиенте.
Задача читать тэги с сервера и в дальнейшем передавать по сети на другие компьютеры.
Для тестирования клиента использую бесплатный Matrikon.OPC.Simulation.1
Код ниже успешно подключается к серверу который можно указать в программе в ручную, по умолчанию Matrikon.OPC.Simulation.1.
; Включаем нужные библиотеки IncludeFile "ComHelper.pb" IncludeFile "OPC-Automation-1.pbi" IncludeFile "VariantHelper_Include.pb" Global *OpcAutomation.IUnknown Global *OpcServer.IOPCAutoServer ; Функция для обработки ошибок Procedure HandleError(errorCode, message.s) If errorCode Debug "Ошибка: " + message + " | Код ошибки: " + FormatMessage(errorCode) EndIf ProcedureReturn errorCode EndProcedure ; Запрос имени OPC сервера у пользователя Define ServerName.s ServerName = InputRequester("Подключение к OPC серверу", "Введите имя OPC сервера (например, Matrikon.OPC.Simulation.1):", "Matrikon.OPC.Simulation.1") If ServerName = "" Debug "Имя OPC сервера не введено." End EndIf Debug "*** Создание объекта OPC Automation ***" *OpcAutomation = CreateObject("OPC.Automation.1") If *OpcAutomation = 0 HandleError(1, "Ошибка при создании объекта OPC Automation") End EndIf Debug "Запрос интерфейса OPCAutoServer" r1 = *OpcAutomation\QueryInterface(?IID_IOPCAutoServer, @*OpcServer) If HandleError(r1, "Ошибка при запросе интерфейса IOPCAutoServer") End EndIf Debug "Подключение к серверу OPC" Define Node.Variant r1 = *OpcServer\Connect(ServerName, Node) If HandleError(r1, "Ошибка подключения к OPC серверу: " + ServerName) End Else Debug "Успешное подключение к OPC серверу: " + ServerName EndIf ; Завершение работы. ; Отключаемся от сервера r1 = *OpcServer\Disconnect() If HandleError(r1, "Ошибка при отключении от OPC сервера") End EndIf ; Освобождаем ресурсы *OpcServer\Release() *OpcAutomation\Release() End
Далее интересует чтение и отображение существующих тегов с сервера, для этого существует метод CreateBrowser()
Не могу разобраться как правильно организовать этот CreateBrowser()
Приветствуется любая помощь.
Есть варианты сделать данную задачу на VB, но PureBasic больше симпатизирует)))).
Все дополнительные файлы и библиотеки по ссылке:
Файлы проекта