Доброго всем здравия.
Появилась нужда в собственном 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 больше симпатизирует)))).
Все дополнительные файлы и библиотеки по ссылке:
Файлы проекта