'

Описание языка

Понравилась презентация – покажи это...





Слайд 0

Описание языка


Слайд 1

Набор знаков Символы и цифры ( Нижний и верхний регистр) символы от A до Z Арабские цифры от 0 до 9 Пробел (ASCII код 32) и все управляющие символы (ASCII 0 .. 31) Другие знаки Знаки + - * / = < >] () [.,:; $ * " ' {} входят в набор SCL


Слайд 2

Ключевые слова Значение Ключевые слова - зарезервированные слова внутри SCL, которые могут использоваться только для предопределенной цели. Нет никакой разницы между символами верхнего регистра и строчными буквами. Это означает, что, например, ключевое слово CONST означает тo же, что const или Const Разделители должны быть вставлены между ключевыми словами и/или описателями Заметьте: В дополнение к ключевым словам, внесенным в список ниже, имена стандартных функций также зарезервированы. Например: COS, SIN, TAN, SQRT, EXP, LOG, BOOL_TO_BYTE, INT_TO_REAL, INT_TO_WORD, REAL_TO_DWORD ...


Слайд 3

Описатели в SCL Описатель - имя, которое Вы можете создать самостоятельно для объекта языка в SCL, то есть постоянной, переменной или блока. Нет никакого различия между символами верхнего и нижнего регистров. Символ _ Цифра Цифра _ Символ Цифра Примеры: правильные описатели: x Names, Total, Temperature, z12, high_low неправильные описатели: 4ter (первая цифра) Array (зарезервированное слово) S value (пробел недопустим) Подчеркивание


Слайд 4

Операнды Области памяти CPU могут быть адресованы из любой точки программы, используя описатели операнда. Таблица отсортирована согласно немецкой мнемонике, также дается соответствующая международная мнемоника.


Слайд 5

Коментарии Строковый коментарий (до конца строки) Пример: // Это строковый коментарий Value1 := 1234; // Это тоже строковый коментарий - до конца строки Блоковый комментарий (может содержать больше,чем одну строку) Пример: (* Это - блоковый комментарий, который содержит больше, чем одну строку *)


Слайд 6

Обзор типов данных Элементарные типы данных (существующие в 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


Слайд 7

Способы записи констант (литералы) Integer (целые числа) Десятичное число: 1000 +1_120_234_ -666_667 -99 Двоичное число: 2#0101010 Восьмеричное число: 8#25707 Шестнадцатиричное число: 16#1FA90B 16#F Число с плавающей точкой: -3.99 1000 1000.0 3.0E10 1234.56 Символ: 'A' 'a' '$65' '$T' Строка: 'ROT' 'Hugo' '$e1$4E' Дата: DATE#1998-11-11 D#1998-05-11 Время Десятичное представление: TIME#20.5D T#45.25M Уровневое представление: T#20S_5MS T#20m_23.5s Время суток: TIME_OF_DAY#12:20:35 TOD# 11:11:11 Дата и время: DATE_AND_TIME#1998-04-07_12:36:12.2 DT#1998-02-01-11:25.30


Слайд 8

Элементарные типы данных Двоичные типы Ключевое слово Длина в битах Диапазон значений BOOL 1 0,1 или FALSE, TRUE BYTE 8 - WORD 16 - DWORD 32 - Символьный тип CHAR 8 символы из расширенного набора ASCII Числовые типы INT 16 -32_768 .. 32_767 DINT 32 -2_147_483_648 .. 2_147_483_647 REAL 32 -3.402822E+38 .. -1.175495E-38 Tаймерные типы S5TIME 16 T#0H_0M_0S_10MS ..T#2H_46M_30S TIME(=DURATION) 32 T#0D_0H_0M_0S_0MS .. T#24D_20H_31M_023S_647MS DATE 16 D#1990-01-01 .. D#2168-12-31 TIME_OF_DAY (=TOD) 32 TOD#0:0:0 .. TOD#23:59:59.999


Слайд 9

Сложные (комплексные) типы данных DATE_AND_TIME DT#1999-01-02-0:0:0.000 to DT#2014-12-31-23:59:58.999 STRING (строка символов) Определяет строку максимума из 254 знаков (тип данных: CHAR) Число знаков указывается в [ .. ] Все знаки входят в расширенный набор знаков ASCII Примеры: STRING[10] (строка max. из 10 знаков) STRING[2+3*4] (строка max. из 14 знаков) STRING (соответствует STRING [254] )


Слайд 10

Сложные (комплексные) типы данных ARRAY (массив) - Число компонентов массива определяется в виде константы - Диапазоны индексов даются в [..] - Тип данных указывается после ключевого слова OF - SCL поддерживает максимум шестимерные массивы Примеры: ARRAY[1..10] OF REAL (1- мерн. массив из 10 чисел типа REAL) ARRAY[1..10, 1..100] OF INT (2 - мерн. массив всего из 1000 чисел типа INT) ARRAY[3..10] OF UDT10 (1 - мерн. массив из 8 компонент типа, определенного пользователем UDT10) ARRAY[1..10] OF STRUCT...END_STRUCT (1 - мерн. массив из 10 одинаковых структур)


Слайд 11

Сложные (комплексные) типы данных 1 2 3 4 5 6 REAL Объявление: Fie1, Fie2 : Array[1..2,1..6] OF REAL; 1 2 3 4 5 6 Fie1[1,1] := Fie2[1,2]; Fie1[i,j] := Fie2[m,n]; Целый массив(матрица): Fie1 := Fie2; REAL REAL REAL Fie1 Fie2 Fie1[3,2] := Fie2[4,1]; Fie1[i,j] := Fie2[m,n];


Слайд 12

Сложные (комплексные) типы данных 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


Слайд 13

Сложные (комплексные) типы данных 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 может использоваться глобально Пример:


Слайд 14

Объявление переменных и параметров блоков Константы - Локальные данные с постоянным значением - Объявляются посредством ключевых слов 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 Тип данных константы определяется литералом


Слайд 15

Объявления статических переменных Объявляются посредством ключевых слов 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


Слайд 16

Объявление временных переменных Объявление использует ключевые слова VAR_TEMP ... END_VAR Пример: VAR_TEMP Help_1, Help_2: INT; Buffer_1: ARRAY[1..10] OF REAL; END_VAR Объявление допустимо в OB, FB и FC Сохраняются в локальном стеке cоответствующего уровеня управления (OB1, OB40, OB80, и т.д.) Инициализация не возможна Доступ только внутри блока, где переменная объявлена (через описатель) Пример: Help_1 := 1234; Buffer_1[2] := 22.33;


Слайд 17

Объявление параметров блока Формальные параметры для передачи текущих параметров при обращении к 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 := 1234.567; (доступ изнутри) Result:=Instance_DB.REGULATOR; (доступ снаружи)


Слайд 18

Объявление параметров блока Счетчики и таймеры Ключевые слова Значение TIMER Объявление таймера: T5 COUNTER Объявление счетчика: Z9 Блоки Ключевые слова Значение BLOCK_FB Объявление блокового параметра, BLOCK_FC используемого кодовым блоком, BLOCK_DB напр., FC101, DB42 BLOCK_SDB ANY Ключевые слова Значение ANY Может принимать любой тип данных


Слайд 19

Выражения, операторы и операнды Выражения Арифметические выражения ((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))


Слайд 20

Aрифметические операторы Унарные операторы Oператор Представление Пример унарный плюс + +A унарный минус - -A Основные бинарные операторы Oператор Представление Пример умножение * A * B деление / A / B деление по мод. MOD I1 MOD I2 деление нацело DIV I1 DIV I2 сложение + A + B вычитание - A - B Оператор возведения в степень Oператор Представление Пример Cтепень ** A ** I1


Слайд 21

Аббривиатура ANY_INT : INT, DINT ANY_NUM : INT, DINT, REAL Операции Операция 1-й операнд 2-й операнд Результат Степень ANY_NUM INT REAL Унарный +, - ANY_NUM - ANY_NUM Умножение ANY_NUM ANY_NUM ANY_NUM ANY_REAL ANY_REAL ANY_REAL TIME ANY_INT TIME Деление ANY_NUM ANY_NUM REAL Деление цел. ANY_INT ANY_INT ANY_INT TIME ANY_INT TIME Деление по мод. ANY_INT ANY_INT ANY_INT Сложение ANY_NUM ANY_NUM ANY_NUM ANY_INT ANY_INT ANY_INT TIME TIME TIME TOD TIME TOD Вычитание ANY_NUM ANY_NUM AN_NUM ANY_INT ANY_INT ANY_INT TIME TIME TIME TOD TIME TOD DATE DATE TIME TOD TOD TIME Типы результатов арифметических операций


Слайд 22

Преобразование типов данных Неявное преобразование типа данных Производится компилятором автоматически Двоичные типы данных ( 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)));


