Страница 265 из 1043 ПерваяПервая ... 165215255263264265266267275315365765 ... ПоследняяПоследняя
Показано с 2,641 по 2,650 из 10426

Тема: ВОПРОС-ОТВЕТ (отвечаем на простые вопросы от новичков)

  1. #2641
    Пользователь
    Регистрация
    12.03.2014
    Адрес
    Тверь
    Сообщений
    8

    По умолчанию

    Спасибо!!!

  2. #2642
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,649

    По умолчанию

    Yegor действительно умножать часы на 100 вместо привычных 60 оригинально, получаем как бы привычный вид времени в программе.
    Валенок да, очень неудобно в SisLibTime с Воскресеньем, надо оскатовскую проверить, может там лучше будет, пока не смотрел. LimitAlarm тоже смотрел, отлично подходит когда интервал один, уже готовое решение.
    amn спасибо, тоже гляну. В вашем примере явно лажа, сравнивать секунды с секундами нет смысла, когда о них и речи нет.

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

    По умолчанию

    melky, там вроде минуты, а не секунды.

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

    По умолчанию

    Цитата Сообщение от melky Посмотреть сообщение
    ..LimitAlarm тоже смотрел, отлично подходит когда интервал один, уже готовое решение.
    Чесно говоря чуток шутил ))))
    Отличное.. Вы же нормально воспримите диапазон типа 23-00 .. 1-00. А оно ? Лучше уж заточите свою функцию например под TOD. Не менее наглядно.
    Когда один.. Ну массив с циклом прилепить
    Воскресенье .. Уйти на маски
    Например:

    Код:
    program clock
    var
     std : systemtimedate;
     now : tod;
    
    ..//получили время в std
    now := dword_to_tod(  ((std.hour*dword#60+std.minute)*60+std.second)*1000  );
    
    
    
    fb  period
    var_input
      t0,t1:tod; 
      maskweek:byte; //маска с очеловеченым видом типа 2#11111_00  для пн..вск
    var_output
     q : bool;
    var_const
     w : array[0..6] of byte := 1,64,32,16,8,4,2;
    
    q := (w[clock.std.dayofweek] and maskweek) <> 0;
    q := q and sel(t0 >= t1, clock.now >= t0 and clock.now =< t1, clock.now >= t0 or clock.now =< t1);
    
    
    
    plc_prg  (?) 
    const
       N : word := ..
    var
       ok : bool;
       is : array[1..N] of period :=
                (t0 := tod#6:30,  t1 := tod#8:30, maskweek := 2#11111_00),
                (t0 := tod#18:30,  t1 := tod#23:59:59, maskweek := 2#11111_00);
    
    clock();
    ok := false;
    for i:=1 to N do
      is[i](q=>ok);
      if ok then exit; end_if
    end_for
    ..

    PS
    Пардон. Переводить в CFC - не очень хочется

  5. #2645
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,649

    По умолчанию

    Валенок а для меня ST полутемный лес тут в нескольких строчках разбираться и разбираться.
    amn out := datetime.Second >= after AND datetime.Second < before; - ну и где тут минуты ? да и сам по себе FB странно работает, но это мне надо с нуля его вписать в ПЛК, чтобы понять...

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

    По умолчанию

    melky, вы правы, я не тот файл отправил. Исправляюсь.

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

    По умолчанию

    amn , значит я правильно сообразил, как ваш FB модернизировать , жалко только, что без контроллера нельзя проверить. Но самое интересное, что фактически это работает точно так же, как и LIMITALARM, только все обработки со временем внутри FB. Хотя может оно и лучше.
    Вариант Валенка мне менее понятен, разбираться надо, не все мне там доступно для понимания с наскока.

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

    По умолчанию

    Вообще-то это творение Егора, а я его применил к вашему случаю. Валенок вообще молодец, додумался, как облегчить ввод данных. Там сложного ничего нет для понимания, просто часы он выделил в целую часть, а минуты в дробную. Выкладываю версию с идеей Валенка.
    Вложение 12751

  9. #2649
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    10,649

    По умолчанию

    amn у CodeSys действуют правила математики ?
    Часы + Минуты / 100.0 или (часы + Минуты)/100.0 - что из этого правильно ? или все выполняется строго последовательно ?

    А вообще с точки зрения программирования, если ставить два и более FB interval, на сколько увеличивается цикл программы, учитывая, что постоянно вызывается CurTimeEx ? в некоторой степени выглядит все красиво, но куча повторов.

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

    По умолчанию

    Правила математики дейстуют как это и положено. А вот по поводу нескольких вызовов ФБ вы правы, стоит вынести CurTimeEx в самостоятельный отдельный блок, так как два блока могут не заработать вместе. Тогда наш ФБ будет состоять из 1 строчки.

    Во вложении два блока один из них get_time нужен для второго. Его просто вставить и ничего к нему подключать не надо.

Страница 265 из 1043 ПерваяПервая ... 165215255263264265266267275315365765 ... ПоследняяПоследняя

Метки этой темы

Ваши права

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