Страница 1137 из 1177 ПерваяПервая ... 137637103710871127113511361137113811391147 ... ПоследняяПоследняя
Показано с 11,361 по 11,370 из 11762

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

  1. #11361

    По умолчанию

    Выкинуть все задачи и поставить минимальное время цикла, 1-5 мс, тогда погрешности отсчёта времени будут минимальными.
    200 мс отсчитывать таймером, как уже сказали.
    Последний раз редактировалось kondor3000; 18.03.2025 в 10:52.

  2. #11362

    По умолчанию

    слишком заумно кто-то сделал
    никакого смысла гонять две задачи лично я не вижу, эта задумка со связанными программами чревата проблемами изначально и дальнейшая "тонкая" настройка всё равно может не привести к результату
    что мешает сделать в одном цикле?

  3. #11363

    По умолчанию

    Цитата Сообщение от Александр Посмотреть сообщение
    Добрый день!
    Требуется мнение компетентных людей по вопросу организации задач ПЛК (Codesys 2.3). В существующей версии программы есть две задачи, работающие циклически, с интервалом 200 мсек каждая (задача №1 отвечает за получение технологических данных и обмен с подчиненными устройствами по Modbus, задача №2 производит расчеты и определяет состояния для подчиненных устройств). Есть предположение что такая организация задач создает неточности в управлении исполнительным механизмом, управляемым по времени его хода. Коротко говоря, контроль времени и работы реализован через сравнение времени активности шага SFC и заданного времени хода. Так как на очередном цикле, при сравнении этих времен, может быть так, что время активности шага на несколько мсек меньше заданного, то соответственно следующая проверка будет в следующем цикле, то есть через 200 мсек. То есть реальное время хода механизма может быть больше на 200 мсек. При заданном времени хода, допустим 2 сек, погрешность в 200 мсек это 10%. Причем это будет накапливающаяся погрешность, на каждом такте управления.
    Возможным решением кажется иная организация задач. Задаче №1 устанавливается меньший приоритет, и тип выполнения "свободная". Задача №2 имеет более высокий приоритет, и тип "по событию". В конце выполнения задачи №1 по триггеру запускается выполнение задачи №2, по завершению второй задачи, выполняется первая. Лишних задержек нет, конфликт задач исключен вроде как. Один из незначительных недостатков, как я понимаю, в том, что при запуске выполнения задачи №2, выполнение задачи №1 прерывается, и после выполнения задачи №2, происходит завершение выполнения задачи№1 (по сути просто возврат управления системе ПЛК, то есть это дополнительный цикл, но с очень малым временем цикла).
    Есть ли какие-то недостатки в таком решении?
    Программу обмена по модбас вызываете в задаче с типом "Свободная" и с установленным приоритетом 15.
    Основную программу вызываете в задаче с типом "Циклическая", с установленным приоритетом менее 15 и минимальным значением "Интервал", которое будет соблюдаться (начните например с "t#50ms").
    Отслеживать цикл можете там-же - но уже при подключенном ПЛК

  4. #11364

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    Почему это не может быть одна задача, внутри которой будет крутиться таймер, который каждые 200 мсек дёргает нужный код?
    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Выкинуть все задачи и поставить минимальное время цикла, 1-5 мс, тогда погрешности отсчёта времени будут минимальными.
    200 мс отсчитывать таймером, как уже сказали.
    Цитата Сообщение от In_Da_Cher_A Посмотреть сообщение
    слишком заумно кто-то сделал
    никакого смысла гонять две задачи лично я не вижу,
    что мешает сделать в одном цикле?
    Так как я начинающий пользователь Codesys, а программа сделана сильно более опытными чем я людьми, допустил что есть какой-то высший смысл в этом делении на задачи с интервалом в 200 мсек. При этом там в задаче №2 присоединено 10 штук PRG (управление однотипными 10-ью участками), каждая из которых огромная портянка с вложениями. Идея разместить в одну задачу в списке возможных решений есть, но увлекся вариантом с сохранением двух задач ))) Ну и пока не понимаю всех следствий объединения в одну задачу. На первый взгляд ничего не мешает, буду пробовать.
    200 мсек это не требования к программе, а побочный эффект интервала заданного в типе задач. Требуемое поведение: программа рассчитывает необходимое время хода ИМ, потом это контролируется по времени активности шага SFC, отвечающего за присвоение нужных значений переменным для дискретных выходов.
    Последний раз редактировалось Александр; 18.03.2025 в 11:52.

  5. #11365

    По умолчанию

    Цитата Сообщение от Александр Посмотреть сообщение
    Ну и пока не понимаю всех следствий объединения в одну задачу.
    В частности, не понимаю как происходит обмен по Modbus в программе. Процесс выполнения будет дожидаться ответа данных от подчиненных устройств, до перехода к следующим инструкциям, или это как-то асинхронно выполняется

  6. #11366

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Программу обмена по модбас вызываете в задаче с типом "Свободная" и с установленным приоритетом 15.
    Основную программу вызываете в задаче с типом "Циклическая", с установленным приоритетом менее 15 и минимальным значением "Интервал", которое будет соблюдаться (начните например с "t#50ms").
    Отслеживать цикл можете там-же - но уже при подключенном ПЛК
    Да, по смыслу это логично, но задача, как я её вижу, уйти вообще от интервалов, создающих погрешность при имеющемся алгоритме управления.

  7. #11367

    По умолчанию

    Александр Обмен по Modbus происходит на уровне ядра, если всё конфигурируется через дерево Конфигурации ПЛК.
    Автономно, сам по себе. Без разницы, как работает в этот момент программа.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net | Канал в ТГ @CsCsNetLab

  8. #11368

    По умолчанию

    Цитата Сообщение от Александр Посмотреть сообщение
    Да, по смыслу это логично, но задача, как я её вижу, уйти вообще от интервалов, создающих погрешность при имеющемся алгоритме управления.
    Можете создать одну задачу со свободным вызовом и добавить в неё все вызовы всех своих программ - это будет аналогично тому, если б вы вызывали их друг за другом из PLC_PRG без использования диспетчера задач

  9. #11369

    По умолчанию

    Цитата Сообщение от Cs-Cs Посмотреть сообщение
    Александр Обмен по Modbus происходит на уровне ядра, если всё конфигурируется через дерево Конфигурации ПЛК.
    Автономно, сам по себе. Без разницы, как работает в этот момент программа.
    Как понимаю, если сконфигурировано через Конфигурацию ПЛК, то то что на чтение идет в начале цикла, то что на запись в конце цикла. В данном же случае, запуск обмена по Modbus вызывается в PRG задачи №1, через ФБ библиотеки EthernetModbusMaster(Wago), в процессе выполнения задачи №1. Представляется что идет ожидание результата Ethernet-запроса. И никакой асинхронности там нет. Но так ли это - непонятно.
    Последний раз редактировалось Александр; 19.03.2025 в 07:21.

  10. #11370

    По умолчанию

    Цитата Сообщение от Александр Посмотреть сообщение
    Как понимаю, если сконфигурировано через Конфигурацию ПЛК, то то что на чтение идет в начале цикла, то что на запись в конце цикла. В данном же случае, запуск обмена по Modbus вызывается в PRG задачи №1, через ФБ библиотеки EthernetModbusMaster(Wago), в процессе выполнения задачи №1. Представляется что идет ожидание результата Ethernet-запроса. И никакой асинхронности там нет. Но так ли это - непонятно.
    Цикл ПЛК - 1 мс, запрос ответ по Модбас не менее 25-30 мс. За время одного запроса, ПЛК выполнит 25-30 раз программу целиком.

Страница 1137 из 1177 ПерваяПервая ... 137637103710871127113511361137113811391147 ... ПоследняяПоследняя

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

Ваши права

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