Программирование на языке Control

В «КАСКАД Цифра» программа на языке CONTROL имеет синтаксис, схожий с языком C. Для получения дополнительной информации о языке C следует обратиться к соответствующим руководствам по языку C.

main()

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

Сценарии графических элементов отличаются следующим:

Действие пользователя

В том случае, если сценарий запускается, например, по щелчку кнопкой мыши по графическому объекту (события «clicked» (щелчок) или «command» (команда)), сценарий выполняется при каждом щелчке кнопкой мыши по объекту, но не при открытии панели.

Синтаксис

main()

{

   //…

}

Синтаксис в CTRL

Сценарий состоит из утверждений (statements) и объявлений переменных. Несколько отдельных утверждений могут группироваться в блоки (составные утверждения). Какое-либо утверждение подразумевает выполнение действий, например, вызов функции или присвоение значения. Каждое утверждение завершается точкой с запятой («;»).

Синтаксис сценария
[<Объявление глобальных переменных>]
Объявление функций
Объявление переменных:
<Тип данных> <Имя переменной 1> [,<Переменная 2>…];
Объявление функции:
[<Тип данных возвращаемого значения>] <Имя функции>([<Параметры>])<Тело функции с утверждениями>
Блок утверждений:
{
[<Объявление переменных>]
Утверждение1;
[Утверждение2;…]
}

ЗначокПРИМЕР:

int g_number = 3; /* Глобальная переменная сценария (может быть инициализирована в этой точке) */
void afterLogin(string user, string password, string newLocale)
// Функция с параметрами
{
string module = «»КАСКАД Цифра»»; // Объявление
string panel = «vision/wccoa»; // переменных
string locale = getLocale(getActiveLang());

if( newLocale == locale) // Управляющая конструкция
{ // Начало блока утверждений
ModuleOn(module,0,0,1000,600,0,0,»Scale»); // Утверждение 1
RootPanelOnModule(panel,»»,module,»»); // Утверждение 2
} // Окончание блока утверждений
else
{
string exec = isMotif() ? «WCCOAui» : «WCCOAnv»;
//Объявление переменной и её инициализация

}
ModuleOff(myModuleName());
} // Окончание функции

Синтаксическая нотация

В данном руководстве применяются следующие правила:

  • Символ «|» разделяет альтернативные варианты.
  • Для терминов, приведенных в угловых скобках «<» и «>», в сценарии должны быть указаны конкретные значения (например, <тип_данных> следует заменить в сценарии на «int», «string» и т.д.).
  • В «[» и «]» заключаются необязательные секции.
  • Фигурные скобки «{» и «}» содержат утверждения. которые должны быть выполнены при вызове функции.
  • Символ «;» означает завершение утверждения.

Функции с возвращаемым значением и без него (void)

Функции, которые возвращают какое-либо значение, объявляются следующим образом.

int add(int a, int b)
{
return a+b;
}

В примере выше представлено объявление функции «add()», которая принимает в качестве аргументов два целых числа и возвращает целое число. В приведённом примере значения аргументов в пределах функции «add()» не изменяются. Тип данных возвращаемого значения указывается при определении функции.

В сценарии языка Control вызов этой функции будет выглядеть следующим образом:

main()
{
int c;
c = add(5,6);
DebugN(c); // c = 11
}

Если функция не возвращает никакого значения, то её объявляют с использованием ключевого слова «void«. Подобные объявления используются, например, в функциях, формирующих начальные значения (например, «srand()«), функциях, используемых для прекращения работы панелей / диалоговых окон, и т.д.

  1. void srand(unsigned seed)

Рекурсивный вызов функции

Начиная с версии 2.9 в сценариях CTRL можно использовать рекурсивные вызовы функций.

ЗначокПРИМЕР

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

Функция «recursionTst()» вызывает саму себя и передаёт значение счётчика «cnt» в средство просмотра журналов. «cnt» содержит количество вызовов функции «recursionTst()«.

main()

{

int i=0;

recursionTst(i);

}

recursionTst(int cnt)

{

if(cnt <= 100)

{

cnt++;

DebugN(«Вызов: » + cnt);

recursionTst(cnt); //Функция вызывает саму себя => Рекурсия

}

else

{

DebugN(«Выполнение завершено»);

}

}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *