Показано с 1 по 10 из 4459

Тема: разные вопросы новичка

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Вот вариант с суточным расписанием из макс. 10 интервалов включенного состояния
    В начале некоторые соглашения
    Время включения и время выключения для каждого интервала будем задавать с экрана ПР в виде целых чисел типа
    1235 для времени 12:35
    1841 для времени 18:41
    это упростит задачу ввода с экрана ПР
    Захват-01.png

    Да и количество переменных для расписания будет меньше
    Захват-02.png

    Включением выключением будет заниматься функция на ST
    Код:
    function Scheduler: bool; // Интервальный суточный таймер 
    //(c) Petera для форума ОВЕН
        var_input //объявление входных переменных
            Enbl: bool;     //Разрешение работы функции
            curHH: udint;   //Текущее время - часы
            curMM: udint;   //Текущее время - минуты
            //Далее расписание только интервалы включенного состояния
            //Формат времени вкл/выкл в виде 1230 - для 12:30 чч:мм
            TODon1: udint;
            TODoff1: udint;
            TODon2: udint;
            TODoff2: udint;
            TODon3: udint;
            TODoff3: udint;
            TODon4: udint;
            TODoff4: udint;
            TODon5: udint;
            TODoff5: udint;
            TODon6: udint;
            TODoff6: udint;
            TODon7: udint;
            TODoff7: udint;
            TODon8: udint;
            TODoff8: udint;
            TODon9: udint;
            TODoff9: udint;
            TODon10: udint;
            TODoff10: udint;
        end_var
        
        var //объявление локальных переменных
            Schedule: array [0..9] of udint; // Для упакованного расписание
            curTOD: udint;  //текущее время в виде 1230 - для 12:30 чч:мм
            i: udint;
            tmp_on: udint;
            tmp_off: udint;
        end_var
        if not Enbl then Scheduler := false;
        else
             curTOD := curHH * 100 + curMM; //текущее время в виде 1230 - для 12:30 чч:мм
             //Т.к. двухмерные массивы не поддерживаются
             //упаковываем интервалы в одномерный массив
             //получаем формат времени вкл - выкл в виде 12301445 - для вкл в 12:30 и выкл в 14:45
            Schedule[0] :=TODon1 *10000 + TODoff1;
            Schedule[1] :=TODon2 *10000 + TODoff2;
            Schedule[2] :=TODon3 *10000 + TODoff3;
            Schedule[3] :=TODon4 *10000 + TODoff4;
            Schedule[4] :=TODon5 *10000 + TODoff5;
            Schedule[5] :=TODon6 *10000 + TODoff6;
            Schedule[6] :=TODon7 *10000 + TODoff7;
            Schedule[7] :=TODon8 *10000 + TODoff8;
            Schedule[8] :=TODon9 *10000 + TODoff9;
            Schedule[9] :=TODon10 *10000 + TODoff10;
            Scheduler := false;
            //ищем попадание текущего времени в интервалы расписания
            for i := 0 to  9 do
                tmp_on := Schedule[i] / 10000;
                tmp_off := Schedule[i] mod 10000;
                if tmp_on < tmp_off then
                    if curTOD >= tmp_on and curTOD <= tmp_off then
                        Scheduler := true;
    //                   exit;
                    end_if
               end_if
           end_for       
        end_if    
    end_function
    Захват-03.png

    Как видно - интервалы могут быть не отсортированными, т.е. с экрана можно вводить или редактировать в любом порядке
    даже могут быть задействованы не все 10.
    В процессе работы для исключения интервала из работы можно просто сделать начало = концу или сделать начало = конец = 0

    ЗЫ.
    Количество интервалов можно увеличить добавляя необходимое кол. входных переменных TODon и TODoff и добавив шагов в цикл for i := 0 to 9
    Добрый день. Как-то не очень точно работает функция "Scheduler", включение по расписанию включается почно по времени, а выключение по расписанию почему-то спустя 1 минуту:
    Расписание_1.PNG
    Расписание_2.PNG
    Расписание_3.PNG
    Хотя должно выключаться точно по указанному времени, может я где-то ошибся?
    Вложения Вложения

  2. #2
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    4,108

    По умолчанию

    Цитата Сообщение от Pvalp Посмотреть сообщение
    Добрый день. Как-то не очень точно работает функция "Scheduler", включение по расписанию включается почно по времени, а выключение по расписанию почему-то спустя 1 минуту:
    Расписание_1.PNG
    Расписание_2.PNG
    Расписание_3.PNG
    Хотя должно выключаться точно по указанному времени, может я где-то ошибся?
    Думаю, что дело в строчке
    if curTOD >= tmp_on and curTOD <= tmp_off then
    нужно исправить на
    if curTOD >= tmp_on and curTOD < tmp_off then
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Мой канал на РУТУБЕ
    https://rutube.ru/channel/23641433/
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  3. #3

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    Думаю, что дело в строчке
    if curTOD >= tmp_on and curTOD <= tmp_off then
    нужно исправить на
    if curTOD >= tmp_on and curTOD < tmp_off then
    Да, действительно, подправил строку в функции, теперь работает правильно.
    Спасибо.

Похожие темы

  1. ПЛК 110 - Вопросы новичка?
    от di-s в разделе ПЛК1хх
    Ответов: 21
    Последнее сообщение: 15.04.2025, 16:38
  2. Вопросы новичка!!!
    от sau в разделе ПЛК1хх
    Ответов: 42
    Последнее сообщение: 02.05.2022, 19:57
  3. Вопросы новичка по MasterScada
    от MrNobody в разделе Master SCADA 3
    Ответов: 4
    Последнее сообщение: 04.09.2014, 14:39
  4. Вопросы полного новичка
    от Korion в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 09.02.2010, 10:08
  5. Вопросы новичка по ПЛК
    от Ollegator в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 07.07.2009, 09:29

Ваши права

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