Страница 2 из 8 ПерваяПервая 1234 ... ПоследняяПоследняя
Показано с 11 по 20 из 80

Тема: Функциональный блок таймер с задержкой включения TON (TOF, TP)

  1. #11

    По умолчанию

    "в условии T1.Q" это про строчку 14 на рисунке? В условии(или цикле) при дальнем усовершенствовании программы может появиться функциональный блок. Т.е. логика следующая: расставил "t1;" на стадии разработки. А потом через 3-4 месяца в случае надобности добавляешь функциональные блоки, которые могут быть ресурсоёмкими по времени. Иначе мне через 3-4 месяца надо вспоминать логику работы блока программы с таймером. Когда на объекте надо все поправить за 10-15 минут, а не стоять в грязном и жарком месте и напрягать извилины.
    Как я понял у меня лишние вызовы "t1;", которые по-хорошему можно все убрать. Я прав?

  2. #12
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Тупо (и глупо ) и надежно.
    Надёжно? Когда таймер вызывают три раза подряд, эпитет "надёжно" должен быть последним в списке, потому что это явный признак неуверенности и bug driven development. От такого кода жди удар в спину в любой момент.

    С таймерами и вообще любыми ФБ в ST всё очень просто: надо не вызывать блок в условиях, а условия передавать блоку. t1(IN := ACTIV AND P16 и т.д.). Вот из одного нашего проекта код:
    Код:
    RegenTimer(IN := RegenEnabled AND NOT RegenTimer.Q AND NOT RegenFilling AND NOT lvl1);
    RegenTrig(clk := RegenEnabled);
    RegenFilling := RegenEnabled AND (RegenFilling (*already*) OR NOT (*even*) lvl2 OR RegenTrig.Q OR RegenTimer.Q OR dtt1 >= 30) AND NOT lvl1 (*yet*);
    FillEnd(clk := RegenFilling);
    
    IF RegenFilling THEN (* Держать конфигурацию заполнения *)
        k5 := TRUE;
        k6 := ik5;
        npp1 := ik6;
        k10 := FALSE;
    ELSIF FillEnd.Q THEN (* Отменить конфигурацию заполнения *)
        k5 := k6 := npp1 := FALSE;
    END_IF
    Все таймеры и триггеры вызываются по одному разу, вне IF'ов, а сами IF'ы имеют единственный уровень вложенности. Условия реализованы через AND/OR/NOT. И это _весь_ код, который управляет заполнением испарителя не самой простой установки по множеству условий - периодически, по достижении уровня, по температуре, при активации. Причём код запуска это одновременно и код остановки. А IF'ами оно бы на целую страницу растянулось как минимум.

    А тут...
    Код:
    t1;
    ...
    IF KH_IN AND NOT t1.IN THEN
        t1(IN := FALSE);
    Зачем t1(IN := FALSE)? Он уже остановлен к этому моменту. Приходите на пересдачу.
    Как я понял у меня лишние вызовы "t1;", которые по-хорошему можно все убрать. Я прав?
    У вас общий стратегический просчёт. Всё вывернуто наизнанку. Под ПЛК так не пишут.
    Последний раз редактировалось Yegor; 18.05.2016 в 18:21.

  3. #13

    По умолчанию

    Очень красивый код. Я сталкивался в Delphi с ситуацией, когда «длинные условия» типа
    Цитата Сообщение от Yegor Посмотреть сообщение
    Вот из одного нашего проекта код:RegenTimer(IN := RegenEnabled AND NOT RegenTimer.Q AND NOT RegenFilling AND NOT lvl1);
    неправильно интерпретировались компилятором. Искренне спасибо всем за помощь.
    Цитата Сообщение от Yegor Посмотреть сообщение
    Зачем t1(IN := FALSE)? Он уже остановлен к этому моменту. Приходите на пересдачу.У вас общий стратегический просчёт. Всё вывернуто наизнанку. Под ПЛК так не пишут.
    Это чтобы не ошибиться. Как правило, нет же готовой блок-схемы алгоритма. Это нормально и нужно, чтобы отчет времени обязательно начался заново, вне зависимости от ошибок в программе.

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

    По умолчанию

    Цитата Сообщение от Faton Посмотреть сообщение
    Очень красивый код. Я сталкивался в Delphi с ситуацией, когда «длинные условия» типа
    неправильно интерпретировались компилятором. Искренне спасибо всем за помощь.
    Это чтобы не ошибиться. Как правило, нет же готовой блок-схемы алгоритма. Это нормально и нужно, чтобы отчет времени обязательно начался заново, вне зависимости от ошибок в программе.
    вот блин уже более чем уверен, что работа Ситникова все же нужна. Ни кто не удивится что у Вас и в дельфях что то не компилируется с таким то подходом к программированию
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

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

    По умолчанию

    Прошу извинить. Пальцы не гнул - реально не было возможности ответить. Мужики все замечательно рассказали.
    сталкивался в Delphi с ситуацией, когда «длинные условия» типа неправильно интерпретировались компилятором
    Вот ни разу. Бывало бился головой об стену, обегал вокруг дома, ходил за пивом - но находил причину и всегда был сам дурак.

  6. #16

    По умолчанию

    Я в делфи пишу программки, которые приборы опрашивают по RS-485 и выводят значения с приборов. Сниффер у меня на делфи. Работает все спасибо говорят, а мне математику отправляют учить.capzap, может подскажите мне где могу научиться красивый код в ST языке писать? Возьмете меня в ученики на добровольных началах?

  7. #17
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Я в делфи пишу программки, которые приборы опрашивают по RS-485 и выводят значения с приборов. Сниффер у меня на делфи. Работает все спасибо говорят, а мне математику отправляют учить.
    Покажите код.

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

    По умолчанию

    не уверен что для написания кода нужна красота, берите за основу обучения библиотеку на oscat.de
    мне еще не понятно про математику, Вы даже с ехидничать толком не можете
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

  9. #19

    По умолчанию

    Yegor, пример моего кода в делфи
    на форум1.jpg
    на форум2.jpg
    capzap, спасибо, вы про этот документ: 90-oscat-basic-docu-english.pdf

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

    По умолчанию

    может и это, вобще я говорил про исходный код в библиотеках базовой, для сети и для готовых процессов

    а по поводу скрина, я правильно понял что трим Вам не подходит? Просто примера самой строки нет
    Изображения Изображения
    • Тип файла: png owen.png (30.6 Кб, Просмотров: 47)
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

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

Страница 2 из 8 ПерваяПервая 1234 ... ПоследняяПоследняя

Похожие темы

  1. Функциональный блок PID
    от Hemann в разделе Программируемые реле
    Ответов: 78
    Последнее сообщение: 04.05.2017, 08:57
  2. LD + функциональный блок
    от дрю в разделе ПЛК1хх
    Ответов: 2
    Последнее сообщение: 26.04.2014, 09:47
  3. Функциональный блок для МЭ110-224.1М
    от rustam_m в разделе ПЛК3хх
    Ответов: 10
    Последнее сообщение: 10.03.2013, 20:07
  4. Пользовательский функциональный блок
    от fill-forty в разделе ПЛК1хх
    Ответов: 6
    Последнее сообщение: 17.08.2009, 09:49

Ваши права

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