Использование скриптов отладки

При отладке задач возникает необходимость изменения значений  переменных или коэффициентов функциональных блоков. Если таких изменений немного, то их можно выполнить обычным образом через окно просмотра. В противном случае  удобнее составить список скриптов в виде текстового файла tc.scr для изменения значений многих переменных в пакетном режиме. Файл tc.scr содержит строки операторов присваивания значений технологическим переменным на языке ТехноСи в виде инициализирующих выражений. Размер отдельного скрипта в списке не должен превышать 20 килобайт.

Ниже приведена общая структура файла tc.scr:

  /* <многострочный коментарий>
*/
// <однострочный коментарий>
#<идентификатор скрипта 1>
<оператор присваивания 1>;
<оператор присваивания 2>;
...
<оператор присваивания K>;
...
#<идентификатор скрипта N>
<оператор присваивания>;
<оператор присваивания>;
...
<оператор присваивания M>;

Как однострочные, так и многострочные комментарии записываются  с первой позиции строки. Признак начала идентификатора скрипта (символ #) также должен располагаться с первой позиции строки. Инициализация начальных значений коэффициентов функциональных блоков, переменных и атрибутов технологических переменных записывается в свободном формате и выполняется по правилам инициализации глобальных переменных (всех типов char, bool, int, long, float, string, timer, analog, analog_alm или discrete, а также признака включения секции), структур, массивов переменных и массивов структур  в языке TехноCи. Формат оператора присваивания:

  <оператор присваивания> := <идентификатор> = <значение> |
    <идентификатор> = {<список значений>}

Для задания значений переменным основных типов данных (char, int, long, float, string) используется первый вариант оператора присваивания.
Второй вариант оператора присваивания используется для задания списков значений технологическим переменным, массивам, структурам и массивам структур. В качестве идентификатора задается идентификатор технологической переменной, массива, структуры или массива структур. Для массивов в отличие от инициализации в месте их программного объявления в скрипте задается только идентификатор без указания размерности массива.

Для задания значений коэффициентов функциональных блоков используется первый вариант оператора присваивания, а в качестве идентификатора задается:

  "<метка функционального блока>".<идентификатор коэффициента>

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

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

Ниже в таблицах рассматриваются варианты задания значений в файле скриптов на примерах.


Таблица 7 Значения признака включения секции

Переменные Операторы присваивания
SECTION section1 Value = 0
{
}
SECTION section2 Value = 1
{
}
#Sinit1
section1= 1;
section2= 0;

Изменение признака включения секции сопровождается выводом сообщения:

ВКЛЮЧИЛ СЕКЦИЮ '<идентификатор секции>'

ОТКЛЮЧИЛ СЕКЦИЮ '<идентификатор секции>'


Таблица 8 Значения простых переменных основных типов

Переменные Операторы присваивания
char i, io, ix, ib;
int x;
long y;
float pi, e;
long y1;
string name;
#Sinit1
i = 125; io = 017; ix = 0x0d; ib = 0b101;
#Sinit2
x = 10;
#Sinit3
y = -12345678;
#Sinit4
pi = 3.14159265358979324; e = 2.71828182845904524e+0;
#Sinit5
y1 = 1d20m39s200ms;
#Sinit6
name = "a45";

Таблица 9 Значения технологических переменных

Переменные Операторы присваивания
timer t;
discrete d;
analog_alm am;
analog a;
#Sinit1
t= { Value=10s, Run = 2};
d= { Value = 1, Fault=7, Blk = 1};
am = { Fault=1, Blk=1, HiHi = 100.0, Hi = 50.5, Lo=30.7, LoLo = 10.7};
a = { Fault=5, Blk = 1};

Таблица 10 Значения структур

Переменные Операторы присваивания Значения
struct PI 
{  
string s[3];
int x[5];
float f[10];
};  
struct PI str;
#Sinit1
str = {s = {"123","456","789"},
  x = {[2]=2},
  f = {[1]=1.926,
  [2] = 3.1415926,
  [3...7] = 33.149}
};
"123","456","789",
0, 0, 2, 0, 0,
0, 1.926, 3.14159, 33.149, 33.149, 33.149, 33.149, 33.149, 0, 0

Таблица 11 Значения массивов простых переменных основных типов

Переменные Операторы присваивания Значения
char i[3]; #Sinit1
i = {1, 2, 3};
1, 2, 3
char io[10]; #Sinit2
io = {[3]=017, [5...8] 012, 013};
0, 0, 0, 15, 0, 10, 10, 10, 10, 11
char x[5]; #Sinit3
ix = {[0...END_ARRAY]=0x0d};
13, 13, 13, 13, 13
char ib[7]; #Sinit4
ib = {0b101};
5, 0, 0, 0, 0, 0, 0
char ic[3]; #Sinit5
ic = {'a','b','c'};
'a',' b', 'c'
char ca[3]; #Sinit6
ca = "ab";>
'a', 'b', 0
int i16[6]; #Sinit7
i16 = {–24111, –15112, –6211, 3000, 28311, 19312};
–24111, –15112, –6211, 3000, 28311, 19312
long l[5]; #Sinit8
l = {[0...4] = –12345678};
–12345678, –12345678, –12345678,
–12345678, –12345678
long lt[4]; #Sinit9
lt = {[0...END_ARRAY-2]=1d20m39s200ms};
87639200, 87639200, 0, 0
float f1[2]; #Sinit10
f1 = {[1]=3.14159265358979324};
0.0, 3.14159
float f2[2]; #Sinit11
f2 = {[0]=2.71828182845904524e+0};
2.71828, 0.0
string aname[5]; #Sinit12
aname = {[0...1] ="no", [2...4] ="yes"}; ";
"no", "no", "yes", "yes", "yes"

Таблица 12 Значения массивов технологических переменных

Переменные Операторы присваивания Значения
Value LoLo Lo Hi HiHi
timer at[10]; #Sinit1
at = { [0]={Value=1m20s, Run=1},
    [4...8]={Value=3h20m, Run = 2}};
+1m20s, 0, 0, 0, 3h20m, 3h20m, 3h20m, 3h20m, 3h20m, 0 - - - -
discrete ad[10]; #Sinit2
ad = { [0]={ Value=1, Fault=1, Blk=0},
    [4...8]={Blk = 1}
};
1, 0, 0, 0, [0]*, [0]*, [0]*, [0]*, [0]*, 0 - - - -
analog_alm aa[5]; #Sinit3
aa = { [0]={Value=50.6, Fault=0,
  Blk=1,
  HiHi = 70.0, Hi = 50.0},
      [2...4]={ Value=135.1,
  HiHi = 160.5,
  Hi=140.5, Blk = 0,
  LoLo = 30.0, Lo=40.0}
};
[50.6]
0.0
135.1
135.1
135.1
-
-
30.0
30.0
30.0
-
-
40.0
40.0
40.0
50.0
-
140.5
140.5
140.5
70.0
-
160.5
160.5
160.5
analog ab[4]; #Sinit4
ab = { [0...3] = { Value=5.699, Usr = 1,
  Blk = 0}
};
5.699#
5.699#
5.699#
5.699#
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

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

  + - указан атрибут таймера Run = 1;
  [] - указан атрибут блокирования переменной Blk;
  * - указан атрибут недостоверности переменной Fault;
  # - указан пользовательский атрибут переменной Usr.

Таблица 13 Значения массивов структур

Переменные Операторы присваивания Значения
struct P
{
  string s;
  int x;
  float f;
};
struct P mstr [10];
#Sinit1
mstr = {[1...3] = {s="PI=3.1415926", x=3, f = 3.1415926}, [5] = {x=5}, [6] = {x=7}, [8] = {f=1.0} };
0, 0, 0,
"PI=3.1415926", 3, 3.14159.
"PI=3.1415926", 3, 3.14159.
"PI=3.1415926", 3, 3.14159.
0, 0, 0.
0, 5, 0.
0, 7, 0.
0, 0, 0.
0, 0, 1.0,
0, 0, 0

Таблица 14 Значения коэффициентов функциональных блоков

Вызов Операторы присваивания Значения
analog_alm aPpar;
analog_alm aPNpar;
analog aPVpar;
float fKp = 0.15;
SECTION KOTEL
{
FB_PI (
  Name: "Par_pi",
  In:      aPpar-aPNpar
  Out :   aPVpar,
  Run:   1,
  Kp :    fKp +0.05,
  Ti :     10s,
  Zone : 0,
  Min :   0,
  Max :  100.0
  );
}
#Sinit1
"Par_pi".Kp ={Blk = 1, Value= 1.15};
1, [1.5], 10s, 0, 0, 100
#Sinit0
"Par_pi".Kp = {Blk = 0};
1, 0.2, 10s, 0, 0, 100
#Sinit2
"Par_pi".Ti = 5m;
0, 0.2, 5m, 0, 0, 100
Заблокировать Kp вручную
#Sinit3
"Par_pi" = {Ti = 20s, Kp = 1.05};
1, [1.05], 20s, 0, 0, 100
#Sinit4
"Par_pi" = { Ti = 15s, Kp ={Blk = 1, Value= 0.25}};
1, [0.25], 15s, 0, 0, 100

Динамически устанавливаемый коэффициент должен быть заблокирован перед его изменением или в самом скрипте. Список значений коэффициентов функциональных блоков не может включать более пяти коэффициентов.

Изменение значения коэффициентов функциональных блоков сопровождается выводом сообщения:

УСТАНОВИЛ ДЛЯ ФБ "<метка>" КОЭФФИЦИЕНТ <идентификатор> = <значение>

Ниже приведен пример файла для выполнения установки значений дискретным переменным:


#S1
// 0 -> 1
EAH_POWER_PUMP = 1; EAL_P320 = 1; EAL_P321 = 1; EAL_P411a = 1;
#S0
// 1 -> 0
EAH_POWER_PUMP = 0; EAL_P320 = 0; EAL_P321 = 0; EAL_P411a = 0;

Просмотр списка скриптов выполняется по нажатию совокупности клавиш Alt+С.  В окне ДЕЙСТВИЕ отображается текущий список операторов присваивания переменных. Выбор текущего скрипта из списка осуществляется по нажатию клавиш "Стрелка вверх" или "Стрелка вниз" или щелчком мыши на имени скрипта. Комментарии в списке скриптов и в поле ДЕЙСТВИЕ не отображаются. Операция замены значений технологических переменных в соответствии с выбранным скриптом выполняется по нажатию клавиши "Enter". По нажатию клавиши "Esc" отказ и выход. Символом  отмечается успешно выполненная замена. Строки текущего скрипта нумеруются слева.



Рисунок 164

В случае отсутствия файла tc.scr на экран будет выведено соответствующее сообщение об ошибке:



Рисунок 165

При наличии дубликатного идентификатора скрипта на экран будет выведено соответствующее сообщение об ошибке, например:



Рисунок 166

При наличии ошибки в комментарии в файле скрипта на экран будет выведено соответствующее сообщение об ошибке:



Рисунок 167

Если в момент выполнения скрипта потеряна связь с контроллером, то на экран будет выведено соответствующее сообщение об ошибке, например:



Рисунок 168

При наличии синтаксической ошибки в файле скрипта на экран будет выведено соответствующее сообщение об ошибке, например:



Рисунок 169


Рисунок 170

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


Таблица 15 Список возможных ошибок
Сообщение об ошибке
1 Неизвестный атрибут технологической переменной
2 Неожиданный конец строки
3 Слишком длинная строка для данного массива
4 Диапазон значений за пределами массива
5 Значение за пределами массива
6 Константа не целое число
7 Ошибочна константа
8 Ожидалось название элемента структуры
9 Синтаксическая ошибка
10 В качестве начального значения string допускается только строка
11 Слишком длинная строка инициализации
12 Недопустимый диапазон значения
13 Отсутствует необходимый элемент синтаксиса
14 Константа типа 'дата-время' меньше значения #1970-01-01-00:00:00
15 Константа типа 'дата-время' превышает максимальное значение #2106-02-07-6:28:15
16 Вещественное число вышло за границы float
17 Целочисленная константа слишком велика
18 Целочисленная константа вне диапазона 'char'
19 Целочисленная константа вне диапазона 'int'
20 Ошибка в записи шестнадцатиричного числа типа \xNN
21 Ошибка в записи восьмеричного числа типа \\NNN
22> Повторное задание атрибута технологической переменной
23 Ожидалось название переменной
24 Не найдена переменная
25 Неизвестный элемент структуры
26 Запрет на запись

Возможно редактирование текста исходного файла с помощью стандартного редактора Windows. Вызов режима редактирования выполняется по нажатию клавиши F4.

Рисунок 171

При вызове редактора по нажатию клавиши F4 или в случае каких-либо ошибок в файле скрипта, когда выполняется просмотр исходного файла tc.scr, на экран будет выведено сообщение:

Рисунок 172