Size: a a a

2020 May 12

АП

Александр Привалов... in ru_ASUTP
Но стоит убавить у задачи приоритет - она больше не вызывается.
источник

Z

Z-Vladimir in ru_ASUTP
Александр Привалов
Есть кооперативная и вытесняющая многозадачность.
Вы про что?)) в codesys нет разделения на потоки. Только одна задача может выполняться в один и тот же момент времени. Никаких параллельных выполнений не будет
источник

АП

Александр Привалов... in ru_ASUTP
Z-Vladimir
Вы про что?)) в codesys нет разделения на потоки. Только одна задача может выполняться в один и тот же момент времени. Никаких параллельных выполнений не будет
Я ни слова не говорил про многопоточность - речь о многозадачности.
источник

Z

Z-Vladimir in ru_ASUTP
Александр Привалов
Я ни слова не говорил про многопоточность - речь о многозадачности.
Не вытесняющая многозадачность больше относится как раз к таким функциям, как опрос ком порта. Функция которого выполняется условно параллельно выполнению основной программы. А таски в менеджере задач, они однозначные, если допустили в программе очередь из множества задач, то запуск среди них будет с наивысшим приоритетом, либо по очереди, если приоритеты одинаковые
источник

Z

Z-Vladimir in ru_ASUTP
Александр Привалов
Пока у всех задач одинаковый приоритет,все работает,не считая того что вывод внутри PLC_PRG через 232 интерфейс не всегда передает строку до конца.
В таких случаях проще делать не отдельные задачи, а подпрограммы, запуск которых контролируется статусами полученными от функциональных блоков работающими с портами. Это проще и прозрачнее.
источник

АП

Александр Привалов... in ru_ASUTP
Да в том то и суть,что времени CPU - куча, но задачи с меньшим приоритетом тупо не выполняются.
источник

АП

Александр Привалов... in ru_ASUTP
Z-Vladimir
В таких случаях проще делать не отдельные задачи, а подпрограммы, запуск которых контролируется статусами полученными от функциональных блоков работающими с портами. Это проще и прозрачнее.
Не совсем понял,что вы подразумеваете как подпрограммы. Я просто пишу на ST, и все и так очень прозрачно) Только статусы,переменные состояния и триггеры не применимы, поскольку мои задачи,что выполняются по таймеру - должны и вызываться именно с указанными интервалами.
источник

Z

Z-Vladimir in ru_ASUTP
Александр Привалов
Не совсем понял,что вы подразумеваете как подпрограммы. Я просто пишу на ST, и все и так очень прозрачно) Только статусы,переменные состояния и триггеры не применимы, поскольку мои задачи,что выполняются по таймеру - должны и вызываться именно с указанными интервалами.
Отдельную программу, которая запускается не через менеджер, а вызываете ее сами из основной программы, либо добавить действия внутри программы. Т.е. подпрограмму опроса порта сделали в виде задачи, которая выполняется каждые 1000ms, например?
источник

Z

Z-Vladimir in ru_ASUTP
Действия выглядят так
источник

АП

Александр Привалов... in ru_ASUTP
Это какой кодесис?
источник

Z

Z-Vladimir in ru_ASUTP
Александр Привалов
Это какой кодесис?
2.3
источник

АП

Александр Привалов... in ru_ASUTP
Нашел о чем вы говорите,это действия,да, но они мне совсем не нужны,они насколько я знаю и могу прочесть из манов, выполняются только из того POU, которому принадлежат.
источник

M

Marat in ru_ASUTP
Александр Привалов
Что делать,подскажите - бесовщина твориться с этим овном.
"ложки нашлись, но осадочек остался"
источник

АП

Александр Привалов... in ru_ASUTP
Marat
"ложки нашлись, но осадочек остался"
да овен - одна сплошная бесовщина))
ОВЕН - это один из аватаров Сатаны,что тут говорить)
источник

Z

Z-Vladimir in ru_ASUTP
Александр Привалов
Нашел о чем вы говорите,это действия,да, но они мне совсем не нужны,они насколько я знаю и могу прочесть из манов, выполняются только из того POU, которому принадлежат.
Да в том же PRG, больше для удобства структурирования программы. Но ничего не мешает сделать отдельный PRG и вызывать его периодически из основной программы, а не через задачи. Вот к примеру, Вы запихали опрос порта в задачу 500 или 1000мс. Как это будет реагировать на тайм-аут неотвечающего устройства если это время может превышать интервал выполнения задачи? Как обрабатываете статус выполнения функционального блока чтения из порта? Такие функциональные блоки нужно вызывать циклически, пока алгоритм внутри блока не завершится чтением или ошибкой. С использованием задач, выполнение FB чтения из порта тоже приостанавливается на время интервала. Наверняка сейчас боретесь с не стабильной работой с портом и пытаетесь всё как-то синхронизировать между задачами.
источник

M

Marat in ru_ASUTP
Александр Привалов
да овен - одна сплошная бесовщина))
ОВЕН - это один из аватаров Сатаны,что тут говорить)
не соглашусь
вот из-за такого предвзятого отношения к овену Вы и не хотите внимательно искать свои ошибки, т.к. считаете что всегда проблема в овенах
источник

M

Marat in ru_ASUTP
свою ошибку то нашли, но виноват овен
почему? потому что овен виноват
источник

M

Marat in ru_ASUTP
к овену отношения не имею
работал с ними (плк, спк)
да, бывали детские ошибки, особенно в начале выпуска новых линеек, но вроде устраняли
я только за то, чтобы отечественные производители могли составить конкуренцию импортным поставщикам, пусть даже не сразу
источник

АП

Александр Привалов... in ru_ASUTP
Z-Vladimir
Да в том же PRG, больше для удобства структурирования программы. Но ничего не мешает сделать отдельный PRG и вызывать его периодически из основной программы, а не через задачи. Вот к примеру, Вы запихали опрос порта в задачу 500 или 1000мс. Как это будет реагировать на тайм-аут неотвечающего устройства если это время может превышать интервал выполнения задачи? Как обрабатываете статус выполнения функционального блока чтения из порта? Такие функциональные блоки нужно вызывать циклически, пока алгоритм внутри блока не завершится чтением или ошибкой. С использованием задач, выполнение FB чтения из порта тоже приостанавливается на время интервала. Наверняка сейчас боретесь с не стабильной работой с портом и пытаетесь всё как-то синхронизировать между задачами.
У меня в порт летит только отладочный выхлоп,я не читаю из него,поэтому проблему такой нет.Проблема - именно в неправильной работе задач и планировщика , у меня логика не просто так реализована в разных задачах. Я прекрасно понимаю,что могу вызывать любой PRG из любого PRG, но мне это не нужно, это можно с помощью функции или функционального блока описать.У меня задачи как раз таки независимые, основной цикл хоть зависнуть может, но другие задачи параллельно должны работать.
источник

АП

Александр Привалов... in ru_ASUTP
Marat
свою ошибку то нашли, но виноват овен
почему? потому что овен виноват
Ошибку нашел,мои кривые руки) но на данные момент из нерешенных проблем - не работает планирование задач + при использовании модуля modbus master с любым периодом опроса по шине летит мусор со случайными адресами и регистрами.Хорошо что на шине всего один слэйв висит.
источник