Функции

Top  Previous  Next

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

Функция характеризуется:

  • возвращаемое значение, которое может быть или типом или «пусто». «Пусто» означает, что функция ничего не возвращает

  • именем (без учета регистра), который идентифицирует функцию всюду по программе

  • список (необязательный) параметров. Это значения, необходимые для выполнения функции.

  • (дополнительные) директивы. Это специальные команды, которые обогащают функции

  • локальные переменные (необязательные), необходимые выполнения функции

  • последовательность исполняемых команд, характеризующих функцию.

Именам функциям лучше давать понятные, чтобы упростить работу. Так, если функция имеет дело с вычислением температуры в градусах Кельвина, то Вы можете назвать её 'CalculateTemperatureK'.

Синтаксис:

Function Type Name([Parameter List)

[Directives]

[Local Vars]

Instructions

End



Type — тип информации, возвращаемой функцией.

Name — имя, идентифицирующее функцию.

Parameter List — список и тип данных, которые должны быть введены в функцию так, чтобы она могла выполнить свою задачу.

Local Vars — определение всех переменных, необходимых для работы функции.

Instructions — последовательность команд, выполняем функцией.



Директивы указывают:

#Macro: имя функции вставляется в меню макрокоманд времени исполнения; таким образом функция может быть вызвана пользователем.

#Startup: функция выполняется в начале времени исполнения в фоновом режиме. Таким образом возможно создавать циклические функции, выполняющие проверки или действия, определённые определенными условиями.

#Shutdown: функция выполняется при закрытии сессии времени исполнения.

#Modal: во время исполнения интерпретатор ждёт завершения выполнения этой функции (этот режим препятствует оператору вмешиваться, но это не останавливает выполнение выборки и регистрации Тегов).

Пример:

Function Void MainCycle() // определение функции MainCycle()
// эта функция не требует входных параметров и не возвращает никакого значения
#Startup
// определение локальных переменных
int in1;                  // Digital input 1
int in2;                  // Digital input 2
while (WindowIsOpen())    // Main cycle active until you close RunTime
// Проверка наличия тревог D1-100 Типа 1
// [In1 And In2 (Module D1-10 n.1)]
     in1 = GetDigGateValue("101IN",1);
     in2 = GetDigGateValue("101IN",2);
     if (in1+in2 == 2) then
        SetDigGateValue("103OUT",1,1);
     else
        SetDigGateValue("103OUT",1,0);
     end
// Проверка наличия тревог D1-100 Типа 2
// [In1 Or In2 (Module D1-10 n.2)]
     in1 = GetDigGateValue("101IN",48);
     in2 = GetDigGateValue("101IN",49);
     if (in1+in2 > 0) then
        SetDigGateValue("103OUT",2,1);
     else
        SetDigGateValue("103OUT",2,0);
     end
// Проверка наличия тревог по температуре D1-15
     if (Abs(GetCmpGateValue("Tr-Ts",1)) >
         GetNumGateValue("102DeltaT",1)) then
        SetDigGateValue("103OUT",3,1);
     else
        SetDigGateValue("103OUT",3,0);
     end
     Sleep(10);    // pause not to weigh down the CPU with work
end
End                // the definition of the function ends here



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

Вы можете вызвать функцию при открытии или закрытии Шаблона, или при использовании команд (например, Кнопка) определенных непосредственно в Шаблоне.

N.B.: Вы не можете выполнить функцию, если она уже выполняется.