Изменяемое стартовое время таймера
-
- Дилетант
- Сообщения: 17
- Зарегистрирован: 06 янв 2019, 15:02
Изменяемое стартовое время таймера
Приветствую всех кто зайдет сюда! И с праздником Рождества!
Форумчане, помогите начинающему в таком вопросе: необходимо реализовать изменяемое по желанию оператора время задержки выключения насоса, то-есть в скаде 2 окошка - одно ввод времени задержки выключения, во втором - показание обратного отсчета до момента выключения. Пробовал реализовать при помощи таймера PLC, но не знаю возможно ли вместо константы времени задавать его в виде переменной. В скаде теги и графику сделал, в степе читаю значение и передаю в переменную, а вот как это значение передать таймеру - пока не понял. Пока не получилось. Подскажите в каком направлении копать нужно для реализации такого проекта.
Форумчане, помогите начинающему в таком вопросе: необходимо реализовать изменяемое по желанию оператора время задержки выключения насоса, то-есть в скаде 2 окошка - одно ввод времени задержки выключения, во втором - показание обратного отсчета до момента выключения. Пробовал реализовать при помощи таймера PLC, но не знаю возможно ли вместо константы времени задавать его в виде переменной. В скаде теги и графику сделал, в степе читаю значение и передаю в переменную, а вот как это значение передать таймеру - пока не понял. Пока не получилось. Подскажите в каком направлении копать нужно для реализации такого проекта.
Re: Изменяемое стартовое время таймера
если речь идет про степ7, то в программе создаешь Дб, в нем поле db1.dbw0 с типом s5time, далее в скаде создаешь переменную,типа s5time, значение скады в миллисекундах, все
-
- Дилетант
- Сообщения: 17
- Зарегистрирован: 06 янв 2019, 15:02
Re: Изменяемое стартовое время таймера
Примерно понял - сейчас попробую.
-
- Дилетант
- Сообщения: 17
- Зарегистрирован: 06 янв 2019, 15:02
Re: Изменяемое стартовое время таймера
Спасибо за совет, частично работает, но столкнулся с ошибкой и ЦПУ уходит в стоп - ошибка преобразования ВСD... Это случается если в поле ввожу значение меньше 5000 мс, а при 5000 в DB записывается 38сек800мс. Если больше - то все работает только не понял с несоответствием ввода и записи времени ... Где то накосячил видимо или не до конца понял правильность как делать.
Re: Изменяемое стартовое время таймера
А почему бы не использовать ФБ TON задержка включения ?
-
- Дилетант
- Сообщения: 17
- Зарегистрирован: 06 янв 2019, 15:02
Re: Изменяемое стартовое время таймера
Возможно я что то не допонял: в скаде создал поле ввода - в свойствах привязал дб-шку с типом s5time. Я прав?ward писал(а): далее в скаде создаешь переменную,типа s5time, значение скады в миллисекундах
-
- Дилетант
- Сообщения: 17
- Зарегистрирован: 06 янв 2019, 15:02
Re: Изменяемое стартовое время таймера
а можно чуть подробнее ... Хотябы на пальцах, а дальше буду сам копать, я не так уж свободно работаю в STL еще ... Всего год как с нуля начал работать с Сименсом.petr2off писал(а):А почему бы не использовать ФБ TON задержка включения ?
Все что нарыл в стандартных библиотеках - SFB4 TON IEC_TC (это скорее всего на задержку включения )и SFB5 TOF IEC_TC (на выключение соответственно). Но у меня нет пока опыта как их применять.
Re: Изменяемое стартовое время таймера
Ну там все довольно просто. 2 входных параметра IN и PT, и 2 выходных Q и ET.
IN - логический, передний фронт запускает отсчет
PT - tume величина задержки, например T#10s, вполне может быть ТЭГом
Q - выход, выставляется через задержку (если IN не будет снят)
ET - текущее время, когда достигнет значения PT, выставляется Q
А можно спросить о причинах любви к STL ? Например 1200 его не поддерживает.
Чем Вас SCL или FUP не устраивает ?
IN - логический, передний фронт запускает отсчет
PT - tume величина задержки, например T#10s, вполне может быть ТЭГом
Q - выход, выставляется через задержку (если IN не будет снят)
ET - текущее время, когда достигнет значения PT, выставляется Q
А можно спросить о причинах любви к STL ? Например 1200 его не поддерживает.
Чем Вас SCL или FUP не устраивает ?
-
- Дилетант
- Сообщения: 17
- Зарегистрирован: 06 янв 2019, 15:02
Re: Изменяемое стартовое время таймера
Моя приверженность довольно банальна - стандартное ПО которое используется на всех наших предприятиях. А еще - устроился в отдел АСУТП - сразу сказал что я ПОЛНЫЙ 0 и не программист, единственное неплохо знаю SHELL из Unix, буду учиться - возьмете - не возьмете, возможно мои знания из ИТ помогут в отделе. У меня стаж 17 лет системного админа в холдинге, в области ИТ я не побоюсь сказать довольно опытный админ, но из-за новых веяний моды - внедрение бесконтрольного количества биснес-администраторов, аудиторов, менеджеров по анализу нагрузки и занятости сотрудников - я уже не смог там работать .... Поэтому решил попробовать себя в АСУТП.
Начальник АСУТП взял, сказал давай посмотрим на что способен. Тем более лет 15 работали в одном здании и пересекались не раз. За этот год запустил более менее несложных 3 проекта в производство - пока все касалось стандартных требований, рисовал скаду, писал степ, учился на ходу и на уже похожих проектах. Сейчас вопрос встал о запуске тестовой пилотной установки, а соответственно из-за незнания технологами технологии как таковой и полного отсутствия ТЗ - все надо делать с расчетом " а вдруг нам захочется вот так вот ..."
1200 серия у нас пока сильно не распространена ... пока обходимся 300 серией. Поэтому и в форсированном режиме учу все нюансы которые позволяет делать степ, тиапортал только начинаю изучать.
По поводу TON и TOF - по входам и выходам я разобрался - их как правильно использовать? Добавлять самому сначала в проект а потом вызывать из функции ?
Начальник АСУТП взял, сказал давай посмотрим на что способен. Тем более лет 15 работали в одном здании и пересекались не раз. За этот год запустил более менее несложных 3 проекта в производство - пока все касалось стандартных требований, рисовал скаду, писал степ, учился на ходу и на уже похожих проектах. Сейчас вопрос встал о запуске тестовой пилотной установки, а соответственно из-за незнания технологами технологии как таковой и полного отсутствия ТЗ - все надо делать с расчетом " а вдруг нам захочется вот так вот ..."
1200 серия у нас пока сильно не распространена ... пока обходимся 300 серией. Поэтому и в форсированном режиме учу все нюансы которые позволяет делать степ, тиапортал только начинаю изучать.
По поводу TON и TOF - по входам и выходам я разобрался - их как правильно использовать? Добавлять самому сначала в проект а потом вызывать из функции ?
Re: Изменяемое стартовое время таймера
Насчет стандарта не совсем понял, и FUP и SCL и STL являются стандартными языками STEP7. Более того, если речь идет от 300 процессорах, то модули написанные на FUP и SCL могут быть автоматически преобразованы в STL. Отладка модуле на FUP намного проще и производительный. Но впрочем, это Ваше дело.
Это стандартные функции, их не надо добавлять в проект. Их нужно вызывать, где требуется. Из тонкостей, так как это стандартный ФБ, то необходимо предусмотреть размещение экземпляра данных ФБ. Тут возможны 3 варианта:
1) автоматическое размещение, TIA портал складывает экземпляр данных в особую папочку.
2 размещение в глобальном блоке данных
3) размещение в статических переменных вызывающего ФБ.
Это стандартные функции, их не надо добавлять в проект. Их нужно вызывать, где требуется. Из тонкостей, так как это стандартный ФБ, то необходимо предусмотреть размещение экземпляра данных ФБ. Тут возможны 3 варианта:
1) автоматическое размещение, TIA портал складывает экземпляр данных в особую папочку.
2 размещение в глобальном блоке данных
3) размещение в статических переменных вызывающего ФБ.
Re: Изменяемое стартовое время таймера
Беда в том, что вы пытаетесь "впихнуть" в переменную с5тайм целочисленное значение. Сначала надо хорошенько над ним поиздеваться, а потом уже и запЁхивать )))
Например есть такой оператор IТВ (стл), преобразующий I в BCD . Попробуйте повертите в симуляторе этой функцией, глядишь что-нибудь и получится.
А можно делать с помощью ТОН ТОФФ из стандартной библиотеки, как и подсказали, там вместо с5тайм работает просто тайм, его можно задать целочисленной миллисекундой. Естественно для удобства ввода можно предварительно его пересчитать из миллисекунд в секунды или даже минуты и т.д.
Например есть такой оператор IТВ (стл), преобразующий I в BCD . Попробуйте повертите в симуляторе этой функцией, глядишь что-нибудь и получится.
А можно делать с помощью ТОН ТОФФ из стандартной библиотеки, как и подсказали, там вместо с5тайм работает просто тайм, его можно задать целочисленной миллисекундой. Естественно для удобства ввода можно предварительно его пересчитать из миллисекунд в секунды или даже минуты и т.д.
Вот моя подпись...
Re: Изменяемое стартовое время таймера
Используйте тип DINT, время в миллисекундах. И тогда получится.
Re: Изменяемое стартовое время таймера
Можно конвертировать TIME в S5TIME блоком FC40 - TIM_S5TI из стандартной библиотеки (Standarв Library -> IEC Function Blocks)
Ниже: пример использования стандартного таймера задержки включения (SD) и IEC таймера (TON), с выводом оставшегося времени.
Ниже: пример использования стандартного таймера задержки включения (SD) и IEC таймера (TON), с выводом оставшегося времени.
Код: Выделить всё
FUNCTION_BLOCK FB 1
TITLE =
VERSION : 0.1
VAR_INPUT
IN : BOOL ; //Input
TM : DINT ; //Time in secods
END_VAR
VAR_OUTPUT
OUT_1 : BOOL ; //Standard Timer - Output
RT_1 : REAL ; //Standard Timer - Remaning Time
OUT_2 : BOOL ; //IEC Timer - Output
RT_2 : REAL ; //IEC Timer - Remaning Time
END_VAR
VAR
TON : "TON";
TM_Time : TIME ;
TM_S5Time : S5TIME ;
ET : TIME ;
END_VAR
BEGIN
NETWORK
TITLE =DINT to TIME
L #TM;
L 1000;
*I ;
T #TM_Time;
NETWORK
TITLE =TIME to S5TIME (FC40 - TIM_S5TI) - Standard Library
CALL "TIM_S5TI" (
IN := #TM_Time,
RET_VAL := #TM_S5Time);
NETWORK
TITLE =Standard Timer
A #IN;
L #TM_S5Time;
SD T 1;
AN #IN;
R T 1;
A T 1;
= #OUT_1;
L T 1;
DTR ;
L 1.000000e+001;
/R ;
T #RT_1;
NETWORK
TITLE =IEC Timer (SFB4 - TON)
CALL #TON (
IN := #IN,
PT := #TM_Time,
Q := #OUT_2,
ET := #ET);
L #ET;
DTR ;
L 1.000000e+003;
/R ;
L #TM;
DTR ;
TAK ;
-R ;
T #RT_2;
END_FUNCTION_BLOCK
-
- Дилетант
- Сообщения: 17
- Зарегистрирован: 06 янв 2019, 15:02
Re: Изменяемое стартовое время таймера
Вообщем сегодня в степе вместо константы взял L mw100, а в mw100 передаю ид db100 dbw0. В степе на симуляторе модифицирую значение в DB-шке на любое значение в формате s5t#......s - и все отрабатывает нормально, теперь не могу понять как мне из скады передать из области ввода значение в DB-шку в таком же формате s5T# ..... Пробовал разные варианты - каждый раз какая то несуразица - то ошибка преобразования в BCD то ввожу например значение 25 - в DB-шке появляется значение 250ms .... Явно уже глаза замозолились и не могу понять в чем причина ... Помогите советом В ЧЕМ ИМЕННО У МЕНЯ затык - буду сам потихоньку разбираться дальше.
PS.: Прошу прощения - но в рабочее время у нас на работе "не приветствуется посещение интернета" .... Служба безопасности по численности на одного программиста - 3 контролера .... Бывает и такое ...
PS.: Прошу прощения - но в рабочее время у нас на работе "не приветствуется посещение интернета" .... Служба безопасности по численности на одного программиста - 3 контролера .... Бывает и такое ...
Re: Изменяемое стартовое время таймера
В скаде нет ввода с5тайм. Исходя из этого и того, что можете сделать с числом в степе и стройте свою логику. Вы код в сообщении выше понимаете?
Вот моя подпись...
-
- Дилетант
- Сообщения: 17
- Зарегистрирован: 06 янв 2019, 15:02
Re: Изменяемое стартовое время таймера
Если у Вас есть минут 10 времени, потратить которое Вы сможете на меня, то вот что я вижу в FB1 выше в сообщении: (если что то не так - прошу пнуть где и как я неправ ... Буду даже очень благодарен)
Итак:
Функциональный блок, как в примере номер 1, в нем:
создаем переменные по входу IN и TM с типом BOOL и DINT соответственно, по выходу - OUT_1, RT_1, OUT_2 и RT_2 и с типом BOOL, REAL, BOOL, REAL соответственно. Описываем переменные TON, TM_Time, TM_S5Time, ET. В последующем нетворке загружаем значение переменной ТМ в аккумулятор потом загружаем число 1000, умножаем и передаем в переменную TM_TIME
LFKTT - далее вызываем функцию TIM_S5TI , для которой указаны переменные из нашей функции FB1 TM_Time и TM_S5Time вкачестве переменных IN и RET_VAL
После отработки этой функции отрабатывает следующий нетворк:
Наличие значения в переменной IN является условием для последующего запуска таймера, загружаем значение стартового времени таймера из переменной TM_S5Time, запускаем таймер Т1 с задержкой на включение, проверяем значение в переменной IN - если оно отсутствует - сброс таймера, в противном случае проверяем выход реле таймера и присваиваем это значение в переменную OUT_1.
Далее:
загружаем значение из таймера №1, преобразуем из двойного integer в число с плавающей запятой, загружаем в аккумулятор число 10 и делим на него преобразованное значение потом передаем его в переменную RT_1.
В следующем нетворке вызываем функцию с именем TON, для которой значения для обработки берутся из переменных FB1, далее загружаем значение из ET, преобразуем в число с плав. запятой, загружаем число 100 и на него делим полученное ранее значение, загружаем из переменной TM, преобразуем и меняем местами значения в аккумуляторах, отнимаем и передаем в переменную RT_2 - тоесть вывод оствшегося времени таймера ...
.. много что ошибся? ... сам код вроде начинаю понимать просто читая но не всегда именно могу понять суть и смысл для чего так сделано ...
Наверное пока я все это напечатаю - Вы уже уйдете с этой темы ... Но все же ...
Итак:
Функциональный блок, как в примере номер 1, в нем:
создаем переменные по входу IN и TM с типом BOOL и DINT соответственно, по выходу - OUT_1, RT_1, OUT_2 и RT_2 и с типом BOOL, REAL, BOOL, REAL соответственно. Описываем переменные TON, TM_Time, TM_S5Time, ET. В последующем нетворке загружаем значение переменной ТМ в аккумулятор потом загружаем число 1000, умножаем и передаем в переменную TM_TIME
LFKTT - далее вызываем функцию TIM_S5TI , для которой указаны переменные из нашей функции FB1 TM_Time и TM_S5Time вкачестве переменных IN и RET_VAL
После отработки этой функции отрабатывает следующий нетворк:
Наличие значения в переменной IN является условием для последующего запуска таймера, загружаем значение стартового времени таймера из переменной TM_S5Time, запускаем таймер Т1 с задержкой на включение, проверяем значение в переменной IN - если оно отсутствует - сброс таймера, в противном случае проверяем выход реле таймера и присваиваем это значение в переменную OUT_1.
Далее:
загружаем значение из таймера №1, преобразуем из двойного integer в число с плавающей запятой, загружаем в аккумулятор число 10 и делим на него преобразованное значение потом передаем его в переменную RT_1.
В следующем нетворке вызываем функцию с именем TON, для которой значения для обработки берутся из переменных FB1, далее загружаем значение из ET, преобразуем в число с плав. запятой, загружаем число 100 и на него делим полученное ранее значение, загружаем из переменной TM, преобразуем и меняем местами значения в аккумуляторах, отнимаем и передаем в переменную RT_2 - тоесть вывод оствшегося времени таймера ...
.. много что ошибся? ... сам код вроде начинаю понимать просто читая но не всегда именно могу понять суть и смысл для чего так сделано ...
Наверное пока я все это напечатаю - Вы уже уйдете с этой темы ... Но все же ...
-
- Дилетант
- Сообщения: 17
- Зарегистрирован: 06 янв 2019, 15:02
Re: Изменяемое стартовое время таймера
И еще - весь код - взят из SCL .... Как вообще создается FB если есть код source... FB1 я создаю при компиляции - в fb1 мы обычно указываем жесткие значения шкал аналогов и предустановки.
-
- Дилетант
- Сообщения: 17
- Зарегистрирован: 06 янв 2019, 15:02
Re: Изменяемое стартовое время таймера
И в моем именно случае мне надо использовать функцию SFB5 -TOF, так как у меня задача построить задержку на выключение.
Разобрался немного, создал FB4 себе с TOF . Пытаюсь понять как ее использовать в моем случае.
Re: Изменяемое стартовое время таймера
По поводу чтения кода - верно, но именно сам смысл и должен быть понятен.
В предлагаемом коде коллега вам предоставил готовый код для решения вашей задачи в 2-х вариантах:
со стандартным таймером
и с таймером из библиотеки на основе FB.
Если предоставленный код перевести на осмысленный алгоритм то получится:
в нетворке "динт то тайм" подготавливается введенное вами значение со скады в секундах в значение в миллисекундах умножением на 1000. Всё. Это нужно для работы библиотечной функции фц40, которая из десятичного целочисленного значения в миллисекундах типа "тайм" конвертирует в значение для стандартного таймера Т типа "с5тайм".
В следующем нетворке собственно работает сам таймер в который подставляется эта конвертированная переменная.
В нетворке "Иек таймер" вызывается так же библиотечный функциональный блок на входе которого работает та же подготовленная переменная.
Если стл для вас неудобочитаем в плане осознания полной картины, то может быть ЛАД для этого проще. Пишите на нем. Потом переключайте представление из лада в стл и так тренируйтесь.
В предлагаемом коде коллега вам предоставил готовый код для решения вашей задачи в 2-х вариантах:
со стандартным таймером
и с таймером из библиотеки на основе FB.
Если предоставленный код перевести на осмысленный алгоритм то получится:
в нетворке "динт то тайм" подготавливается введенное вами значение со скады в секундах в значение в миллисекундах умножением на 1000. Всё. Это нужно для работы библиотечной функции фц40, которая из десятичного целочисленного значения в миллисекундах типа "тайм" конвертирует в значение для стандартного таймера Т типа "с5тайм".
В следующем нетворке собственно работает сам таймер в который подставляется эта конвертированная переменная.
В нетворке "Иек таймер" вызывается так же библиотечный функциональный блок на входе которого работает та же подготовленная переменная.
Если стл для вас неудобочитаем в плане осознания полной картины, то может быть ЛАД для этого проще. Пишите на нем. Потом переключайте представление из лада в стл и так тренируйтесь.
Вот моя подпись...
Re: Изменяемое стартовое время таймера
Это уже мелочи.Pingvinator писал(а):
И в моем именно случае мне надо использовать функцию SFB5 -TOF, так как у меня задача построить задержку на выключение.
Вот моя подпись...