Выкинуть все задачи и поставить минимальное время цикла, 1-5 мс, тогда погрешности отсчёта времени будут минимальными.
200 мс отсчитывать таймером, как уже сказали.
Вид для печати
Выкинуть все задачи и поставить минимальное время цикла, 1-5 мс, тогда погрешности отсчёта времени будут минимальными.
200 мс отсчитывать таймером, как уже сказали.
слишком заумно кто-то сделал
никакого смысла гонять две задачи лично я не вижу, эта задумка со связанными программами чревата проблемами изначально и дальнейшая "тонкая" настройка всё равно может не привести к результату
что мешает сделать в одном цикле?
Программу обмена по модбас вызываете в задаче с типом "Свободная" и с установленным приоритетом 15.
Основную программу вызываете в задаче с типом "Циклическая", с установленным приоритетом менее 15 и минимальным значением "Интервал", которое будет соблюдаться (начните например с "t#50ms").
Отслеживать цикл можете там-же - но уже при подключенном ПЛК
Так как я начинающий пользователь Codesys, а программа сделана сильно более опытными чем я людьми, допустил что есть какой-то высший смысл в этом делении на задачи с интервалом в 200 мсек. При этом там в задаче №2 присоединено 10 штук PRG (управление однотипными 10-ью участками), каждая из которых огромная портянка с вложениями. Идея разместить в одну задачу в списке возможных решений есть, но увлекся вариантом с сохранением двух задач ))) Ну и пока не понимаю всех следствий объединения в одну задачу. На первый взгляд ничего не мешает, буду пробовать.
200 мсек это не требования к программе, а побочный эффект интервала заданного в типе задач. Требуемое поведение: программа рассчитывает необходимое время хода ИМ, потом это контролируется по времени активности шага SFC, отвечающего за присвоение нужных значений переменным для дискретных выходов.
Александр Обмен по Modbus происходит на уровне ядра, если всё конфигурируется через дерево Конфигурации ПЛК.
Автономно, сам по себе. Без разницы, как работает в этот момент программа.
Как понимаю, если сконфигурировано через Конфигурацию ПЛК, то то что на чтение идет в начале цикла, то что на запись в конце цикла. В данном же случае, запуск обмена по Modbus вызывается в PRG задачи №1, через ФБ библиотеки EthernetModbusMaster(Wago), в процессе выполнения задачи №1. Представляется что идет ожидание результата Ethernet-запроса. И никакой асинхронности там нет. Но так ли это - непонятно.