Файл: ЛР-4 Разработка программы для ПЛК на языке ST.pdf

Добавлен: 15.11.2018

Просмотров: 2156

Скачиваний: 14

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

б) FOR – TO – DO 
 
FOR <переменная>:=<выражение> TO <выражение> BY <выражение > DO 
<утверждение >; 
END_FOR; 
 
в) REPEAT – UNTIL 
REPEAT <утверждение>; 
UNTIL <выражение> 
END_REPEAT; 
 
Типы переменных: 
 
INT (от -32768 до 32767) – целый тип 
SINT (от -128 до 127) – короткий целый  
DINT (от -2147483648 до 2147483647) – длинный целый  
STRING (может содержать строку) – строковый тип 
BOOL (истина или ложь) – логический тип 
 
Функции 
Объявление функций: 

FUNCTION <имя> : return type; 
VAR_INPUT 
<переменная> : <тип>; 
... ... 
<переменная> : <тип>; 
END_VAR; 
 
VAR 
<переменная> : <тип>; 
... ... 
<переменная> : <тип>; 
END_VAR; 
<утверждение> 
END_FUNCTION; 

return type (возвращаемый тип) может быть: BOOL, SINT, INT или DINT. 
VAR_INPUT  содержит  переменные,  которые  должны  быть  объявлены  вне 
функции  (переменные  не  могут  быть  изменены  в  функции).  VAR  содержит 
частные переменные функции, которые могут читаться и изменяться изнутри 
функции.  Утверждения,  которые  находятся  в  теле  функции,  могут 
использовать частные переменные.   
Пример: 
FUNCTION Add : INT; 

VAR_INPUT 
a : INT; 


background image

b : INT; 
c : INT; 
END_VAR; 
Add := a+b+c; 

END_FUNCTION; 
 
 
Операции языка VPL: 
1. Унарные 

 - отрицание 
NOT  логическое отрицание 
**  степень 

2. Бинарные 

+   сложение 
-    вычитание 
*   умножение 
/    деление 
MOD  модуль 

3. Операторы сравнения 

<     меньше чем 
<=   меньше или равно 
>     больше 
>=   больше или равно 
=     равно 
<>   неравно 

4. Логические операторы 

AND    логическое И 
XOR   исключающее логическое ИЛИ 
OR      логическое ИЛИ 

5. Назначенные приоритеты в выполнении операции: 

1. (    ) – круглые скобки 
2. Function 
3. SIZEOF 
4. ADDR 
5. Унарные операции 
6. Бинарные операции 
7. Операторы сравнения 
8. Логические операторы 

 

Функции GSM. 
Функции  GSM  позволяют  программе  взаимодействовать  с  модулями 

GSM на RTCU платформе.  

gsmConnected 
Функция  проверяет,  находится  ли  GSM  модуль  в  соединении  с  GSM 

базовой  станцией.  Входящие  параметры:  нет.  Возвращаемое  значение  bool: 


background image

true  –  есть  соединение  с базовой  станцией, false  –  нет соединения  с базовой 
станцией. 

INCLUDE rtcu.inc 
PROGRAM test; 
BEGIN 
… 
… 
// Проверка успешности соединения с GSM базовой станцией 
IF gsmConnected() THEN 
// Устройство соединилось с базовой станцией 
… 
… 
ELSE 
// Устройство не соединилось с базовой станцией 
… 
… 
END_IF; 
END; 
END_PROGRAM; 

gsmIncomingCall 
Функциональный  блок  используется  для  проверки  входящего  звонка. 

Выходные  параметры:  status:  int(0..2)  может  принимать  значения  0  –  нет 
входящего  звонка,  1  –  входящий  звонок  с  номером  вызывающего,  2  – 
входящий  звонок  без  номера  вызывающего,  phonenumber:  string  -  
телефонный номер (если статус 1). 

INCLUDE rtcu.inc 
PROGRAM test; 
VAR 
incoming : gsmIncomingCall; 
END_VAR; 
// Включение питания на GSM модуле 
gsmPower(power := TRUE); 
BEGIN 
incoming(); 
… 
… 
// Проверка входящего звонка 
IF incoming.status = 1 THEN 
// Входящий звонок с номером вызывающего 
// Ответ на входящий звонок 
gsmAnswer(); 
// Отправить голосовое сообщение 
voiceTalk(message := "Hello"); 
//  
gsmHangup(); 


background image

… 
… 
END_IF; 
END; 
END_PROGRAM; 

gsmPower 
Функция  контролирует  электропитание  GSM  модуля.  Используя  эту 

функцию, можно  включать и выключать GSM модуль. Входные параметры: 
power:bool  может  принимать    значения:  true  (включить  питание),  false 
(выключить питание). Возвращаемое значение:int: 0 – если задача выполнена 
правильно,  1  –  если  происходит  вызов  данных  (выключение  не  возможно  в 
данном случае), 2 – если модем блокирован из-за неполадок в сети, 8 – если 
скорость  системы  не  поддерживающая  (должно  быть  48  МГц),  9  –  если 
модем уже работает по способу LP (пониженная скорость соединения, GSM 
модуль включен функцией gsmPowerLP). 

INCLUDE rtcu.inc 
PROGRAM test; 
// Включение питания на GSM модуле 
gsmPower(power := TRUE); 
BEGIN 
… 
… 
END; 
END_PROGRAM; 

gsmSendSMS 
Функция отправляет SMS сообщения, используя GSM модуль. Входные 

параметры: phonenumber:string - телефонный номер (максимальная длина 20), 
message:string  -  строка  сообщения.  Возвращаемое  значение:int:  0  –  если 
сообщение отправлено успешно, 1 – если общая ошибка, 2 – если CMS/CME 
ошибка (ошибка на сети GSM), 3  – если GSM модуль не связан с основной 
станцией,  4  –  если  модуль  GSM  не  включен,  5  –  если  модуль  GSM  занят 
вызовом данных. 

INCLUDE rtcu.inc 
PROGRAM test; 
// Включение питания на GSM модуле 
gsmPower(power := TRUE); 
BEGIN 
… 
… 
// Примечание: в этом примере не проверяется код возвращаемого 
значения из //функции gsmSendSMS 
gsmSendSMS(phonenumber := "+44 12 34 56 789", message := "This is a 
test 
message sent using SMS"); 
… 


background image

… 
END; 
END_PROGRAM; 

Функции дисплея. 
Функции  дисплея  позволяют  программе  взаимодействовать  с  LCD 

дисплеем на RTCU платформе. 

displayBackLight 
Функция  контролирует  яркость  дисплея.  Входные  параметры: 

intensity:int(0..100) – яркость в %. Возвращаемое значение: нет. 

INCLUDE rtcu.inc 
PROGRAM test; 
// Настроить яркость дисплея равную 75%  
displayBacklight(intensity := 75); 
BEGIN 
… 
… 
END; 
END_PROGRAM; 

displayClear 
Функция  очищает  содержимое  дисплея.  После  ее  вызова  текущая 

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

INCLUDE rtcu.inc 
PROGRAM test; 
BEGIN 
… 
… 
// очистить дисплей 
displayClear(); 
… 
… 
END; 
END_PROGRAM; 

displayString 
Функция печатает текст сообщения на дисплее с текущей записывающей 

позиции.  Входные  параметры:  message:string  –  текст  сообщения. 
Возвращаемое значение: нет. 

INCLUDE rtcu.inc 
PROGRAM test; 
BEGIN 
… 
… 
// Установить текущую записывающую позицию к 1,2 
displayXY(x := 1, y := 2); 
// Отобразить сообщение, начиная с текущей записывающей позиции