Страница 1 из 5 123 ... ПоследняяПоследняя
Показано с 1 по 10 из 48

Тема: Многопоточность

  1. #1
    Пользователь
    Регистрация
    09.08.2013
    Адрес
    Башкортостан
    Сообщений
    234

    По умолчанию Многопоточность

    Существует ли возможность запуска одновременно нескольких потоков на ПЛК (многозадачность)?
    Как это реализуется в CodeSys?

    Предположим есть ряд несвязанных задач. Каждая задача опрашивает свою группу входных сигналов и управляет своими выходами.

    Если из одной задачи нужно передать данные в другую?
    Последний раз редактировалось Smith2007; 14.08.2013 в 09:26.

  2. #2

    По умолчанию

    МНогопоточность\читай многозадачность - вообще вещь условная.
    Особенно на одноядерных процессорах .
    То, что Вас интересует - в наших контроллерах поддержана функция многозадачности.
    Вы можете отказаться от PLC_PRG, и использовать Конфигуратор задач (Task Configurations).
    Примеры есть на форуме. Лично делал.
    Так же есть возможность делать подпрограммы, и вызывать их в основной программе.
    Так же есть примеры в разделе примеров. Тоже делал лично.

    Если говорить по сути - то используется псевдомногозадачность, с учетом приоритета подпрограммы, последней вызываемой подпрограммы и прерываний.

  3. #3

    По умолчанию

    Все зависит от типа CoDeSys-а. В CoDeSys 2.3 кооперативная многозадачность, в 3-м - вытясняющая.
    Тролль-наседка, добрый, нежный и ласковый

  4. #4
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Есть на ПЛК поточная многозадачность, но в отличие от ПК она там всего лишь костыль. Вся ваша программа будет исполняться от начала и до конца сотни раз в секунду — просто пишите свои задачи в разных подпрограммах, вызывайте эти подпрограммы в каком угодно порядке из главной PLC_PRG и считайте, что они работают одновременно как будто в разных потоках. Вопрос синхронизации в правильно написанной проге отпадёт, т.к. технически вы остаётесь в одном потоке.

    Другими словами, на ПЛК многозадачность не поточная. В подпрограмме prog1 вы пишете out1 := in1, в пп prog2 пишете out2 := in2 + in3, в PLC_PRG пишете prog1(); prog2(); и вуаля — prog1 и prog2 выполняются одновременно.
    Последний раз редактировалось Yegor; 14.08.2013 в 11:51.

  5. #5
    Пользователь
    Регистрация
    09.08.2013
    Адрес
    Башкортостан
    Сообщений
    234

    По умолчанию

    Предположу, что на контроллерах с линухом дела обстоят иначе, а именно - "вытесняющая" многозадачность.
    Впрочем как написал Егор, можно и последовательно.

  6. #6
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    позабавили своими рассуждениями. купите два плк и будет у Вас проект на двухядерном процессоре
    плк с линуксом с мин.циклом 20 мс останутся далеко позади, если выполнять последовательно все задачи на том же плк100 с циклом в 1-2 мс

  7. #7
    Пользователь
    Регистрация
    28.08.2008
    Адрес
    23..93..123
    Сообщений
    1,671

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    Есть на ПЛК поточная многозадачность, но в отличие от ПК она там всего лишь костыль. Вся ваша программа будет исполняться от начала и до конца сотни раз в секунду — просто пишите свои задачи в разных подпрограммах, вызывайте эти подпрограммы в каком угодно порядке из главной PLC_PRG и считайте, что они работают одновременно как будто в разных потоках. Вопрос синхронизации в правильно написанной проге отпадёт, т.к. технически вы остаётесь в одном потоке.

    Другими словами, на ПЛК многозадачность не поточная. В подпрограмме prog1 вы пишете out1 := in1, в пп prog2 пишете out2 := in2 + in3, в PLC_PRG пишете prog1(); prog2(); и вуаля — prog1 и prog2 выполняются одновременно.
    Выполнятся будет по очереди порядка записи вызовов. Актуальными будут значения , обработанные в последнем вызове. Этим можно неплохо пользоватся .
    Последний раз редактировалось Sergey666; 14.08.2013 в 15:43.

  8. #8
    Пользователь
    Регистрация
    13.10.2011
    Адрес
    Златоуст
    Сообщений
    1,021

    По умолчанию

    Выполнятся будет по очереди порядка записи вызовов.
    При независимых наборах переменных порядок исполнения внутри цикла не имеет значения.

  9. #9

    По умолчанию

    Цитата Сообщение от Yegor Посмотреть сообщение
    При независимых наборах переменных порядок исполнения внутри цикла не имеет значения.
    да, но тем не менее, как правильно сказал Sergey666 выполняться подпрограммы будут в порядке написания (слева направо, сверху вниз). А то, что за счет времени цикла человек воспринимает выполнение этих POU как мгновенные говорит лишь о быстроте работы контроллера, а не о многозадачности.

    Николаев Андрей, пользуясь конфигуратором задач я так понимаю процессор будет работать по прерываниям и уделять больше времени тому POU у которого приоритет выше? Просто цикл получится рваный(в одном цикле процессора выполнили чуть-чуть одного POU, в другом чуть-чуть второго)? В данном случае удается ли сократить время цикла ПЛК(затрачиваемое на выполнение всего проекта)? Мне кажется что нет, но может я не прав? Удается лишь создать иллюзию многопоточности и более ровное выполнение независимых частей программы.
    Последний раз редактировалось S.A.D.; 15.08.2013 в 11:07.
    Чтобы понять рекурсию нужно понять рекурсию

  10. #10

    По умолчанию

    Ну я таки рекомендовал бы посмотреть этот раздел.
    Если в кратце - есть несколько типов вызовов программ. Именно программ - тут они уже не подпрограммы. Хотя обмениваться переменными вполне себе могут.
    Так вот их 3 основных:
    1. В свободное время. Это когда у ПЛК есть время - тогда и выполнит один раз.
    2. По событию. Например замкнулся вход, и я один раз выполняю программу, которая по замыканию данного входа что-то обсчитает\включит\выключит.
    3. По таймеру. Это когда каждая программа имеет свой приоритет и частоту вызова. Например отслеживать концевики или перепадник дискретный надо крайне часто, ну скажем раз в 10 мс. А вот программу, в которой обсчитываются ПИД регуляторы вызывать чаще чем раз в 100-300 мс и смысла никакого нет, по большому счету...

Страница 1 из 5 123 ... ПоследняяПоследняя

Ваши права

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