Не это точно не все, если будет больше одной задачи в Task крутиться прийдеться семафорить доступ к общим переменным ибо это уже будет многозадачное приложение и наворотить можно в случае “ивсе” такого что потом не разберешь ничего.
Первоначально опубликовано Mixer
Пишешь свой POU в котором делаешь все, что нужно. Далее определяешь его в Task configuration и ставишь время T#8ms. Все.
Пробовал уже так... Сделал два таска, один свободный по времени, а другой через каждые 8мс вызывается, но если приоритеты ставить одинаковые, то вызов происходит не каждые 8мс, а гораздо больше... А если разные приоритеты, то тот таск у которого период 8мс сжирает все время, второй таск не вызывается...
Это каким образом вы зарегистрировали столь недостойное поведение в многозадачной программе позвольте полюбопытствовать?
Первоначально опубликовано Dismay
Это каким образом вы зарегистрировали столь недостойное поведение в многозадачной программе позвольте полюбопытствовать?
Создал два таска, у одного период 8мс и приоритет 0, у другого период не указан и приоритет 1...
Ну это я понял, а почему Вы решили что задача вызываеться чаще чем 8 мс или не вызываеться вообще вот собственно что меня заинтересовало?
Первоначально опубликовано waldius
Первоначально опубликовано Dismay
Это каким образом вы зарегистрировали столь недостойное поведение в многозадачной программе позвольте полюбопытствовать?
Создал два таска, у одного период 8мс и приоритет 0, у другого период не указан и приоритет 1...
Поставил точки останова в обоих подпрограммах и останов происходит только в таске с приоритетом 0, может конечно если подождать долго то наконец и во второй зайдет
А если приоритеты одинаковые поставить, то видно что срабатывание происходит реже чем 8мс, я там счетчик инкрементирую, и в визуализации видно что частота около 1Гц...
Ну незнаю где там Вы поставили точки останова, но с многозадачностью в CoDeSys все достаточно ровно однако. Смотрите Task в онлайне и увидите что все POU вызываються...
другое дело что до точки останова по ветвлениям может не доходить ваш алгоритм просто вот и нет останова.
Точки останова работают только в тех POU которые запускаютя задачей с меткой Debug. Посмотреть/изменить метку можно в диспетчере задач в режиме он-лайн.
Первоначально опубликовано waldius
...Требуется чтобы определенное событие проиходило каждые 8мс, как это сделать с помощью таймеров кодесиса?
Пара вариантов без использования многозадачности: 1) На FBD можно генератор импульсов на 8мс поставить, после него детектор фронта и далее что надо.
2) На SFC делаю простейший POU . Он состоит из начального шага и еще одного, в конце переход на начальный шаг. Во всех условиях переходов ставлю TRUE. Далее в атрибутах шага ставлю минимальное время 8мс. В него вставляю начальное действие на любом языке и в нем делаю что надо.
Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме