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

Изменяемое стартовое время таймера

СообщениеДобавлено: 07 янв 2019, 14:53
Pingvinator
Приветствую всех кто зайдет сюда! И с праздником Рождества!
Форумчане, помогите начинающему в таком вопросе: необходимо реализовать изменяемое по желанию оператора время задержки выключения насоса, то-есть в скаде 2 окошка - одно ввод времени задержки выключения, во втором - показание обратного отсчета до момента выключения. Пробовал реализовать при помощи таймера PLC, но не знаю возможно ли вместо константы времени задавать его в виде переменной. В скаде теги и графику сделал, в степе читаю значение и передаю в переменную, а вот как это значение передать таймеру - пока не понял. Пока не получилось. Подскажите в каком направлении копать нужно для реализации такого проекта.

Re: Изменяемое стартовое время таймера

СообщениеДобавлено: 07 янв 2019, 15:02
ward
если речь идет про степ7, то в программе создаешь Дб, в нем поле db1.dbw0 с типом s5time, далее в скаде создаешь переменную,типа s5time, значение скады в миллисекундах, все

Re: Изменяемое стартовое время таймера

СообщениеДобавлено: 07 янв 2019, 15:08
Pingvinator
Примерно понял - сейчас попробую.

Re: Изменяемое стартовое время таймера

СообщениеДобавлено: 07 янв 2019, 16:01
Pingvinator
Спасибо за совет, частично работает, но столкнулся с ошибкой и ЦПУ уходит в стоп - ошибка преобразования ВСD... Это случается если в поле ввожу значение меньше 5000 мс, а при 5000 в DB записывается 38сек800мс. Если больше - то все работает только не понял с несоответствием ввода и записи времени ... Где то накосячил видимо или не до конца понял правильность как делать.

Re: Изменяемое стартовое время таймера

СообщениеДобавлено: 07 янв 2019, 16:31
petr2off
А почему бы не использовать ФБ TON задержка включения ?

Re: Изменяемое стартовое время таймера

СообщениеДобавлено: 07 янв 2019, 16:34
Pingvinator
ward писал(а): далее в скаде создаешь переменную,типа s5time, значение скады в миллисекундах


Возможно я что то не допонял: в скаде создал поле ввода - в свойствах привязал дб-шку с типом s5time. Я прав?

Re: Изменяемое стартовое время таймера

СообщениеДобавлено: 07 янв 2019, 16:38
Pingvinator
petr2off писал(а):А почему бы не использовать ФБ TON задержка включения ?


:[ а можно чуть подробнее ... Хотябы на пальцах, а дальше буду сам копать, я не так уж свободно работаю в STL еще ... Всего год как с нуля начал работать с Сименсом.
Все что нарыл в стандартных библиотеках - SFB4 TON IEC_TC (это скорее всего на задержку включения )и SFB5 TOF IEC_TC (на выключение соответственно). Но у меня нет пока опыта как их применять.

Re: Изменяемое стартовое время таймера

СообщениеДобавлено: 07 янв 2019, 18:04
petr2off
Ну там все довольно просто. 2 входных параметра IN и PT, и 2 выходных Q и ET.

IN - логический, передний фронт запускает отсчет
PT - tume величина задержки, например T#10s, вполне может быть ТЭГом
Q - выход, выставляется через задержку (если IN не будет снят)
ET - текущее время, когда достигнет значения PT, выставляется Q

А можно спросить о причинах любви к STL ? Например 1200 его не поддерживает.

Чем Вас SCL или FUP не устраивает ?

Re: Изменяемое стартовое время таймера

СообщениеДобавлено: 07 янв 2019, 18:31
Pingvinator
Моя приверженность довольно банальна - стандартное ПО которое используется на всех наших предприятиях. А еще - устроился в отдел АСУТП - сразу сказал что я ПОЛНЫЙ 0 и не программист, единственное неплохо знаю SHELL из Unix, буду учиться - возьмете - не возьмете, возможно мои знания из ИТ помогут в отделе. :dontknow: У меня стаж 17 лет системного админа в холдинге, в области ИТ я не побоюсь сказать довольно опытный админ, но из-за новых веяний моды - внедрение бесконтрольного количества биснес-администраторов, аудиторов, менеджеров по анализу нагрузки и занятости сотрудников - я уже не смог там работать .... Поэтому решил попробовать себя в АСУТП.
Начальник АСУТП взял, сказал давай посмотрим на что способен. Тем более лет 15 работали в одном здании и пересекались не раз. За этот год запустил более менее несложных 3 проекта в производство - пока все касалось стандартных требований, рисовал скаду, писал степ, учился на ходу и на уже похожих проектах. Сейчас вопрос встал о запуске тестовой пилотной установки, а соответственно из-за незнания технологами технологии как таковой и полного отсутствия ТЗ - все надо делать с расчетом " а вдруг нам захочется вот так вот ..."
1200 серия у нас пока сильно не распространена ... пока обходимся 300 серией. Поэтому и в форсированном режиме учу все нюансы которые позволяет делать степ, тиапортал только начинаю изучать.
По поводу TON и TOF - по входам и выходам я разобрался - их как правильно использовать? Добавлять самому сначала в проект а потом вызывать из функции ?

Re: Изменяемое стартовое время таймера

СообщениеДобавлено: 07 янв 2019, 19:26
petr2off
Насчет стандарта не совсем понял, и FUP и SCL и STL являются стандартными языками STEP7. Более того, если речь идет от 300 процессорах, то модули написанные на FUP и SCL могут быть автоматически преобразованы в STL. Отладка модуле на FUP намного проще и производительный. Но впрочем, это Ваше дело.

Это стандартные функции, их не надо добавлять в проект. Их нужно вызывать, где требуется. Из тонкостей, так как это стандартный ФБ, то необходимо предусмотреть размещение экземпляра данных ФБ. Тут возможны 3 варианта:
1) автоматическое размещение, TIA портал складывает экземпляр данных в особую папочку.
2 размещение в глобальном блоке данных
3) размещение в статических переменных вызывающего ФБ.

