Вызов внешних функций

<< Click to Display Table of Contents >>

Navigation:  Multi-Protocol MasterOPC Server > Руководство по языку Lua 5.1 > Библиотеки функций > Библиотека SERVER >

Вызов внешних функций

Вызов внешних функций
mbul_mail server.RunFunctionFromDevice

mbul_mail server.RunFunctionFromDeviceByName

mbul_mail server.RunFunctionFromNode

mbul_mail server.RunFunctionFromNodeByName

mbul_mail server.RunFunctionFromSubDevice

mbul_mail server.RunFunctionFromSubDeviceByName

mbul_mail server.StringToTable

mbul_mail server.TableToString

Если необходимо вызвать функцию расположенную в текущем скрипте используется стандартных механизм Lua - см. раздел Вызовы функций и Объявление функций. В случае, если функции находятся в другом скрипте (в скрипте другого узла, устройства, подустройства), то вызов функции производится через дополнительную функцию, в которой и производится адресация к скрипту конкретного элемента конфигурации.

Из скрипта тега можно вызывать функции, определенные в подустройстве, устройстве и узле.

Из скрипта подустройства можно вызывать функции, определенные в устройстве и узле.

Из скрипта устройства можно вызывать функции, определенные в узле.

Вызов внешней функции с передачей таблицы возможен только следующим образом: с помощью функции server.TableToString таблица предварительно преобразуется в строку специального формата, и эта строка передается во внешнюю функцию, где выполняется обратное преобразование с помощью функции server.StringToTable .

server.RunFunctionFromDevice

Выполняет функцию, определенную в текущем устройстве.

Входные параметры: имя функции, число возвращаемых параметров, аргументы.

Пример

res = server.RunFunctionFromDevice("Fun",1,1,"t",true);

--В устройстве определяется функция

function Fun(n,t,b)

return "ok"

end

server.RunFunctionFromDeviceByName

Выполняет функцию, определенную в произвольном устройстве.

Входные параметры: полное имя устройства, имя функции, число возвращаемых параметров, аргументы.

Пример

res = server.RunFunctionFromDeviceByName("Узел2.Устройство2","Fun",1,1,"t",true);

--В устройстве определяется функция

function Fun(n,t,b)

return "ok"

end

server.RunFunctionFromNode

Выполняет функцию, определенную в текущем узле.

Входные параметры: имя функции, число возвращаемых параметров, аргументы.

Пример

res = server.RunFunctionFromNode("Fun",1,1,"t",true);

--В узле определяется функция

function Fun(n,t,b)

return "ok"

end

server.RunFunctionFromNodeByName

Выполняет функцию, определенную в произвольном узле.

Входные параметры: имя узла, имя функции, число возвращаемых параметров, аргументы.

Пример

res = server.RunFunctionFromNodeByName("Узел1","Fun",1,1,"t",true);

--В узле определяется функция

function Fun(n,t,b)

return "ok"

end

server.RunFunctionFromSubDevice

Выполняет функцию, определенную в текущем подустройстве.

Входные параметры – имя функции, число возвращаемых параметров, аргументы.

Пример

res = server.RunFunctionFromSubDevice("Fun",1,1,"t",true);

--В подустройстве определяется функция

function Fun(n,t,b)

return "ok"

end

server.RunFunctionFromSubDeviceByName

Выполняет функцию, определенную в произвольном подустройстве.

Входные параметры: полное имя подустройства, имя функции, число возвращаемых параметров, аргументы.

Пример

res=server.RunFunctionFromSubDeviceByName("Узел3.Устройство2.Подустройство1","Fun",1,1,"t",true);

--В подустройстве определяется функция

function Fun(n,t,b)

return "ok"

end

server.StringToTable

Функция возвращает результат преобразования строки специального формата в таблицу (см. server.TableToString ).

Пример

function CRCsum(SFrame)

buf={}; --создание переменной-таблицы

buf=server.StringToTable(SFrame); --преобразование полученной строки в таблицу

-- если  принята строка s, полученная в примере к функции

-- server.TableToString, то buf={10,20,30,40}

end

server.TableToString

Функция возвращает результат преобразования таблицы в строку специального формата. Данная функция используется для передачи таблиц при вызове внешних функций (функций, находящихся в узлах, устройствах, подустройствах). Для обратного преобразования во внешней функции используется функция server.StringToTable .

Пример

buf={10,20,30,40}; --создание переменной-таблицы и заполнение данными

s = server.TableToString(buf); --преобразование таблицы в строку

--вызов внешней функции и передача строки как аргумента:

CRC=server.RunFunctionFromDevice("CRCsum",1,s);

--В вызываемой функции нужно сделать обратное преобразование