Функции работы с тегами

<< Click to Display Table of Contents >>

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

Функции работы с тегами

Функции работы с тегами

mbul_mail server.GetAttributeCurrentTag

mbul_mail server.GetAttributeTag

mbul_mail server.GetAttributeTagByNumber

mbul_mail server.GetAttributeTagByRelativeName

mbul_mail server.GetCountTags

mbul_mail server.IsWriteFromScript

mbul_mail server.ReadCurrentTag

mbul_mail server.ReadTag

mbul_mail server.ReadTagByNumber

mbul_mail server.ReadHDAFromTag

mbul_mail server.ReadTagByRelativeName

mbul_mail server.SetTagToOnOff

mbul_mail server.SkipNextCycles

mbul_mail server.UndoCurrentTag

mbul_mail server.WriteCurrentTag

mbul_mail server.WriteCurrentTagToDevice

mbul_mail server.WriteCurrentTagToHda

mbul_mail server.WriteTag

mbul_mail server.WriteTagByNumber

mbul_mail server.WriteTagByNumberToDevice

mbul_mail server.WriteTagByNumberToHda

mbul_mail server.WriteTagByRelativeName

mbul_mail server.WriteTagByRelativeNameToDevice

mbul_mail server.WriteTagByRelativeNameToHda

mbul_mail server.WriteTagToDevice

mbul_mail server.WriteTagToHda

mbul_mail server.ReadTagsByTable

mbul_mail server.WriteTagsByTable

При возникновении фатальных ошибок в функциях работы с тегами взводится флаг ошибки скрипта, и этот скрипт дальше выполняться не будет.

Понятия номера, полного и относительного имени тега даны в разделе Иерархия объектов в дереве .

server.GetAttributeCurrentTag

Аналог server.GetAttributeTag , возвращает таблицу параметров текущего тега.

Пример

local err,t;

err,t = server.GetAttributeCurrentTag( );

server.GetAttributeTag

Возвращает атрибуты (свойства) произвольного тега по его полному  имени. Аргумент функции – полный путь к тегу.

Функция возвращает:

mbul   флаг ошибки: true – ошибка получения тега (тег не существует), false – ошибки нет;

mbul   таблицу атрибутов. Таблица состоит из 11 элементов, описывающие свойства тега:

1.короткое имя тега (например "Тег1");

2.полное имя тега (включая узел, устройства, подустройства, группы – например, "Узел3.Устройство1.Тег1");

3.комментарий к тегу;

4.регион тега (например, "Holding_Registers", "Input_Registers", "Server_Only");

5.номер регистра для чтения (у "Server_Only" – всегда ноль);

6.номер регистра для записи. Если запись в отдельный регистр не включена, то совпадает с регистром чтения. У "Server_Only" – всегда ноль;

7.тип данных в устройстве (например, "int16", "int32"). У "Server_Only" значение всегда равно "none";

8.тип данных в сервере (например "float", "int32");

9.тип доступа (например, "ReadOnly", "WriteOnly", "ReadWrite");

10.включен в работу (true – включен, false – выключен);

11.HDA-доступ (true – тег является тегом HDA, false – тег является тегом DA).

Пример

local err,Tab=server.GetAttributeTag("Узел2.Устройство1.Тег1");

-- переменная err содержит флаг ошибки, Tab – таблица со всеми атрибутами тега

server.GetAttributeTagByNumber

Возвращает атрибуты (свойства) произвольного тега по его номеру. Функция может возвращать параметры тегов текущего узла, устройства или подустройства (в зависимости от того где она вызывается), а также может возвращать параметры конкретного узла или устройства к которым указан путь.

Функция имеет два входных аргумента:

mbul   номер тега (нумерация с нуля);

mbul   путь к узлу или устройству. Данный атрибут не обязательный, если его не указать - то используется узел или устройство, в котором располагается вызываемый скрипт.

Функция возвращает:

mbul   флаг ошибки: true – ошибка получения тега (тег не существует), false – ошибки нет;

mbul   таблицу атрибутов. Структура таблицы идентична таблице функции server.GetAttributeTag .

