Страница 3 из 3 ПерваяПервая 123
Показано с 21 по 27 из 27

Тема: Таймер обратного счета

  1. #21
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,256

    По умолчанию

    PS
    Каюсь, когда писал про MOVE(0).ENO----(s)init, cделал лишнее (s)


    PS PS
    Потерял нить )))) А причем тут таймер обратного отчета ?
    Последний раз редактировалось Валенок; 08.02.2014 в 01:46.

  2. #22
    Пользователь
    Регистрация
    19.11.2011
    Адрес
    г. Белгород
    Сообщений
    357

    По умолчанию

    Вся суть как раз в "палке". Применительно к ENO "палка" работает не так как ожидается. Еще раз поясню свою мысль: если мы используем просто "палку" MOVE.ENO---переменная, то Выход MOVE.ENO включает переменную, но никогда не выключает. В других случаях MOVE.ENO---MOVE, MOVE.ENO---ADD.EN, MOVE.ENO---RS.SET (остальные не проверял) выход ENO работает предсказуемо, то есть включает и выключает тот блок к которому подключен. Ниже пример с разными вариантами для тех, кто еще не понял о чем идет речь. Включать/выключать переменную in.

    PS PS
    Потерял нить )))) А причем тут таймер обратного отчета ?
    Делюсь граблями, на которые наступил .
    Вложения Вложения
    • Тип файла: pro primer.pro (31.6 Кб, Просмотров: 44)

  3. #23
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,256

    По умолчанию

    Вот. Накурил. (С) Я
    В CFC есть данные и есть действия.

    Данные - переменные, включая структурные.
    Действия - это ПОУ и любые операторы.
    В CFC возможна организация обратных связей, но следствием этого является следующее:
    Любое действие, фактически превращается в структурную переменную (типа ФБ) добавлением полей EN и ENO для условного выполнения. А поля существуют всегда. ENO - это просто псевдоним EN для возможности организации шлейфа.Отсутствие EN/ENO это неявное присвоение TRUE неявному EN.
    Для FUNCTION, дополнительно, добавляется неявное поле результата. Т.е. результат функции есть всегда, даже когда она не выполняется, как бы странным это не казалось. Значение результата - определяется последним выполнением.

    Действие можно выполнить.
    При выполнении действия, оно само берет необходимые значения на входы (при явном определении EN ему требуется обязательное присвоение значения), но свои выходы действие никуда само не суёт. Но есть маленькое исключение подтверждающее правило.
    Данные нельзя выполнить.
    А значит они не могут взять себе необходимые значения (речь о данных реализованных как ВЫХОД), и если приемник значений – данные, то перемещение значений выполняется (или не выполняется) источником значения.
    Тут появляется еще одно исключение.
    Опять же - данные нельзя выполнить.
    Если и источник значений – данные, то перемещение значений происходит безусловно.

    Отмечу особенность. VAR_INPUT в исполняемых структурах (ФБ и PROGRAM) рассматриваются как данные только если обращение/связь к ним как к структурным переменным, а не как к действию.
    Следствие - см.выше

    Применительно к ST, MOVE не является эквивалентом :=
    MOVE это действие по условному перемещению значений (перемещению при условии)
    А эквивалент := это перемещение в данные, что может быть частью MOVE

    PS
    макросы – это отдельная песня, но курево кончилось
    Последний раз редактировалось Валенок; 10.02.2014 в 00:10.

  4. #24
    Пользователь Аватар для Dimooon
    Регистрация
    04.05.2013
    Адрес
    Казахстан,Рудный
    Сообщений
    450

    По умолчанию

    А я жду про макросы, Валенок. Если в CFC создать ФБ с выходами и входами- это получится тот же макрос? И как это все переносить в другой проект? Могу курева подкинуть, если что...

  5. #25
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    2,256

    По умолчанию

    Бычок нашёл.

    Нет, ФБ и макрос - разные вещи. Некоторое сходство макроса и фб есть. Тем более что любое действие (включая макрос) в CFC и превращается как-бы в ФБ. Но я макрос воспринимаю как набор действий[+данные] вставляемый каждый раз не вызовом, а целиком как есть (уточню позже). На это указывает, косвенно, отсутствие у него собственного EN (ну и мои шоры с характера макроса из асм'а).Точно выяснить это можно прогоном проверочного кода, но сейчас нет по рукой среды.
    Приделать макросу EN - прямо указать этот вход и нанизать на него все действия внутри.

    + макроса :
    1.Быстрое структурирование и сворачивания портянок на полтора квадратных километра без расписывания ПОУ,

    - макроса :
    1.Гимор с EN
    2.Удаление макроса - удаление его тела, а при удалении вызова ПОУ - его код остается.

    CFC'ки в другой проект - перенос через экспорт или использование через биб-ку. Копи-пасте не уверен что работает между проектами, но в пределах проекта нормально.

  6. #26

    По умолчанию

    Нужен бы таймер с обратным отсчетом в MasterScada. Сделал через ФБ "программа ST", код такой:

    PROGRAM MAIN_PROGRAM

    VAR_INPUT
    in:bool;
    Timer_Start : BOOL;
    Tin:Word;
    END_VAR

    VAR
    TPInst : TP ;
    Begin:BOOl;
    Timer_run : BOOL;
    Tm:TIME;
    END_VAR

    VAR_OUTPUT
    out:bool;
    Count:TIME;
    out3:bool;
    EstTime:TIME;
    END_VAR

    Tm:=WORD_TO_TIME(Tin*1000);

    TPInst(IN := Timer_Start, PT:=Tm);
    Timer_run :=TPInst.Q;
    out3:=TPInst.Q;
    Count:=TPInst.ET;
    out:=in;

    EstTime:=Tm-Count;

    (*TODO: TYPE PROGRAM CODE HERE*)
    END_PROGRAM

  7. #27
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,254

    По умолчанию

    Цитата Сообщение от eoldgu Посмотреть сообщение
    Нужен бы таймер с обратным отсчетом в MasterScada. Сделал через ФБ "программа ST", код такой:

    PROGRAM MAIN_PROGRAM

    VAR_INPUT
    in:bool;
    Timer_Start : BOOL;
    Tin:Word;
    END_VAR

    VAR
    TPInst : TP ;
    Begin:BOOl;
    Timer_run : BOOL;
    Tm:TIME;
    END_VAR

    VAR_OUTPUT
    out:bool;
    Count:TIME;
    out3:bool;
    EstTime:TIME;
    END_VAR

    Tm:=WORD_TO_TIME(Tin*1000);

    TPInst(IN := Timer_Start, PT:=Tm);
    Timer_run :=TPInst.Q;
    out3:=TPInst.Q;
    Count:=TPInst.ET;
    out:=in;

    EstTime:=Tm-Count;

    (*TODO: TYPE PROGRAM CODE HERE*)
    END_PROGRAM
    прямо таки Word? Это тогда таймер у Вас получится чуть более минуты
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

Страница 3 из 3 ПерваяПервая 123

Похожие темы

  1. таймер обратного времени с датчиком
    от sega73 в разделе Подбор Оборудования
    Ответов: 2
    Последнее сообщение: 25.05.2015, 15:40
  2. Ответов: 22
    Последнее сообщение: 31.08.2013, 00:40
  3. ТХ01 и функции счета
    от Maksim S.P. в разделе Эксплуатация
    Ответов: 12
    Последнее сообщение: 16.08.2012, 23:35
  4. СИ8 не запоминает показатели счета
    от makarev в разделе Эксплуатация
    Ответов: 3
    Последнее сообщение: 19.01.2011, 13:39

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •