ВУЗ: Пермский национальный исследовательский политехнический университет
Категория: Методичка
Дисциплина: Системы реального времени
Добавлен: 15.11.2018
Просмотров: 2154
Скачиваний: 14
displayString(message := "Hello world");
…
…
END;
END_PROGRAM;
displayNumber
Функция печатает число на дисплее с текущей записывающей позиции.
Входные параметры: number:dint – число. Возвращаемое значение: нет.
INCLUDE rtcu.inc
PROGRAM test;
BEGIN
…
…
// Установить текущую записывающую позицию к 1,2
displayXY(x := 1, y := 2);
// Отобразить число 4711, начиная с текущей записывающей позиции
displayNumber(number := 4711);
…
…
END;
END_PROGRAM;
displayXY
Функция устанавливает текущую позицию для записи. Входные
параметры: X:int(1..20) – колонка, Y:int(1..4) – строчка. Возвращаемое
значение: нет.
INCLUDE rtcu.inc
PROGRAM test;
BEGIN
…
…
// Установить текущую записывающую позицию к 1,2
displayXY(x := 1, y := 2);
// Отобразить число 4711, начиная с текущей записывающей позиции
displayNumber(number := 4711);
…
…
END;
END_PROGRAM;
Функции часов реального времени.
Функции часов позволяют программе взаимодействовать с часами
реального времени на платформе RTCU.
clockGet
Функциональный блок для чтения реального времени. Входящие
значения: нет. Выходящие значения: year:int (1980..2048) – текущий год,
month:sint (1..12) – текущий месяц, day:sint (1..31) – текущий день, hour:sint
(0..23) – текущий час, minute:sint (0..59) – текущая минута, second:sint (0..59)
– текущая секунда, linsec:dint - количество секунды с 1980-1-1 00:00:00.
INCLUDE rtcu.inc
VAR
clock : clockGet; // описание функционального блока clockGet
END_VAR;
PROGRAM test;
BEGIN
clock();
// Проверка, если месяц декабрь
IF clock.month = 12 THEN
…
…
END_IF;
…
…
END;
END_PROGRAM;
clockSet
Функция устанавливает часы реального времени. Входные параметры:
year:int (2000..2048) – текущий год, month:sint (1..12) – текущий месяц,
day:sint (1..31) – текущий день, hour:sint (0..23) – текущий час, minute:sint
(0..59) – тякущая минута, second:sint (0..59) – тякущая секунда, linsec:dint –
секунды с 1980-1-1 00:00:00.
INCLUDE rtcu.inc
PROGRAM test;
// Установка часов реального времени на 17 мая 2000. Примечание:
часы, минуты, секунды не установлены
clockSet(year := 2000, month := 5, day := 17);
BEGIN
…
…
END;
END_PROGRAM;
Порядок выполнения работы на примере проектирования системы
«Система охранной сигнализации»:
Формулировка задания:
Необходимо
спроектировать
систему
охранной
сигнализации.
Переключатель 1 (SW1) (разбитое окно), переключатель 2 (SW2) (открытие
двери), переключатель 3 (SW3) (сработал датчик движения). При включении
SW1 и SW3 на телефон, номер которого указан в программе, придет
сообщение, содержащее цифру ‘1’; при включении SW2 и SW3 - придет
сообщение, содержащее цифру ‘-1’; при включении SW1, SW2 и SW3 -
придет сообщение, содержащее цифру ‘0’.
На основе временной диаграммы и блок-схемы алгоритма, описанными
в лабораторной работе № 1, разработано ПО на языке программирования
VPL для системы охранной сигнализации на базе устройства Vida 88.
Листинг программы:
INCLUDE rtcu.inc
VAR_INPUT
sw1, sw2, sw3 : BOOL; // переключатели
END_VAR;
VAR_OUTPUT
END_VAR;
VAR
iSend : INT; // посылаемая цифра
f1, f2, f3 : BOOL; // флаги
END_VAR;
PROGRAM test;
gsmPower(power := TRUE); // включение GSM модуля
// работа с дисплеем
displayBacklight(intensity := 75); // интенсивность яркости дисплея
displayClear(); // очищение дисплея
displayXY(x := 1, y := 1); // установка текущей позиции для записи
iSend := 0;
displayString(message := "HELLO"); // отображение сообщения на дисплее
f1 := TRUE; f2 := TRUE; f3 := TRUE;
BEGIN // бесконечный цикл
UPDATEIO; // обновляет входов и выходов
if sw1 and f1 then
iSend := iSend + 1;
f1 := FALSE;
displayClear();
displayNumber(number := iSend);
elsif sw1 = FALSE then
f1 := TRUE;
end_if;
if sw2 and f2 then
iSend := iSend - 1;
f2 := FALSE;
displayClear();
displayNumber(number := iSend);
elsif sw2 = FALSE then
f2 := TRUE;
end_if;
if sw3 and f3 then
if gsmConnected() then // если есть соединение
// посылаем на телефон соответствующую цифру
gsmSendSMS(phonenumber := "+7*********", message := intToStr(v :=
iSend));
displayClear();
// отображение на дисплее сообщения с соответствующей цифрой
displayString(message := strFormat(format := "Was sent \1", v1 := iSend));
iSend := 0;
else
displayClear();
displayString(message := "No GSM");
end_if;
f3 := FALSE;
elsif sw3 = FALSE then
f3 := TRUE;
end_if;
Sleep(delay := 100); // задержка на 100 мкс
END_WHILE;
END;
END_PROGRAM;
Работоспособность системы проверена на симуляторе RTCU IDE. После
программа была загружена в устройство Vida 88 и протестирована на
устройстве.
Содержание отчета:
1) цель работы;
2) основные элементы языка программирования VPL;
3) описание задания;
4) выписать используемые в работе специфические функции языка;
5) листинг программы разработанной в соответствии вариантом;
6) скриншоты выполнения программы в симуляторе;
7) ответы на контрольные вопросы.
Контрольные вопросы:
1. Объявление, каких стандартных функций содержится в файле rtcu.inc.
2. Состав и назначение основных разделов программы.
3. Опишите 5 функциональных возможностей устройства, реализованных
программным способом.
4. Каким образом осуществляется обработка нажатия переключателя в
программе?
5. Как осуществить в программе смену цвета светодиода при индикации?
6. Составить схему алгоритма настройки и конфигурирования GSM модуля
в виде блочных структур.
7. В каких единицах указывается яркость дисплея?
8. Какое максимальное значение может принимать аналоговый сигнал?
9. За что отвечает параметр linsec в функциях часов реального времени?