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

Инженерное программное обеспечение
Ответить
Аватара пользователя
Seregas
Любитель
Сообщения: 39
Зарегистрирован: 07 сен 2013, 19:10

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

Сообщение Seregas »

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

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

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

Сообщение Михайло »

На работе попробую...

Аватара пользователя
Seregas
Любитель
Сообщения: 39
Зарегистрирован: 07 сен 2013, 19:10

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

Сообщение Seregas »

Спасибо Михаил, жду.

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

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

Сообщение Михайло »

Завтра, надеюсь, посмотрю.

Аватара пользователя
Seregas
Любитель
Сообщения: 39
Зарегистрирован: 07 сен 2013, 19:10

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

Сообщение Seregas »

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

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

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

Сообщение Михайло »

Все верно, так и надо.

У 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 - воскресение.

Аватара пользователя
Seregas
Любитель
Сообщения: 39
Зарегистрирован: 07 сен 2013, 19:10

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

Сообщение Seregas »

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

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

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

Сообщение Михайло »

Если нужно сформировать ежедневное событие независимо от даты, то делаем следующее:
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.

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

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

Сообщение Михайло »

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

Аватара пользователя
Seregas
Любитель
Сообщения: 39
Зарегистрирован: 07 сен 2013, 19:10

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

Сообщение Seregas »

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

Аватара пользователя
Seregas
Любитель
Сообщения: 39
Зарегистрирован: 07 сен 2013, 19:10

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

Сообщение Seregas »

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

Михайло
Администратор
Сообщения: 4094
Зарегистрирован: 19 сен 2012, 19:16

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

Сообщение Михайло »

Нам бы лучше понимать, какие типы данных понимает Зенон вообще, помимо простых INT, WORD и т.д.

Аватара пользователя
Seregas
Любитель
Сообщения: 39
Зарегистрирован: 07 сен 2013, 19:10

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

Сообщение Seregas »

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

Geirby
Любитель
Сообщения: 86
Зарегистрирован: 16 авг 2016, 19:34

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

Сообщение Geirby »

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

Аватара пользователя
Автоматизатор
Профессионал
Сообщения: 993
Зарегистрирован: 09 окт 2012, 05:18

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

Сообщение Автоматизатор »

Может OB30 подойдет? Циклические прерывания по времени от 1 до 60000 мс.

Marrenoloth
Дилетант
Сообщения: 7
Зарегистрирован: 26 июл 2016, 23:12

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

Сообщение Marrenoloth »

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

Ответить