Создание скрипта

<< Click to Display Table of Contents >>

Navigation:  Modbus Universal MasterOPC Server > Руководство по языку Lua 5.1 > Примеры и полезности > Обработка признака качества >

Создание скрипта

Составим алгоритм решения нашей задачи:

1.Считать текущее значение тега и признак качества.

2.Если признак качества хороший - сделать дополнительную проверку тега Status.

3.Считать значение тега Status.

4.Проверить 0 и 1 бит данного значения Status. Если они True, записать в тег признак качества Sensor_Failure и последнее достоверное значение

5.Проверить 2 бит значения Status. Если он True, то записать в тег признак качества Device_Failure и последнее достоверное значение.

Итоговый код будет выглядеть следующим образом:

OldValue=0

-- Initialization

function OnInit()

end

-- Uninitialization

function OnClose()

end

-- Processing

function OnRead()

Val,Qual=server.ReadCurrentTag(); --читаем значение и качества текущего тега

if Qual==OPC_QUALITY_GOOD then

   Status=server.ReadTagByRelativeName("Status") --читаем статус

   if bit.BitFromData(Status,0) or bit.BitFromData(Status,1) then --проверяем биты 0 и 1

       server.WriteCurrentTag(OldValue,OPC_QUALITY_SENSOR_FAILURE ) --записываем старое значение и признак качества "Ошибка датчика"

       return --выходим

   end

   if bit.BitFromData(Status,2) then --проверяем бит 2

       server.WriteCurrentTag(OldValue,OPC_QUALITY_DEVICE_FAILURE ) --записываем старое значение и признак качества "Ошибка устройства"

       return --выходим

   end

end

OldValue=Val --сохраняем текущее значение

end

В начале скрипта мы создаем переменную OldValue - в нее мы в каждом удачном цикле опросе будем сохранять текущее значение, чтобы потом, в случае ошибки выдать его с недостоверным признаком.

Затем с помощью функции server.ReadCurrentTag считывается  значение и признак качества тега. Признак качества сверяется с константой OPC_QUALITY_GOOD - если значение достоверно то можно проверить тег Status. Затем с помощью функции server.ReadTagByRelativeName считывается значение тега Status. После начинается проверка считанного значения. Для этого нужно извлечь биты 0, 1 и 2 - для этого используются функция bit.BitFromData.

Если одно из условий сработало, то с помощью функции server.WriteCurrentTag в текущий тег записывается сохраненное значение OldValue и нужная константа недостоверного признака. Оператор return используется, чтобы выйти из функции - если этого не сделать, то в переменную OldValue запишется текущее недостоверное значение, которое будет подставлено в следующем цикле.