Пожалуйста, включите JavaScript для просмотра этого сайта.

Скрипты Simple-Scada

История: Примеры скриптов

Вызов методов OPC UA

Пред. Вверх След. Еще

Для вызова метода нужно знать его адрес и адрес объекта, которому он принадлежит. В этом примере мы будем использовать OPC-UA клиент UAExpert для просмотра доступных методов UA-сервера, их адресов и параметров. Скачать его можно по ссылке.

Запускаем UaExpert, подключаемся к UA-серверу, находим интересующий нас метод и смотрим его полный адрес из атрибута NodeId.

Смотрим какие входные параметры нужно передать в метод. В данном случае, видим что в метод нужно передать два параметра типа Double:

Выделяем папку, внутри которой лежит метод и смотрим ее полный адрес.

Теперь, зная полный адрес метода и объекта, которому он принадлежит, а также параметры, которые в него требуется передать, можно вызвать метод через скрипты скады:

var
  aMethod: TM_UAMethod;
begin
  // создаём метод, указывая полный адрес метода и объекта которому он
  // принадлежит. Помечаем метод тегом = 33.
  aMethod := CreateUAMethod('ns=4;s=Demo.Method.Multiply''ns=4;s=Demo.Method'33);
  // добавляем параметры в метод
  aMethod.AddDouble(25);
  aMethod.AddDouble(3);
  // вызываем метод
​  UAServer1.Call(aMethod);
end.

В примере вызывается метод для OPC UA-сервера с именем UAServer1. Вы должны указать имя вашего OPC-сервера. Посмотреть и изменить имя UA-сервера можно через параметр "Имя в скриптах" в меню "Проект -> OPC-серверы".

Далее, можно обработать и отобразить результат выполнения метода. Для этого создадим новый скрипт с типом события "Выполнен метод OPC-UA" и следующим кодом:

var
  I: Integer;
begin
  // если это результат вызова метода с тегом = 33
  if UAResult.Tag = 33 then
    // если при вызове метода возникла ошибка, то выводим её в Text1
    if UAResult.Error <> '' then
      Text1.Text := 'Ошибка при вызове метода: ' + UAResult.Error
    else
​      // если метод вернул результат, то выводим результат в Text1
​      if UAResult.Count > 0 then
​        Text1.Text := UAResult[0].AsStr;
end.

Теперь результат вызова метода будет отображен в компоненте Text1. Для вышеописанного примера результатом будет 75 (т.е. 25 * 3).