Пример

local err,Tab=server.GetAttributeTagByNumber(1); --атрибуты тега №1 текущего узла или устройства

local err,Tab=server.GetAttributeTagByNumber(1,"Node1"); --атрибуты тега №1 узла "Node1"

-- переменная err  содержит флаг ошибки, Tab – таблица со всеми атрибутами тега

server.GetAttributeTagByRelativeName

Возвращает атрибуты (свойства) произвольного тега по его относительному имени. Аргумент функции – относительный путь к тегу.

Функция возвращает:

mbul   флаг ошибки: true – ошибка получения тега (тег не существует), false – ошибки нет;

mbul   таблицу атрибутов. Структура таблицы идентична таблице функции server.GetAttributeTag .

Пример

local err,Tab=server.GetAttributeTagByRelativeName("Тег1");

--переменная err содержит флаг ошибки, Tab – таблица со всеми атрибутами тега

server.GetCountTags

Возвращает общее количество тегов узла, устройства или подустройства (в зависимости от уровня расположения скрипта).

Также можно передать в функцию путь к узлу или устройству - в этом случае будет возвращено количество тегов данного узла/устройства.

Пример

CT = server.GetCountTags(); --количество тегов текущего узла или устройства

CtNode = server.GetCountTags("Node1"); --количество тегов узла Node1

В скрипте тега возвращает 1.

server.IsWriteFromScript

Возвращает true, если запись в тег была произведена из скрипта, и false – если была произведена из OPC-клиента.

Пример

FromScript=server.IsWriteFromScript( );

server.ReadCurrentTag

Возвращает значение, качество и время текущего тега.

Пример

TV,TQ,TS = server.ReadCurrentTag();

server.ReadTag

Возвращает значение, качество и время произвольного тега по его имени.

Пример

TV,TQ,TS = server.ReadTag("Node.Device.Group.Tag");

В данной функции, как и в функции server.WriteTag , могут использоваться следующие псевдо-имена для текущего узла, устройства или подустройства:

mbul   $(N) – текущий узел;

mbul   $(D) – текущее устройство;

mbul   $(S) – текущее подустройство.

Примеры

Ниже приведены примеры функций в том случае, если дерево объектов имеет следующий вид:

NODE1

DEVICE1

SUBDEVICE1

TEG1

SUBDEVICE2

TEG1

TEG1

         

--cкрипт устройства DEVICE1, суммирует 2 тега

--и записывает результат в тег NODE1.DEVICE1.TEG1

t1,q1,ts1 = server.ReadTag("$(N).$(D).SUBDEVICE1.TEG1");

t2,q2,ts2 = server.ReadTag("$(N).$(D).SUBDEVICE2.TEG1");

server.WriteTag("$(N).$(D).TEG1",t1+t2,192);

     

--cкрипт подустройства SUBDEVICE1,

--читает тег NODE1.DEVICE1.TEG1

t1,q1,ts1 = server.ReadTag("$(N).$(D).TEG1");

     

--cкрипт тега SUBDEVICE1.TEG1,

--читает тег NODE1.DEVICE1.TEG1

t1,q1,ts1 = server.ReadTag("$(N).$(D).TEG1");

server.ReadTagByNumber

Возвращает значение, качество и время тега с указанным номером.

Пример

TV,TQ,TS = server.ReadTagByNumber(1);

В скрипте тега возвращает значение текущего тега вне зависимости от номера.

server.ReadHDAFromTag

Возвращает таблицу содержащую архив HDA тега. Основное предназначение данной функции - считывание архивов, для последующего формирования SQL запроса и передачи данных в различные СУБД с использование функций раздела ODBC.

Аргументы функции:

mbul   Имя тега - полное имя тега с HDA архивом.

mbul   Метка времени в локальном формате с которой производится выборка из архива (не включая значение с этой меткой времени). Если передано nil - возвращается весь HDA архив.

mbul   Тип времени возвращаемого архива - в локальном или UTC. Если значение False, то все записи архива возвращаются с локальной меткой времени, если True - с меткой времени в формате UTC.

