AstraRegul
Руководство системного интегратора
×

19.6. САМОСТОЯТЕЛЬНОЕ ПРАКТИЧЕСКОЕ ЗАДАНИЕ 19.6

Задание. Сохранение изменения статуса электродвигателей в структурной переменной с меткой даты и времени.
 
При каждом запуске и останове электродвигателя в отдельную строковую переменную массива должна сохраняться запись:
'ON' - при пуске (при изменении переменной "Ctrl1_Rele" или "Ctrl2_Rele" с FALSE на TRUE).
'OFF' - при останове (при изменении переменной "Ctrl1_Rele" или "Ctrl2_Rele" с TRUE на FALSE).
 
Также при каждом запуске и останове электродвигателя в отдельной структурной переменной этого же массива должна сохраняться метка даты и времени, прочитанные из системного времени ПЛК в виде:
Год
Месяц
День
Час
Минуты
Секунды
Миллисекунды
День недели
День года
 
Массив должен содержать 9 записей. Первая запись по событию выполняется в первый элемент массива, следующая запись - во второй и т.д. После заполнения массива новая запись выполняется в первый элемент массива.
Для сохранения данных по каждому электродвигателю используются независимые индивидуальные массивы.
Логический код необходимо написать в функциональном блоке, который должен иметь два экземпляра:
первый экземпляр - для сохранения статусных данных первого электродвигателя
второй экземпляр - для сохранения статусных данных второго электродвигателя.
 
 
 
Порядок выполнения.
Продолжайте работу в проекте среды разработки Astra.IDE, который вы использовали при выполнении самостоятельного практического задания 19.5.
В "Менеджер библиотек" проекта добавьте библиотеки "PsTime" и "SysTime".
В приложение "Application" добавьте структурный тип DUT с именем "Data_Str" и опишите в нем компоненты:
Motor_Status: STRING;
TimeStamp: RTS_SYSTIMEDATE;
 
Создайте функциональный блок "Motor_Ev_FB" и опишите в нем следующие локальные переменные:
В группе VAR_INPUT:
ON_OFF:BOOL;                                                  //статус электродвигателя
 
В группе VAR:
R_trig_ins: R_TRIG;                                              //экземпляр функционального блока R_TRIG
F_trig_ins: F_TRIG;                                             //экземпляр функционального блока F_TRIG
i: USINT := 1;                                                        //индекс массива
stTime:SYSTIME;                                                  //системное время ПЛК
DateTime: RTS_SYSTIMEDATE;                         //дата/время в виде структуры
Motor_EventsVar:ARRAY[1..9] OF Data_str;     //массив структур хранения данных состояния электродвигателя с меткой даты и                                                                                                                    времени
 
В функциональном блоке "Motor_Ev_FB" напишите логический код.
Рекомендации к написанию кода:
  • С использованием экземпляров "R_trig_ins" и "F_trig_ins" выполните выделение положительного и отрицательного фронта параметра "ON_OFF".
  • Функцией "SysTimeRtcHighResGet" запишите в переменную "stTime" системное время ПЛК.
  • Функцией "SysTimeRtcConvertHighResToDate" выполните преобразование значения переменной "stTime" в структуру с сохранением данных в переменной "DateTime".
  • Если "R_trig_ins.Q" становится TRUE, то значение переменной "DateTime" записывается в "Motor_EventsVar[i].TimeStamp". Также символы 'ON' записываются в "Motor_EventsVar[i].Motor_Status". Затем, если переменная "i" меньше 9, то её значение увеличивается на 1. Но если переменная "i" больше 9, то она принимает значение 1.
  • Если "R_trig_ins.Q" становится FALSE, то значение переменной "DateTime" записывается в "Motor_EventsVar[i].TimeStamp". Также символы 'OFF' записываются в "Motor_EventsVar[i].Motor_Status". Затем, если переменная "i" меньше 9, то её значение увеличивается на 1. Но если переменная "i" больше 9, то она принимает значение 1.
     
В программе "PLC_PRG" создайте два экземпляра функционального блока "Motor_Ev_FB" с именами "Motor1_Ev" и "Motor2_Ev".
 
В разделе кода программы "PLC_PRG" вызовите ранее созданные экземпляры функционального блока "Motor_Ev_FB". В параметр "ON_OFF" экземпляра "Motor1_Ev" передавайте значение переменной "Ctrl1_Rele". В параметр "ON_OFF" экземпляра "Motor2_Ev"передавайте значение переменной "Ctrl2_Rele".
 
Сохраните проект и загрузите приложение в контроллер. Проверьте работу кода.
Выполняйте управление электродвигателями, используя кнопки "ПУСК", "СТОП" визуализации или форсируя переменные Pusk1(2)_PB",  Stop1(2)_PB" в таблице "GVL". Откройте таблицу локальных переменных программы "PLC_PRG" и наблюдайте за записью значений в элементы массива структур экземпляров "Motor1_Ev" и "Motor2_Ev".
 
Ссылка на gif-файл с демонстрацией проверки работы программы https://share.prosyst.ru/s/55mdwfBLzi5z9NF
Вариант реализации программы представлен по ссылке https://share.prosyst.ru/s/qinE8riSb53P5q9
Рекомендуется для сравнения с вашим вариантом решения задания или при возникновении затруднений во время его выполнения!!!