Re: Изменяемое стартовое время таймера

СообщениеДобавлено: 08 янв 2019, 22:54
mr_Frodo
Беда в том, что вы пытаетесь "впихнуть" в переменную с5тайм целочисленное значение. Сначала надо хорошенько над ним поиздеваться, а потом уже и запЁхивать )))
Например есть такой оператор IТВ (стл), преобразующий I в BCD . Попробуйте повертите в симуляторе этой функцией, глядишь что-нибудь и получится.
А можно делать с помощью ТОН ТОФФ из стандартной библиотеки, как и подсказали, там вместо с5тайм работает просто тайм, его можно задать целочисленной миллисекундой. Естественно для удобства ввода можно предварительно его пересчитать из миллисекунд в секунды или даже минуты и т.д.

Re: Изменяемое стартовое время таймера

СообщениеДобавлено: 09 янв 2019, 04:49
Михайло
Используйте тип DINT, время в миллисекундах. И тогда получится.

Re: Изменяемое стартовое время таймера

СообщениеДобавлено: 09 янв 2019, 13:34
SMax
Можно конвертировать TIME в S5TIME блоком FC40 - TIM_S5TI из стандартной библиотеки (Standarв Library -> IEC Function Blocks)
Ниже: пример использования стандартного таймера задержки включения (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

Re: Изменяемое стартовое время таймера

СообщениеДобавлено: 09 янв 2019, 20:20
Pingvinator
Вообщем сегодня в степе вместо константы взял L mw100, а в mw100 передаю ид db100 dbw0. В степе на симуляторе модифицирую значение в DB-шке на любое значение в формате s5t#......s - и все отрабатывает нормально, теперь не могу понять как мне из скады передать из области ввода значение в DB-шку в таком же формате s5T# ..... Пробовал разные варианты - каждый раз какая то несуразица - то ошибка преобразования в BCD то ввожу например значение 25 - в DB-шке появляется значение 250ms .... Явно уже глаза замозолились и не могу понять в чем причина ... Помогите советом В ЧЕМ ИМЕННО У МЕНЯ затык - буду сам потихоньку разбираться дальше.
PS.: Прошу прощения - но в рабочее время у нас на работе "не приветствуется посещение интернета" .... Служба безопасности по численности на одного программиста - 3 контролера .... Бывает и такое ... :(

Re: Изменяемое стартовое время таймера

СообщениеДобавлено: 09 янв 2019, 20:50
mr_Frodo
В скаде нет ввода с5тайм. Исходя из этого и того, что можете сделать с числом в степе и стройте свою логику. Вы код в сообщении выше понимаете?

Re: Изменяемое стартовое время таймера

СообщениеДобавлено: 09 янв 2019, 21:37
Pingvinator
Если у Вас есть минут 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 - тоесть вывод оствшегося времени таймера ...
.. много что ошибся? ... сам код вроде начинаю понимать просто читая но не всегда именно могу понять суть и смысл для чего так сделано ...
:[ Наверное пока я все это напечатаю - Вы уже уйдете с этой темы ... Но все же ...

Re: Изменяемое стартовое время таймера

СообщениеДобавлено: 09 янв 2019, 22:00
Pingvinator
И еще - весь код - взят из SCL .... Как вообще создается FB если есть код source... FB1 я создаю при компиляции - в fb1 мы обычно указываем жесткие значения шкал аналогов и предустановки.

Re: Изменяемое стартовое время таймера

СообщениеДобавлено: 09 янв 2019, 22:01
Pingvinator
:[
И в моем именно случае мне надо использовать функцию SFB5 -TOF, так как у меня задача построить задержку на выключение.
Разобрался немного, создал FB4 себе с TOF . Пытаюсь понять как ее использовать в моем случае.

Re: Изменяемое стартовое время таймера

СообщениеДобавлено: 09 янв 2019, 23:59
mr_Frodo
По поводу чтения кода - верно, но именно сам смысл и должен быть понятен.
В предлагаемом коде коллега вам предоставил готовый код для решения вашей задачи в 2-х вариантах:
со стандартным таймером
и с таймером из библиотеки на основе FB.
Если предоставленный код перевести на осмысленный алгоритм то получится:

в нетворке "динт то тайм" подготавливается введенное вами значение со скады в секундах в значение в миллисекундах умножением на 1000. Всё. Это нужно для работы библиотечной функции фц40, которая из десятичного целочисленного значения в миллисекундах типа "тайм" конвертирует в значение для стандартного таймера Т типа "с5тайм".
В следующем нетворке собственно работает сам таймер в который подставляется эта конвертированная переменная.

В нетворке "Иек таймер" вызывается так же библиотечный функциональный блок на входе которого работает та же подготовленная переменная.
Если стл для вас неудобочитаем в плане осознания полной картины, то может быть ЛАД для этого проще. Пишите на нем. Потом переключайте представление из лада в стл и так тренируйтесь.

Re: Изменяемое стартовое время таймера

СообщениеДобавлено: 10 янв 2019, 00:01
mr_Frodo
Pingvinator писал(а)::[
И в моем именно случае мне надо использовать функцию SFB5 -TOF, так как у меня задача построить задержку на выключение.

Это уже мелочи.