Возвращаемые значения:

mbul   Количество прочитанных HDA записей.

mbul   Таблица строк считанных из HDA записей (подробнее ниже).

mbul   Метка времени последнего HDA значения в формате TimeStamp.

Основным возвращаемым параметром является таблица со считанными HDA строками. Таблица представляет собой три вложенных таблицы:

Таблица "значения" - значения переменной. Для удобства формирования SQL запроса, значение возвращается в формате строки - то есть делать дополнительных преобразований не требуется.

Таблица "признаки качества" - признаки качества считанной переменной. Признак качества возвращается в формате строки. Примеры строки:

0x000000C0 - GOOD

0x00000040 - Uncertain

0x00000000 - Bad

Таблица "метки времени" - метка времени переменной. Для удобства формирования SQL запроса, метка времени также возвращается в формате строки.

Пример

TimeStart=nil; --инициализируем nil

-- handling

function OnBeforeReading()

Num,Archive,TimeLast=server.ReadHDAFromTag("Simulator.script.Saw",TimeStart,false); --читаем значения их архива HDA переменной

if Num==0 then return; end; --данных нет - выходим

Values=Archive[1]; --получаем таблицу значений

Qual=Archive[2]; --получаем таблицу признаков качества

Times=Archive[3]; --получаем таблицу меток времени

for i=1,table.maxn(Values),1 do --перебираем таблицы и выводим данные

   server.Message("table. Values=",Values[i]," Qual=",Qual[i]," Times=",Times[i]);

end;

TimeStart=TimeLast; --сохраняем последнюю метку времени, чтобы потом начать читать с нее

end

Также пример работы данной функции для записи в базу данных в разделе Работа с ODBC.

server.ReadTagByRelativeName

Возвращает значение, качество и время тега по его относительному имени.

Пример

t, q, ts = server.ReadTagByRelativeName("TagName");

При ошибке значение равно nil, качество равно 0, в ts записывается текст ошибки.

server.SetTagToOnOff

Данная функция аналгична server.SetDeviceToOnOff , позволяет останавливать/запускать исполнение тега.

server.SkipNextCycles

Данная функция позволяет пропустить N следующих циклов опроса тега (N – значение аргумента). Данная функция полезна, если после записи в устройство первый цикл возвращает некорректное значение (характерно для ОВЕН ТРМ2XX).

Пример

server.SkipNextCycles(2)

server.UndoCurrentTag

Отменяет изменение значения текущего тега (восстанавливает предыдущее значение).

Пример

Если в теге задан скрипт, приведенный ниже, то после перевода сервера в режим исполнения и присвоения тегу значения 101 значение тега вновь станет равным 10, а качество – OPC_QUALITY_GOOD.

function OnInit()

server.WriteCurrentTag(10, OPC_QUALITY_UNCERTAIN);

end

function OnClose()

end

function OnRead()

if server.ReadCurrentTag( ) > 100 then

server.UndoCurrentTag( );

end

end

Возвращаемых  значений нет.

server.WriteCurrentTag

Записывает значение, качество в текущий тег. Также третьим параметром можно передавать метку времени в формате TimeStamp

Пример

server.WriteCurrentTag(TV,TQ,TS);

Возвращаемых  значений нет.

server.WriteCurrentTagToDevice

Записывает значение и качество в текущий тег с обращением к устройству. Также третьим параметром можно передавать метку времени в формате TimeStamp

Пример

server.WriteCurrentTagToDevice(TV,TQ,TS);

Возвращаемых  значений нет.

server.WriteCurrentTagToHda

Записывает в архив HDA текущего тега заданные значение, качество и, опционально, метку времени (метка времени задается как 8-байтовый массив – см. time.StringToTimeStamp и time.TimeToTimeStamp ). Для тега должен быть установлен флаг записи в архив HDA (HDA доступ=ИСТИНА – см. Диалог параметров тега ).

Примеры

Запись 120 с качеством OPC_QUALITY_GOOD и текущим временем ОС:

