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

Добавлен: 15.11.2018

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

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

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

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 


background image

(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  -  придет 


background image

сообщение,  содержащее  цифру  ‘-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  //  если есть соединение 


background image

         //  посылаем на телефон соответствующую цифру 
         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 в функциях часов реального времени?