Date: Filenamescl_4e.1 SIMATIC S7 Siemens AG All rights reserved. Описание языка Литера _ Цифра _ Литера Цифра
Date: Filenamescl_4e.2 SIMATIC S7 Siemens AG All rights reserved. Набор знаков Символы и цифры ( Нижний и верхний регистр) символы от A до Z Арабские цифры от 0 до 9 Пробел (ASCII код 32) и все управляющие символы (ASCII ) Другие знаки Знаки + - * / = ] () [.,:; $ * " ' {} входят в набор SCL
Date: Filenamescl_4e.3 SIMATIC S7 Siemens AG All rights reserved. Ключевые слова Значение Ключевые слова - зарезервированные слова внутри SCL, которые могут использоваться только для предопределенной цели. Нет никакой разницы между символами верхнего регистра и строчными буквами. Это означает, что, например, ключевое слово CONST означает то же, что const или Const Разделители должны быть вставлены между ключевыми словами и/или описателями Заметьте: В дополнение к ключевым словам, внесенным в список ниже, имена стандартных функций также зарезервированы. Например: COS, SIN, TAN, SQRT, EXP, LOG, BOOL_TO_BYTE, INT_TO_REAL, INT_TO_WORD, REAL_TO_DWORD...
Date: Filenamescl_4e.4 SIMATIC S7 Siemens AG All rights reserved. Описатели в SCL Описатель - имя, которое Вы можете создать самостоятельно для объекта языка в SCL, то есть постоянной, переменной или блока. Нет никакого различия между символами верхнего и нижнего регистров. Символ _ Цифра _ Символ Цифра Примеры: правильные описатели: x Names, Total, Temperature, z12, high_low неправильные описатели: 4ter(первая цифра) Array (зарезервированное слово) S value(пробел недопустим) Подчеркивание
Date: Filenamescl_4e.5 SIMATIC S7 Siemens AG All rights reserved. Операнды Области памяти CPU могут быть адресованы из любой точки программы, используя описатели операнда. Таблица отсортирована согласно немецкой мнемонике, также дается соответствующая международная мнемоника.
Date: Filenamescl_4e.6 SIMATIC S7 Siemens AG All rights reserved. Коментарии Строковый комментарий (до конца строки) Пример : // Это строковый комментарий Value1 := 1234; // Это тоже строковый комментарий - до конца строки Блоковый комментарий (может содержать больше,чем одну строку) Пример: (* Это - блоковый комментарий, который содержит больше, чем одну строку *)
Date: Filenamescl_4e.7 SIMATIC S7 Siemens AG All rights reserved. Обзор типов данных Элементарные типы данных (существующие в SCL) Двоичные типы данных: BOOL, BYTE, WORD, DWORD Символьный тип: CHAR Числовые типы данных: INT, DINT, REAL Tаймериные типы: S5TIME, TIME, DATE, TIME_OF_DAY Сложные типы данных DATE_AND_TIME STRING (строка символов) ARRAY (массив) STRUCT (структура) Типы данных, определенные пользователем UDT (тип данных, определенный пользователем) Параметрические типы TIMER, COUNTER (таймеры и счетчики ) BLOCK_FB, BLOCK_FC, BLOCK_DB, BLOCK_SDB (блоковые типы) ANY (любой тип данных) POINTER
Date: Filenamescl_4e.8 SIMATIC S7 Siemens AG All rights reserved. Способы записи констант (литералы) Integer (целые числа) Десятичное число: _120_234_ -666_ Двоичное число: 2# Восьмеричное число: 8#25707 Шестнадцатиричное число: 16#1FA90B16#F Число с плавающей точкой: E Символ: 'A' 'a' '$65' '$T' Строка: 'ROT' 'Hugo' '$e1$4E' Дата: DATE# D# Время Десятичное представление: TIME#20.5D T#45.25M Уровневое представление: T#20S_5MST#20m_23.5s Время суток: TIME_OF_DAY#12:20:35 TOD# 11:11:11 Дата и время: DATE_AND_TIME# _12:36:12.2 DT# :25.30
Date: Filenamescl_4e.9 SIMATIC S7 Siemens AG All rights reserved. Элементарные типы данных Двоичные типы Ключевое слово Длина в битах Диапазон значений BOOL 10,1 или FALSE, TRUE BYTE8- WORD16- DWORD32- Символьный тип CHAR8 символы из расширенного набора ASCII Числовые типы INT16-32_ _767 DINT32-2_147_483_ _147_483_647 REAL E E-38 Tаймериные типы S5TIME16T#0H_0M_0S_10MS..T#2H_46M_30S TIME(=DURATION)32 T#0D_0H_0M_0S_0MS.. T#24D_20H_31M_023S_647MS DATE16D# D# TIME_OF_DAY (=TOD)32TOD#0:0:0.. TOD#23:59:59.999
Date: Filenamescl_4e.10 SIMATIC S7 Siemens AG All rights reserved. Сложные (комплексные) типы данных DATE_AND_TIMEDT# :0:0.000 to DT# :59: STRING (строка символов) Определяет строку максимума из 254 знаков (тип данных: CHAR) Число знаков указывается в [.. ] Все знаки входят в расширенный набор знаков ASCII Примеры: STRING[10](строка max. из 10 знаков) STRING[2+3*4](строка max. из 14 знаков) STRING (соответствует STRING [254] )
Date: Filenamescl_4e.11 SIMATIC S7 Siemens AG All rights reserved. Сложные (комплексные) типы данных ARRAY (массив) - Число компонентов массива определяется в виде константы - Диапазоны индексов даются в [..] - Тип данных указывается после ключевого слова OF - SCL поддерживает максимум шестимериные массивы Примеры: ARRAY[1..10] OF REAL (1- мерин. массив из 10 чисел типа REAL) ARRAY[1..10, ] OF INT(2 - мерин. массив всего из 1000 чисел типа INT) ARRAY[3..10] OF UDT10(1 - мерин. массив из 8 компонент типа, определенного пользователем UDT10) ARRAY[1..10] OF STRUCT...END_STRUCT (1 - мерин. массив из 10 одинаковых структур)
Date: Filenamescl_4e.12 SIMATIC S7 Siemens AG All rights reserved. Сложные (комплексные) типы данных REAL Объявление: Fie1, Fie2 : Array[1..2,1..6] OF REAL; Fie1[1,1] := Fie2[1,2]; Fie1[i,j] := Fie2[m,n]; Целый массив(матрица): Fie1 := Fie2; REAL Fie1Fie2 Fie1[3,2] := Fie2[4,1]; Fie1[i,j] := Fie2[m,n];
Date: Filenamescl_4e.13 SIMATIC S7 Siemens AG All rights reserved. Сложные (комплексные) типы данных STRUCT (структура) - Описывает определенное число компонентов различных типов данных - Описание компонентов создается двумя ключевыми словами STRUCT и END_STRUCT - Возможны вложенные структуры Пример: VAR Mot : STRUCT A1: INT; // Первый компонент объявления A2: STRING[100]; A3: ARRAY[5..12] OF REAL;// Последний компонент объявления END_STRUCT; Vent: STRUCT S1: STRUCT A1: INT; A2: ARRAY[1..12] OF INT; END_STRUCT; I2: INT:= 25; END_STRUCT; END_VAR
Date: Filenamescl_4e.14 SIMATIC S7 Siemens AG All rights reserved. Сложные (комплексные) типы данных TYPE UDT1 STRUCT Power : REAL; Speed : INT; Motor : STRUCT Ein0 : BYTE; // Байт 0 Codierer : WORD; // Переключатель Zahlen : ARRAY[1..4] OF INT; Aus4 : BYTE := 16#2E; Zeichen: STRING[8]:= 'SIEMENS'; Anz : WORD := 16#123a; END_STRUCT; END_STRUCT END_TYPE UDT (Тип данных, определенный пользователем) - Определение специального типа данных (допустимо только в виде структуры) - Тип данных объявлен в собственном блоке (UDT) - Тип данных UDT может использоваться глобально Пример:
Date: Filenamescl_4e.15 SIMATIC S7 Siemens AG All rights reserved. Объявление переменных и параметров блоков Константы - Локальные данные с постоянным значением - Объявляются посредством ключевых слов CONST... END_CONST CONST Number_1:= 19; Time:= TIME#1D_1H_10M_22.2S; Name:= 'Siemens'; Number_2:= 2*5+3; Number_3:= 3+Zahl_1; END_CONST Метки переходов - Служат как цель для инструкции GOTO - Объявляются посредством ключевых слов LABEL... END_LABEL - Пример LABEL MARK1, MARK2, MARK3; END_LABEL Тип данных константы определяется литералом
Date: Filenamescl_4e.16 SIMATIC S7 Siemens AG All rights reserved. Объявления статических переменных Объявляются посредством ключевых слов VAR... END_VAR в разделе описаний FB Пример:VAR In/out:INT;// Объявление целого числа Meas.area:ARRAY[1..10] OF REAL;// Массив из 10 чисел типа REAL SWITCHING:UDT22;// Пользоват. тип MEASUREMENT: FB11;// Мультиэкземпляр FB11 END_VAR Сохраняются в экземпляре DB Возможна инициализация: Пример:VAR Number:INT := 234; Points:ARRAY[1..3] OF REAL := 1.5, 2.66, 3.14; Values:ARRAY[1..10] OF INT := 10(25); Struct_1:STRUCT VAR_1:INT := 25; VAR_2:ARRAY[1..5] OF BOOL := 2(0), 3(1); END_STRUCT END_VAR Доступ только внутри FB Пример:Number := Struct_1.VAR_1
Date: Filenamescl_4e.17 SIMATIC S7 Siemens AG All rights reserved. Объявление временных переменных Объявление использует ключевые слова VAR_TEMP... END_VAR Пример: VAR_TEMP Help_1, Help_2:INT; Buffer_1: ARRAY[1..10] OF REAL; END_VAR Объявление допустимо в OB, FB и FC Сохраняются в локальном стеке соответствующего уровеня управления (OB1, OB40, OB80, и т.д.) Инициализация не возможна Доступ только внутри блока, где переменная объявлена (через описатель) Пример: Help_1 := 1234; Buffer_1[2] := 22.33;
Date: Filenamescl_4e.18 SIMATIC S7 Siemens AG All rights reserved. Объявление параметров блока Формальные параметры для передачи текущих параметров при обращении к FB и FC Объявление:VAR_INPUT... END_VAR VAR_OUTPUT... END_VAR VAR_IN_OUT... END_VAR Пример: VAR_OUTPUT// Выходной параметр REGULATOR :DWORD; SET_VALUE :ARRAY[1..10] OF REAL; END_VAR Объявления возможны в FB и FC Для FB блоковые параметры сохраняются в экземпляре DB Инициализация допустима только для параметров FB Доступ изнутри (FB и FC) и снаружи (для FB) Пример : REGULATOR := ; (доступ изнутри) Result:=Instance_DB.REGULATOR; (доступ снаружи)
Date: Filenamescl_4e.19 SIMATIC S7 Siemens AG All rights reserved. Объявление параметров блока Счетчики и таймеры Ключевые слова Значение TIMERОбъявление таймера: T5 COUNTER Объявление счетчика: Z9 Блоки Ключевые слова Значение BLOCK_FB Объявление блокового параметра, BLOCK_FCиспользуемого кодовым блоком, BLOCK_DB напр., FC101, DB42 BLOCK_SDB ANY Ключевые слова Значение ANYМожет принимать любой тип данных
Date: Filenamescl_4e.20 SIMATIC S7 Siemens AG All rights reserved. Выражения, операторы и операнды Выражения Арифметические выражения ((3+CONST_INT) * (VAR_INT ** 37) / 3.14) Выражения сравненияA >=9 Логические выражения(n >5) AND (n < 20) Операторы Оператор присвоения:= Арифметические операторы*, /, MOD, DIV, +, -, ** Операторы сравнения, =, = Логические операторыNOT, AND или &, XOR, OR Операнды Константы 30.0, FACTOR, 'SIEMENS' Переменные Status, EB5, DB10.DW5, Motor.Power, FC12(A:=In) Выражения в (...)((3+CONST_INT) * (VAR_INT ** 37))
Date: Filenamescl_4e.21 SIMATIC S7 Siemens AG All rights reserved. Aрифметические операторы Унарные операторы Oператор ПредставлениеПример унарный плюс++A унарный минус- -A Основные бинарные операторы Oператор Представление Пример умножение*A * B деление/A / B деление по мод.MODI1 MOD I2 деление нацелоDIVI1 DIV I2 сложение+A + B вычитание-A - B Оператор возведения в степень Oператор Представление Пример Cтепень**A ** I1
Date: Filenamescl_4e.22 SIMATIC S7 Siemens AG All rights reserved. Аббривиатура ANY_INT : INT, DINTANY_NUM : INT, DINT, REAL Операции Операция 1-й операнд 2-й операнд Результат СтепеньANY_NUMINTREAL Унарный +, -ANY_NUM-ANY_NUM УмножениеANY_NUMANY_NUMANY_NUM ANY_REALANY_REALANY_REAL TIMEANY_INTTIME ДелениеANY_NUMANY_NUMREAL Деление цел.ANY_INTANY_INTANY_INT TIMEANY_INTTIME Деление по мод.ANY_INTANY_INTANY_INT СложениеANY_NUMANY_NUMANY_NUM ANY_INTANY_INTANY_INT TIMETIMETIME TODTIMETOD ВычитаниеANY_NUMANY_NUMAN_NUM ANY_INTANY_INTANY_INT TIMETIMETIME TODTIMETOD DATEDATETIME TODTODTIME Типы результатов арифметических операций
Date: Filenamescl_4e.23 SIMATIC S7 Siemens AG All rights reserved. Преобразование типов данных Неявное преобразование типа данных Производится компилятором автоматически Двоичные типы данных ( BOOL -> BYTE -> WORD -> DWORD) Числовые типы данных (INT -> DINT -> REAL) Явное преобразование типа данных Изменение класса типа (напр., WORD -> INT) Целевой тип данных менее мощный, чем исходный тип данных (напр., DINT -> INT) Вызов функции INT_Var := WORD_TO_INT(MW100); result := SQRT(INT_TO_REAL(WORD_TO_INT(EW2)));
Date: Filenamescl_4e.24 SIMATIC S7 Siemens AG All rights reserved. Операторы сравнения Tип I ( Требует определенного порядка операндов ) Оператор ЗнакПример меньше A > B больше или равно >= A >= B Применимы для следующих классов типов: ANY_NUM: INT, DINT, REAL ANY_CHAR: CHAR, STRING (Значение - знаки ASCII) плюс: TIME, DATE и TOD Tип II ( Не требует никакого определенного порядка операндов ) Оператор Знак Пример равно=A = B неравно A B Применимы для следующих классов типов: ANY_BIT: BOOL, BYTE, WORD, DWORD ANY_NUM: INT, DINT, REAL ANY_CHAR: CHAR, STRING плюс: TIME, DATE и TOD Не для BOOL BYTE WORD DWORD
Date: Filenamescl_4e.25 SIMATIC S7 Siemens AG All rights reserved. Логические операции и побитовые манипуляции Операторы Оператор ЗнакПример Отрицание, инверсия NOTNOT A И AND, &A AND B Исключающее ИЛИXORA XOR B OR OR A OR В Типы данных для операндов Типы данных: BOOL, BYTE, WORD, DWORD Примеры для INT_1 = 4 и INT_2 = 22 BOOL_1 :=NOT (INT_1 < INT_2); дает BOOL_1 = FALSE (т.е. 0) BYTE_1 := NOT (INT_1 < INT_2); дает BYTE_1 = 2# BYTE_2 := BYTE_1 AND FALSE;для BYTE_1 = 2# дает BYTE_2 = 2# BOOL_1 := BYTE_1 AND TRUE; Ошибка компиляции: Недействительный тип в назначении
Date: Filenamescl_4e.26 SIMATIC S7 Siemens AG All rights reserved. Числовые стандартные функции Общие функции Имя функции Входн. парам.Значение функ.Описание ABSANY_NUMANY_NUMАбсолютная величина SQRANY_NUMANY_NUMКвадрат SQRTANY_NUMANY_NUMКвадратный корень Логарифм. функ. EXPANY_NUMANY_NUMе ( ) в степени EXPDANY_NUMANY_NUM10 в степени LNANY_NUMAMY_NUMнатур. логарифм LOGANY_NUMANY_NUMлогарифм по осн. 10 Тригонометр. функ. ACOSANY_NUMANY_NUMarcсоs ASINANY_NUMANY_NUMarcsin ATANANY_NUMANY_NUMarctg COSANY_NUMANY_NUMcos SINANY_NUMANY_NUMsin TANANY_NUMANY_NUMtg Примеры RESULT:= ABS( -5);// RESULT равен 5 RESULT:= SQRT (81.0);// RESULT равен 9.0 RESULT:= SQR (23);// RESULT равен 529
Date: Filenamescl_4e.27 SIMATIC S7 Siemens AG All rights reserved. Управляющие структуры Управляющие инструкции IF- инструкцияIF E1.1 THEN... ELSIF... ELSE... END_IF CASE- инструкция CASE SELECTOR OF 1:...; 2:... ELSE:... END_CASE FOR- инструкция FOR INDEX := 1 TO 49 BY 2 DO... END_FOR WHILE- инструкция WHILE INDEX
Date: Filenamescl_4e.28 SIMATIC S7 Siemens AG All rights reserved. Инструкция IF Синтаксис IF THEN ; ELSIF THEN ;(необязательно). ELSIF THEN ;(необязательно) ELSE ;(необязательно) END_IF Пример IF INPUT = FALSE THEN N := 0; SUM := 0.0; OK := FALSE;// установка OK- флага в FALSE ELSIF START =_OK THEN N := N + 1; SUM := SUM + IN; ELSE OK := FALSE; END_IF;
Date: Filenamescl_4e.29 SIMATIC S7 Siemens AG All rights reserved. Инструкция CASE Синтаксис CASE OF : ; : ;(не обязательно). ;(не обязательно) ELSE ; (не обязательно) END_CASE; Пример CASE TW OF // TW имеет тип INT 1:DISPLAY := OVEN_TEMP; 2:DISPLAY:= MOTOR_SPEED; 3:DISPLAY:= GROSS_TARE; AW4:= 16#0003; 4..10:DISPLAY:= MOTOR_TEMP; AW4:= 16#0004; ELSE:DISPLAY:= 0; TW_ERROR:= 1; END_CASE;
Date: Filenamescl_4e.30 SIMATIC S7 Siemens AG All rights reserved. Инструкция FOR Синтаксис FOR TO BY // Необязательно DO ; END_FOR Пример FUNCTION_BLOCK FB20 VAR INDEX: INT; KEYWORD: ARRAY[1..51] OF STRING[20]; END_VAR BEGIN // Поиск текста KEY в каждом втором FOR INDEX := 1 TO 51 BY 2 // элементе массива из строк DO IF KEYWORD[INDEX] = 'KEY' THEN EXIT;// выход из цикла FOR END_IF; END_FOR; : : END_FUNCTION_BLOCK
Date: Filenamescl_4e.31 SIMATIC S7 Siemens AG All rights reserved. Инструкция WHILE Синтаксис WHILE DO ; END_WHILE; Пример FUNCTION_BLOCK FB20 VAR INDEX: INT; KEYWORD: ARRAY[1..51] OF STRING[20]; END_VAR BEGIN INDEX := 1; WHILE INDEX 'KEY' DO // Поиск текста KEY в каждом втором INDEX := INDEX + 2; // элементе массива из строк END_WHILE; : : END_FUNCTION_BLOCK
Date: Filenamescl_4e.32 SIMATIC S7 Siemens AG All rights reserved. Инструкция REPEAT Синтаксис REPEAT ; UNTIL END_REPEAT; Пример FUNCTION_BLOCK FB20 VAR INDEX: INT; KEYWORD: ARRAY[1..51] OF STRING[20]; END_VAR BEGIN INDEX := -1; REPEAT INDEX := INDEX + 2; UNTIL // Поиск строки KEY INDEX > 51 OR KEYWORD[INDEX] = 'KEY'// в каждом втором поле END_REPEAT; // массива строк : : END_FUNCTION_BLOCK
Date: Filenamescl_4e.33 SIMATIC S7 Siemens AG All rights reserved. Инструкция CONTINUE Синтаксис CONTINUE Пример INDEX := 0; WHILE INDEX
Date: Filenamescl_4e.34 SIMATIC S7 Siemens AG All rights reserved. Инструкция EXIT Синтаксис EXIT; Пример INDEX_2 := 0; FOR INDEX_1 := 1 TO 51 BY 2 DO IF KEYWORD[INDEX_1] = 'KEY' THEN (*выход из цикла FOR если KEYWORD[INDEX_1] равен 'KEY' *) INDEX_2:= INDEX_1; EXIT; END_IF; END_FOR; (*Следующие вычисления переменных происходит после выполнения EXIT или после регулярного окончания цикла FOR *) INDEX_SEARCHED:= INDEX_2;
Date: Filenamescl_4e.35 SIMATIC S7 Siemens AG All rights reserved. Инструкция GOTO Синтаксис GOTO ; Пример LABEL LABEL1, LABEL2, LABEL3; END_LABEL BEGIN IF A > B THEN GOTO LABEL1; ELSIF A > C THEN GOTO LABEL2; END_IF; LABEL1:INDEX := 1;// Инструкция A GOTO LABEL3; LABEL2:INDEX := 2; LABEL3:...// Инструкция B
Date: Filenamescl_4e.36 SIMATIC S7 Siemens AG All rights reserved. Инструкция RETURN Синтаксис RETURN Пример INDEX := 0; WHILE INDEX