PDA

Просмотр полной версии : многозадачность в плк63



pt200
15.09.2010, 00:24
как устроенна?
каждая нитка работает со своей локальной копией переменной или все общее( если во время работы одной нитки а вклинится другая б, покрутит какие то глобальные переменные, то оставшийся кусок нитки а будет дорабатывать уже с новыми значениями)?
а если с локальной копией, то как потом система разруливает результаты работы двух ниток, которые ее поменяли?

P.s. кстати существует ли какая нибудь стандартная методика взаимодействия ниток?

lara197a
15.09.2010, 09:45
вообще на плк другой принцип обработки программы.
программа крутится циклично:
-проверка состояния входов
- выполнение программы сверзу вниз в порядке в каком она написана
- запись значений выходов
если используются прерывания, то после выполнения подпрограммы, плк вернется к месту прерывания.
исключением составлет случай использования менеджера задач. в этом случае вы произвольно определяете порядок их выполнения
однако плк все равно работает по описаному выше принципу.

pt200
15.09.2010, 10:05
...исключением составлет случай использования менеджера задач. в этом случае вы произвольно определяете порядок их выполнения
однако плк все равно работает по описаному выше принципу.
т.е. так


PLC_PRG() (*невидимая функция*)
{
MY_TASK1();
MY_TASK2();
MY_TASK3();
MY_TASK4();
}



Что вроде где то что то видел про вытесняющую многозадачность в CoDeSys, по этому и спрашиваю.

P.S. Кстати а прерывания( мои), callbackи как работают в этом плане?

Малышев Олег
15.09.2010, 10:14
подсказка - ниток в плк63 нет. равно как и иголок. равно как и копий для нитки. почитайте в доке про экземпляры Pou.
задачи запускаются по очереди в порядке приоритетов. для того что бы не боятся вышеуказанных вещей см проект-опции-генератор кода-проверять автоматически (ставьте все опции)

Малышев Олег
15.09.2010, 10:16
Я так понимаю у вас ПЛК63. Callback есть только на ПЛК1х0. Он работает как прерывание.

Филоненко Владислав
15.09.2010, 10:32
суммируя, на всех плк сейчас корпоративная многозадачность.
однако в плк11х при использовании события таймера можно для 1 (одной) задачи сделать вытесняющую многозадачность.

P.s. адресное пространство единое, виртуальная память не используется.