Страница 397 из 413 ПерваяПервая ... 297347387395396397398399407 ... ПоследняяПоследняя
Показано с 3,961 по 3,970 из 4885

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

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь
    Регистрация
    09.12.2013
    Адрес
    Ставрополь
    Сообщений
    2,160

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Только из not Stop, not надо убрать, иначе он при включённом стопе работает.
    В принципе, так и задумано было. Не удачно вход обозвал

  2. #2

    По умолчанию

    А если запихнуть и уставки таймера и состояние выходов в массив?
    Код:
    function_block Washing
        
        var_input
            OnOff : bool;   // Запуск/остановка программы
        end_var
        
        var_output 
            K1, K2, K3, K4, K5, K6, K7, K8 : bool;  // Выхода
            t1, t2 : udint;                         // Прошедшие минуты и секунды с момента старта
        end_var
        
        var 
            tb, i : udint;      // Время старта и номер режима
            rb : SYS.RTRIG;     // Фиксатор старта
            
            Mode : udint;               // Текущий режим
            // Упаковка биты 15-8 - состояние выходов Kx, 7-2 - секунда, 1-0 - минута
            Modes : array [1..40] of udint :=
                [256, 34600, 316, 34600, 356, 1400, 396, 160, 39080, 40136,
                4316, 38913, 39977, 4157, 38993, 40037, 5241, 4237, 161, 34729,
                477, 34562, 1322, 318, 82, 57434, 58490, 16546, 57526, 58590,
                16407, 57387, 58451, 17511, 16507, 143, 33687, 34743, 1483, 479];
        end_var
        
        rb(I:=OnOff);                     // Фиксируем момента старта
        if rb.Q then 
            tb := time_to_udint(get_time()) / 1000;     // Старт программы
        end_if
    
        if OnOff then      // Программа в работе
            t2 := time_to_udint(get_time()) / 1000 - tb;// Прошло времени после старта
            t1 := t2 / 60; t2 := t2 - (t1 * 60);        // в минутах и секундах
            
            if t1 < 4 then
                for i := 1 to 40 do                         // Для каждой строчки
                    Mode := Modes[i];                           // Извлекаем данные
                    if shr(shl(Mode, 30), 30) = t1 then         // Сравним минуты
                        if shr(shl(Mode, 24), 26) = t2 then         // Сравним секунды
                            // Выставим выхода в случае совпадения
                            K1 := Mode.8; K2 := Mode.9; K3 := Mode.10; K4 := Mode.11;
                            K5 := Mode.12; K6 := Mode.13; K7 := Mode.14; K8 := Mode.15;
                            exit;
                        end_if
                    end_if
                end_for
            end_if
        else                // Программа остановлена
            K1 := false; K2 := false; K3 := false; K4 := false; K5 := false; K6 := false; K7 := false; K8 := false;
        end_if
        
    end_function_block
    Последний раз редактировалось EFrol; 22.04.2026 в 07:43.

  3. #3
    Пользователь
    Регистрация
    09.12.2013
    Адрес
    Ставрополь
    Сообщений
    2,160

    По умолчанию

    Цитата Сообщение от EFrol Посмотреть сообщение
    А если запихнуть и уставки таймера и состояние выходов в массив?
    Для экономии памяти и трафика очень даже можно - 24 байта для уставки времени достаточно
    А, вот, каждый раз пробегать по всему массиву - это не рационально

  4. #4

    По умолчанию

    Добрый день! Всем большое спасибо за помощь!
    Так же хотел извиниться если моё обращения показалось наглым, ей Богу не была умысла реализовать проект чужими руками, просто не мог понять с чего начать, как уже писал ранее есть только опыт написания простых проектов на основе логических функций, только только начинаю постигать азы программирования.
    Вот пока за основу взял Ваш Dimensy пример https://owen.ru/forum/showthread.php...l=1#post482777 расшарил макрос до 40 шагов, задал режимы и длительности импульсов, на симуляторе вроде отрабатывает, но я так понимаю это наверное тоже не совсем правильно будет, пока смог разобраться только с этим.
    По использовать языка ST пока не разобрался, буду изучать мат часть.
    По рекомендации In_Da_Cher_A привёл циклограмму в более менее божеский вид
    Вложения Вложения

  5. #5

    По умолчанию

    Цитата Сообщение от Van0lik Посмотреть сообщение
    Добрый день! Всем большое спасибо за помощь!
    Так же хотел извиниться если моё обращения показалось наглым, ей Богу не была умысла реализовать проект чужими руками, просто не мог понять с чего начать, как уже писал ранее есть только опыт написания простых проектов на основе логических функций, только только начинаю постигать азы программирования.
    Вот пока за основу взял Ваш Dimensy пример https://owen.ru/forum/showthread.php...l=1#post482777 расшарил макрос до 40 шагов, задал режимы и длительности импульсов, на симуляторе вроде отрабатывает, но я так понимаю это наверное тоже не совсем правильно будет, пока смог разобраться только с этим.
    По использовать языка ST пока не разобрался, буду изучать мат часть.
    По рекомендации In_Da_Cher_A привёл циклограмму в более менее божеский вид
    ST очень интересная тема, простор для творчества неисчерпаемый

  6. #6
    Пользователь
    Регистрация
    09.12.2013
    Адрес
    Ставрополь
    Сообщений
    2,160

    По умолчанию

    Цитата Сообщение от Van0lik Посмотреть сообщение
    Добрый день! Всем большое спасибо за помощь!
    Нужно еще прозондировать вопрос: что делать если в процессе работы свет моргнет - начинать сначала, продолжать с прерванного шага?

  7. #7

    По умолчанию

    Думаю логично было бы продолжать с прерванного шага

  8. #8
    Пользователь
    Регистрация
    09.12.2013
    Адрес
    Ставрополь
    Сообщений
    2,160

    По умолчанию

    Цитата Сообщение от Van0lik Посмотреть сообщение
    Думаю логично было бы продолжать с прерванного шага
    Тогда в программе отсюда https://owen.ru/forum/showthread.php...l=1#post482777 нужно у счетчика CTN1 установить параметр "Сохранять состояние" в "ДА". В этом случае программа продолжиться с прерванного шага (с начала шага). Если еще надо и время запоминать (т.е. начинать не с начала шага, а с какого-то времени), тогда нужно свой таймер писать

    Я смотрю, у вас там есть кнопка "Пауза" - тоже нужно определиться: пауза - это остановить и потом начать с начала прерванного шага (это просто делается) или после паузы продолжить именно с того времени когда была остановка (тогда свой таймер с паузой писать)
    Последний раз редактировалось Dimensy; 22.04.2026 в 11:07.

  9. #9

    По умолчанию

    Добрый день! Поделитесь макросом чтобы INT раскидать в BOOL. У меня был один но он чтото не раскрываеться на ,,холлсте,, ПР205. Спасибо

  10. #10

    По умолчанию

    А, все, нашелся.

Страница 397 из 413 ПерваяПервая ... 297347387395396397398399407 ... ПоследняяПоследняя

Похожие темы

  1. Вопросы новичка!!!
    от sau в разделе ПЛК1хх
    Ответов: 62
    Последнее сообщение: 27.07.2026, 19:16
  2. ПЛК 110 - Вопросы новичка?
    от di-s в разделе ПЛК1хх
    Ответов: 21
    Последнее сообщение: 15.04.2025, 16:38
  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

Ваши права

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