res=server.WriteCurrentTagToHda(120,192);

Запись 120 с качеством OPC_QUALITY_GOOD и заданной меткой времени:

ts = time.StringToTimeStamp("2010-05-03 12:34:45.100");

res= server.WriteCurrentTagToHda(120,192,ts);

Запись 120 с качеством OPC_QUALITY_COMM_FAILURE и заданной меткой времени:

timesec = os.time{year=2010,month=05,day=03,hour=12,min=34,sec=45};

timemsec=200;

ts = time.TimeToTimeStamp(timesec,timemsec);

server.WriteCurrentTagToHda(120,OPC_QUALITY_COMM_FAILURE,ts)

 

server.WriteTag

Записывает значение и качество в тег с указанным полным именем. Также четвертым параметром можно передавать метку времени в формате TimeStamp

Пример

server.WriteTag("Node.Device.Group.Tag",TV,TQ);

Возвращаемых  значений нет.

В данной функции, как и в функции server.ReadTag , могут использоваться псевдо-имена для текущего узла, устройства или подустройства.

server.WriteTagByNumber

Записывает значение и качество в тег с указанным номером. Также четвертым параметром можно передавать метку времени в формате TimeStamp

Пример

server.WriteTagByNumber(1,TV,TQ,TS);

Возвращаемых значений нет. В скрипте тега записывает значение в текущий тег.

server.WriteTagByNumberToDevice

Аналог server.WriteTagByNumber с обращением к устройству.

server.WriteTagByNumberToHda

Записывает в архив HDA тега с указанным номером заданные значение, качество и, опционально, метку времени (метка времени задается как 8-байтовый массив – см. time.StringToTimeStamp и time.TimeToTimeStamp ). Для тега должен быть установлен флаг записи в архив HDA (HDA доступ=ИСТИНА – см. Диалог параметров тега ).

Примеры

Запись 5 с качеством OPC_QUALITY_BAD и текущим временем ОС в архив тега с номером 2:

res=server.WriteTagByNumberToHda(2, 5, OPC_QUALITY_BAD);

Запись 5 с качеством OPC_QUALITY_BAD и заданным временем в архив тега с номером 2:

ts = time.StringToTimeStamp("2010-05-03 12:34:45.100");

res=server.WriteTagByNumberToHda(2, 5, OPC_QUALITY_BAD,ts);

 

server.WriteTagByRelativeName

Записывает значение и качество в тег по его относительному имени. Также четвертым параметром можно передавать метку времени в формате TimeStamp

Пример

res = server.WriteTagByRelativeName("TagName", t, q);

В случае успешного выполнения возвращает true, при ошибке – false.

server.WriteTagByRelativeNameToDevice

Записывает значение и качество в тег по его относительному имени и инициирует запись в устройство.

Пример

res = server.WriteTagByRelativeNameToDevice("TagName", t, q);

В случае успешного выполнения возвращает true, при ошибке – false.

server.WriteTagByRelativeNameToHda

Записывает в архив HDA тега с указанным относительным именем заданные значение, качество и, опционально, метку времени (метка времени задается как 8-байтовый массив – см. time.StringToTimeStamp и time.TimeToTimeStamp ). Для тега должен быть установлен флаг записи в архив HDA (HDA доступ=ИСТИНА – см. Диалог параметров тега ).

Примеры

Запись 5 с качеством OPC_QUALITY_BAD и текущим временем ОС в архив HDA тега Тег1 из скрипта узла Узел1, в который входит устройство Устройство1:

res=server.WriteTagByRelativeNameToHda("Устройство1.Тег1", 5, OPC_QUALITY_BAD);

Запись 5 с качеством OPC_QUALITY_BAD и заданным временем в архив HDA тега Тег1 из скрипта устройства Устройство1 или из скрипта тега устройства Устройство1:

ts = time.StringToTimeStamp("2010-05-03 12:34:45.100");

res=server.WriteTagByRelativeNameToHda("Тег1", 5, OPC_QUALITY_BAD,ts);

 

server.WriteTagToDevice

