Страница 1 из 1

Прерывание по времени в Step 7

Добавлено: 10 сен 2013, 16:44
Seregas
Здравствуйте. Подскажите пожалуйста, как реализовать выключение/включение оборудования по времени.
То есть, у нас есть системное время (которое находится в ПЛК) и есть оборудование, которое необходимо в это время выключать.
Пробовал реализовать задачу двумя способами:
1) Вызовом функции SFC 28, которая в определенное время запускала ОВ 10, в котором был прописан алгоритм выключения оборудования.
Но в этом методе обнаружились некоторые недостатки, например то, что это время мы не сможем ввести из скада системы.
CPU.jpg
2) С помощью системной функции SFC 1. Но тут тоже столкнулся с проблемой,не совсем понимаю, как вытянуть реальное время из ПЛК.
На выходе имею следующий вид:
SFC.jpg
Подскажите пожалуйста как работать с SFC 1 или как реализовать поставленную задачу?

Re: Прерывание по времени в Step 7

Добавлено: 10 сен 2013, 20:59
Михайло
На работе попробую...

Re: Прерывание по времени в Step 7

Добавлено: 11 сен 2013, 10:01
Seregas
Спасибо Михаил, жду.

Re: Прерывание по времени в Step 7

Добавлено: 11 сен 2013, 21:14
Михайло
Завтра, надеюсь, посмотрю.

Re: Прерывание по времени в Step 7

Добавлено: 12 сен 2013, 08:20
Seregas
Вроде бы разобрались. Использовали SFC 1 и FC 8.
FC 8 на выходе показал нам время которое находилось в CPU.
Если у Вас, есть альтернативные методы решения - очень буду рад посмотреть)

Re: Прерывание по времени в Step 7

Добавлено: 12 сен 2013, 15:07
Михайло
Все верно, так и надо.

У Step7 несколько форматов времени:

DATE AND TIME (DT) - дата и время (64 бита)
DATE (D) - дата (16 бит)
TIME (T) или TIME OF DAY (TOD) - время или время дня (32 бита)
DAY - день недели (16 бит)

При этом возможна конвертация DT <-> D + T <-> D +TOD.

Примеры:
DATE_AND_TIME#1993-12-25-8:01:1.23 или DT#1993-12-25-8:01:1.23
DATE#1994-3-15 или D#1994-3-15
TIME_OF_DAY#0D_1H_1M_0S_0MS или T#0D_1H_1M_0S_0MS

1. Для конвертации D + TOD -> DT используется функция FC3 D_TOD_DT.
2. Для извлечения даты DT -> D используется функция FC6 DT_DATE.
3. Для извлечения времени DT -> TOD используется функция FC8 DT_TOD
4. Для сдвига по времени используется функция FC1 AD_DT_TM (операция DT2 = DT1 + T),
5. Для расчета разницы во времени используется функция FC34 SB_DT_DT (операция T = DT1 - DT2),
6. Для сдвига по времени назад используется функция FC35 SB_DT_TM (операция DT2 = DT1 - T).
7. Для сравнения дат и времен можно использовать функции FC9, FC12 GE_DT (больше или равно), FC14 GT_DT (больше), FC18 LE_DT (меньше или равно), FC23 LT_DT (меньше).
8. Для извлечения дня недели DAY из DT используется FC7 DT_DAY, при чем день недели кодируется целым числом INTEGER: 1 - понедельник, 2 - вторник, 3 - среда, 4 - четверг, 5 - пятница, 6 - суббота, 7 - воскресение.

Re: Прерывание по времени в Step 7

Добавлено: 12 сен 2013, 16:08
Seregas
Спасибо Михаил, за предоставленную информацию. Надеемся на дальнейшую поддержку.

Re: Прерывание по времени в Step 7

Добавлено: 12 сен 2013, 18:48
Михайло
Если нужно сформировать ежедневное событие независимо от даты, то делаем следующее:
1. Извлекаем реальное время с помощью SFC1 Read System Clock в переменную типа DT.
2. Используем функцию FC6 DT_DATE, которая извлекает из реального времени DT текущую дату D.
3. Используем функцию FC8 DT_TOD, которая извлекает из реального времени DT текущее время TOD.
4. Функцией FC3 D_TOD_DT складываем текущую дату D и время T#17H (17-00), получаем первую дату для сравнения (DT1)
5. Функцией FC3 D_TOD_DT складываем текущую дату D и время T#18H (18-00), получаем вторую дату для сравнения (DT2)
6. Сравниваем DT и DT1 функцией FC12 GE_DT. Текущее время >= 17-00.
7. Сравниваем DT и DT2 функцией FC23 LE_DT. Текущее время < 18-00.
8. Результаты объединяем операцией AND и получаем: 17-00 <= текущее время < 18-00.
9. Итог: бит, который включается между 17-00 и 18-00.

Re: Прерывание по времени в Step 7

Добавлено: 12 сен 2013, 18:58
Михайло
Дополнил описание форматов времени и функций (сегодняшнее мое сообщение в 18-07).

Re: Прерывание по времени в Step 7

Добавлено: 13 сен 2013, 10:51
Seregas
Спасибо Вам за помощь,воспользовались рекомендацией в последнем сообщении, подходит идеально и решает нашу задачу.

Re: Прерывание по времени в Step 7

Добавлено: 11 мар 2014, 10:03
Seregas
Здравствуйте уважаемые пользователи данного форума. Снова нужен ваш совет по данной теме.
Вариант который посоветовал пользователь Михайло работает очень хорошо, но у нас возникли трудности с выводом переменной типа TOD на верхний уровень в scada Zenon 7.0
Scada система Zenon - не видит такой тип данных как TOD.
Если кому то приходилось работать с Zenon и решать подобную задачу, будем очень благодарны за советы.

Re: Прерывание по времени в Step 7

Добавлено: 11 мар 2014, 18:31
Михайло
Нам бы лучше понимать, какие типы данных понимает Зенон вообще, помимо простых INT, WORD и т.д.

Re: Прерывание по времени в Step 7

Добавлено: 12 мар 2014, 09:18
Seregas
Всем спасибо за внимание.
Все оказалось просто. Поступили следующим образом.
С верхнего уровня записываем значения в WORD, а от туда через Move посылаем данные в ячейку памяти переменной TOD, которая отвечает за часы и минуты.

Re: Прерывание по времени в Step 7

Добавлено: 29 авг 2016, 13:40
Geirby
Тоже решил воспользоваться OB10 и с удивлением обнаружил, что время прерывания можно поставить только кратно минутам...
Если нужны секунды, придется самому все прописывать или есть в Step7 решение? Или для этого нужно подбирать контроллер?

Re: Прерывание по времени в Step 7

Добавлено: 29 авг 2016, 14:00
Автоматизатор
Может OB30 подойдет? Циклические прерывания по времени от 1 до 60000 мс.

Re: Прерывание по времени в Step 7

Добавлено: 30 авг 2016, 17:20
Marrenoloth
Я извиняюсь, но если основная программа работает из OB1, не проще текущее время из его TEMP переменных куда-то сохранить и потом просто подгружать?