Слайд 23

Операторы сравнения Tип I (Требует определенного порядка операндов) Оператор Знак Пример меньше < A < B меньше или равно <= A <= B больше > 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


Слайд 24

Логические операции и побитовые манипуляции Операторы Оператор Знак Пример Отрицание, инверсия NOT NOT A И AND, & A AND B Исключающее ИЛИ XOR A 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#11111110 BYTE_2 := BYTE_1 AND FALSE; для BYTE_1 = 2#00001111 дает BYTE_2 = 2#00000000 BOOL_1 := BYTE_1 AND TRUE; Ошибка компиляции: Недействительный тип в назначении


Слайд 25

Числовые стандартные функции Общие функции Имя функции Входн. парам. Значение функ. Описание ABS ANY_NUM ANY_NUM Абсолютная величина SQR ANY_NUM ANY_NUM Квадрат SQRT ANY_NUM ANY_NUM Квадратный корень Логарифм. функ. EXP ANY_NUM ANY_NUM е (2.718..) в степени EXPD ANY_NUM ANY_NUM 10 в степени LN ANY_NUM AMY_NUM натур. логарифм LOG ANY_NUM ANY_NUM логарифм по осн. 10 Тригонометр. функ. ACOS ANY_NUM ANY_NUM arcсоs ASIN ANY_NUM ANY_NUM arcsin ATAN ANY_NUM ANY_NUM arctg COS ANY_NUM ANY_NUM cos SIN ANY_NUM ANY_NUM sin TAN ANY_NUM ANY_NUM tg Примеры RESULT := ABS( -5); // RESULT равен 5 RESULT := SQRT (81.0); // RESULT равен 9.0 RESULT := SQR (23); // RESULT равен 529