Записывает значение и качество в тег по его полному имени c обращением к устройству.

Пример

server.WriteTagToDevice("Node.Device.Group.Tag",TV,TQ);

Возвращаемых  значений нет.

server.WriteTagToHda

Записывает в архив HDA тега с указанным полным именем заданные значение, качество и, опционально, метку времени (метка времени задается как 8-байтовый массив – см. time.StringToTimeStamp и time.TimeToTimeStamp ). Для тега должен быть установлен флаг записи в архив HDA (HDA доступ=ИСТИНА – см. Диалог параметров тега ).

Примеры

Запись 5 с качеством OPC_QUALITY_BAD и текущим временем ОС:

res=server.WriteTagToHda("Узел1.Устройство1.Тег1", 5, OPC_QUALITY_BAD);

Запись 5 с качеством OPC_QUALITY_BAD и заданным временем:

ts = time.StringToTimeStamp("2010-05-03 12:34:45.100");

res=server.WriteTagToHda("Узел1.Устройство1.Тег1", 5, OPC_QUALITY_BAD,ts);

 

server.ReadTagsByTable

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

Входные аргументы:

mbul   Таблица с именами тегов;

mbul   Префикс, который добавляется к имени каждого тега (например путь к устройству, в котором расположены теги). Следует помнить, что если указывается путь к узлу/устройству, то необходимо добавить в конце префикса точку - "SCRIPT.script."

Выходные аргументы:

mbul   Таблица результатов считывания. Каждый элемент таблицы содержит другую таблицу со следующими полями:

mbul   Полный путь к тегу. Если у тега задан префикс, то он удаляется из имени тега.

mbul   Значение тега;

mbul   Качество тега;

mbul   Метка времени тега.

В случае ошибки ошибки возвращает nil.

Примеры

 --name tags

local TagNames={"SCRIPT.script.Tag1","SCRIPT.script.Tag2","SCRIPT.script.Tag3"};

local TagsValues=server.ReadTagsByTable(TagNames,""); --read tags

if TagsValues==nil then --check read

   server.Message("Error read tags");

   return;

end;

--iterating tags

for i=1,table.maxn(TagsValues),1 do

   local TagValue=TagsValues[i];

   --write values to log

   server.Message("Name=",TagValue[1]," Value=",TagValue[2]," Quality=",TagValue[3]," Time=",time.TimeStampToString(TagValue[4]));

end

В примере теги заранее записаны в таблицу TagNames, если необходимо собрать определенные теги узла, то воспользуйтесь функцией server.GetAttributeTagByNumber.

server.WriteTagsByTable

Записывает таблицу (массив) значений в теги. Данную функцию следует применять, при записи большого объема тегов (несколько сотен и выше) - в этом случае существенно ускоряется запись значений в теги.

Входные аргументы:

mbul   Таблица со следующими полями:

mbul   Полный путь к тегу;

mbul   Значение тега;

mbul   Качество тега;

mbul   Метка времени тега - не обязательный параметр, если не указать, то запишется с текущим временем.

mbul   Префикс, который добавляется к имени каждого тега (например путь к устройству, в котором расположены теги). Следует помнить, что если указывается путь к узлу/устройству, то необходимо добавить в конце префикса точку - "SCRIPT.script."

Примеры        

--name tags

local TagNames={"SCRIPT.script.Tag1","SCRIPT.script.Tag2","SCRIPT.script.Tag3"};

local TagsValues={};

for i=1,table.maxn(TagNames),1 do

   local TagValue={};

   TagValue[1]=TagNames[i]; --full name tag

   TagValue[2]=math.random(0,100 ); --random value tag

   TagValue[3]=OPC_QUALITY_GOOD; --quality

   TagValue[4]=time.TimeStampNow( ); --timestamp

   table.insert(TagsValues,TagValue); --add to table

end

server.WriteTagsByTable(TagsValues,""); --write to tags

В примере теги заранее записаны в таблицу TagNames, если необходимо собрать определенные теги узла, то воспользуйтесь функцией server.GetAttributeTagByNumber.