Слайд 26

Управляющие структуры Управляющие инструкции 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 <= 50 DO ... END_WHILE REPEAT- инструкция REPEAT ... UNTIL INDEX:= 51 ... END_REPEAT CONTINUE- инструкция WHILE BOOL_1 DO ... CONTINUE ... END_WHILE EXIT- инструкция WHILE BOOL_1 DO ... EXIT ... END_WHILE GOTO- инструкция IF INDEX <23 THEN GOTO MARKE_1; ... RETURN- инструкция IF ENABLED THEN RETURN; ...


Слайд 27

Инструкция 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;


Слайд 28

Инструкция 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;


Слайд 29

Инструкция FOR Синтаксис FOR <Начальное значение для счетчика (индекса)> TO <Выражение для конечного значения> BY <выражение для инкремента (шаг)> // Необязательно DO <Instructions>; 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


Слайд 30

Инструкция 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 <= 51 AND KEYWORD[INDEX] <> 'KEY' DO // Поиск текста KEY в каждом втором INDEX := INDEX + 2; // элементе массива из строк END_WHILE; : : END_FUNCTION_BLOCK


Слайд 31

Инструкция 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


Слайд 32

Инструкция CONTINUE Синтаксис CONTINUE Пример INDEX := 0; WHILE INDEX <= 100 DO INDEX := INDEX + 1; IF FIELD[INDEX] = INDEX THEN CONTINUE; (* Если FIELD[INDEX] равен INDEX, то FIELD[INDEX] не изменяется; *) ELSE FIELD[INDEX] := 0; // в противном случае FIELD[INDEX] обнуляется END_IF; END_WHILE;


Слайд 33

Инструкция 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;


Слайд 34

Инструкция 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


Слайд 35

Инструкция RETURN Синтаксис RETURN Пример INDEX := 0; WHILE INDEX <= 100 DO INDEX := INDEX + 1; IF FIELD[INDEX] = 0 THEN RETURN; (* Если FIELD[INDEX]равно 0 то выход из блока; *) ELSE ... // в противном случае END_IF; END_WHILE;


×

HTML:





Ссылка: