CODESYS форум

Добро пожаловать на официальный форум CODESYS
Deutsche Version English version russian version 
Текущее время: Пн апр 24, 2017 8:03 pm

Часовой пояс: UTC+01:00




Начать новую тему  Ответить на тему  [ 13 сообщений ] 
Автор Сообщение
 Заголовок сообщения: "Временные" сложности
СообщениеДобавлено: Сб ноя 17, 2007 5:16 pm 
Не в сети

Зарегистрирован: Вт сен 25, 2007 5:49 pm
Сообщения: 0
Здраствуйте коллеги.
Возникли такие вопросы:

программа написаная на SFC работает медленне чем ее аналоги на ST? Если да то почему?

Если задачу настроить как Cyclic и задать ей времявыполнения, то что будет если задача не успеет не успеет отработать?

_________________
Ищите, да обрящете


Вернуться к началу
 Заголовок сообщения: Re: "Временные" сложности
СообщениеДобавлено: Вс ноя 18, 2007 10:48 am 
Не в сети
Site Admin

Зарегистрирован: Ср июл 20, 2005 2:32 pm
Сообщения: 153
Nekit писал(а):
программа написаная на SFC работает медленне чем ее аналоги на ST? Если да то почему?

Как можно их сравнивать? Программа на ST (и всех языках кроме SFC) при одном ее вызове проскакивает от начала до конца (возможно разыми путями по IF ELSE) и сразу отдает управление. Программа на SFC идет с шага на шаг. Даже если в условии перехода стоит TRUE, то следующий шаг начнет работать только при следующем вызове. Обычно шаги SFC описывают некие состояния, в которых программа стоит некое время (например, пока идет перемещение до концевика и т.п.). Переход с одного шага на другой выполняется строго по рабочим циклам ПЛК (синхронно с обновлением входов/выходов). Так и задумано.

Можно нечто подобное SFC сделать в ST (или на Си). Написать большой CASE по переменной определяющей текущий шаг. Каждая ветка CASE будет как бы шагом. В шаге делать полезную работу и вычислять новое состояние и отдавать управление (по Return). Получится упрощенное подобие SFC. (Такой прием является частью известной Switch технологии программирования.) Тут одновременно активным может быть только один единственный шаг, поэтому его номер можно задать 1 переменной.

Если же начать мерить микросекунды и время переключения шагов, то SFC проиграет другим языкам. Поскольку SFC обязательно имеет исполнитель. Т.е. в недрах системы исполнения есть табличка, где на каждый шаг лежит персональный признак его активности (активными одновременно могут быть много шагов)+ отдельные управляющее переменные для МЭК действий (время выполнения и др. см Классификаторы действий) При вызове SFC программы вызывается исполнитель, который перебирает таблицу и вызывает действия, принадлежащие активным шагам. После этого оцениваются условия переходов, соотв-но изменяется табличка и управление возвращается вызывающей программе.


Nekit писал(а):
Если задачу настроить как Cyclic и задать ей времявыполнения, то что будет если задача не успеет не успеет отработать?

Возможны варианты:
1) если наш ПЛК поддерживает вытесняющую многозадачность (система исполнения CoDeSys CSP32F), то ничего страшного не будет. Задачи с более высоким приоритетом будут спокойно ее прерывать, как им задано.
2) если на задачу поставлен строжевой таймер, то она может быть снята, если работает дольше чем ей положено (возможно зависла).
3) в самых простых ПЛК (не подержано 1, 2) задача будет работать сколько хочет, т.е. при ее зависании зависнет все.
Для конкретного ПЛК его поведение в таком случае легко определить опытным путем (если не сказано в документации).

_________________
_IP_


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 18, 2007 5:09 pm 
Не в сети

Зарегистрирован: Вт сен 25, 2007 5:49 pm
Сообщения: 0
По вопросу 1: да пожалуй вопрос немного некорректен. Правилнее было бы спросить много ли времени забирает непосредственно исполнитель SFC на свою работу? Вопрос возник всвязи со следующей ситуацией: по роду работы приходится писать много драйверов для связи ПЛК с интеллектуальными устройствами. Писать их на ST довольно просто и результат (скорость работы подпрограммы драйвера) удовлетворяет, но нет "читаемости" программы, т.е. другому программисту уже нельзя сходу разобраться в коде программы и чтото поправить если нужно. Язык SFC дает "читаемость" однако нет уверенности что время работы программы на нем будет хоть сколь-нибудь приемлемым.

По вопросу 2:
По варианту 1: получается что выполнение менее приоритетной задачи будет прервано в абсолютно произвольном месте и абсолютно неизвестно какая часть программы выполнена а какая нет.

По варианту 2: при срабатывании таймера задача останавливается вплоть до перезагруза ПЛК или только на текущий цикл?

Заранее спасибо.

_________________
Ищите, да обрящете


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 27, 2007 4:20 pm 
Не в сети
Site Admin

Зарегистрирован: Ср июл 20, 2005 2:32 pm
Сообщения: 153
Nekit писал(а):
…много ли времени забирает непосредственно исполнитель SFC на свою работу?…

Чем больше диаграмма на SFC, тем соответственно больше внутренние таблицы состояний шагов и дольше их разбор. Но в сравнении с типовым временем рабочего цикла ПЛК (задачи, если они определены) – это очень малое время. Если же мы пишем на SFC, то понятно, что переход с шага на шаг в принципе будет происходить только по циклам ПЛК. Например, есть у меня задача с циклом 10 мс, в ней работает SFC программа. Допустим, исполнитель потратил 50мкс, затем за 1мс отработали действия активных шагов. Оставшееся до конца цикла задачи время ничего не делается. Просто выжидается время (или работают другие задачи)! Насколько важно здесь вообще время работы исполнителя? Мне кажется, что в не важно принципе. Будет он работать 5мкс или 500, время цикла от этого не изменится и диаграмма с шага на шаг быстрее прыгать не будет.

Особый случай, если мы пишем не циклическую а freewheeling задачу. Время цикла тут будет плавать, оно не предсказуемо. Это особый случай. Обычно такая задача делается для некой фоновой работы.

Nekit писал(а):
…на ST…нет "читаемости" программы…

Да, но можно применить автоматное программирование. Тогда текст четко разбивается на состояния, каждое из которых описывается простым и компактным текстом. Удобно каждое из них выделить в отдельную функцию. Тогда в основной программе получается только 'голый' case (переключатель состояния), по нему четко видно как устроен алгоритм. Программа вызывается и по переменной текущего состояния сразу прыгает на нужную ветку. Такие программы легко читаются и очень быстро работают.

Nekit писал(а):
…SFC дает "читаемость" однако нет уверенности что время работы программы на нем будет хоть сколь-нибудь приемлемым.

Оно будет точно таким, как задано в цикле задачи. Не больше и не меньше.

Nekit писал(а):
…получается что выполнение менее приоритетной задачи будет прервано в абсолютно произвольном месте и абсолютно неизвестно какая часть программы выполнена а какая нет.

Да, естественно. Высокоприоритетная задача обычно быстрая. Она отработает и вернет управление низкоприоритетной в то место, где она работала, та и не заметит, что процессор притормозил. Во время ее работы будут спокойно вызываться другие задачи и аппаратные прерывания, ей это не мешает.

Nekit писал(а):
…при срабатывании таймера задача останавливается вплоть до перезагруза ПЛК или только на текущий цикл?

Изготовитель ПЛК может этот момент переделать, это в его руках. По умолчанию по сторожевому таймеру задачи ПЛК переходит в режим Останов. Однако прямо в CoDeSys можно написать свой обработчик события “escpt_watchdog”. В нем можно запрограммировать поведение, например продолжить работу или перезапуститься.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 27, 2007 4:54 pm 
Не в сети

Зарегистрирован: Вт сен 25, 2007 5:49 pm
Сообщения: 0
На самом деле с автоматного проектирования все и началось :D . Стоит дилема или писать все по этой методике на ST, или воспользоваться более подходящим (как мне кажется) SFC, который по сути своей является автоматом с набором конечных состояний - шагов и переходов. Вот и хочется знать, "не больно ли" :) переходить на SFC (немного не привычный для обычного программиста). Спасибо за полный ответ.

С уважением Nekit.

_________________
Ищите, да обрящете


Вернуться к началу
 Заголовок сообщения: Re: "Временные" сложности
СообщениеДобавлено: Пн авг 19, 2013 8:43 am 
Не в сети

Зарегистрирован: Вт сен 18, 2012 1:31 pm
Сообщения: 9
Вопрос к Igor Petrov. В своей книге "Программируемые контроллеры" Вы пишете: "...В системе CoDeSys реализована невытесняющая многозадачность..." (стр.104).
В данной теме:
Цитата:
Возможны варианты:
1) если наш ПЛК поддерживает вытесняющую многозадачность (система исполнения CoDeSys CSP32F), то ничего страшного не будет. Задачи с более высоким приоритетом будут спокойно ее прерывать, как им задано.

Отсюда вопрос: Можно ли в CoDeSys реализовать нормальное аппаратное прерывание, не связанное с циклом исполнения ПЛК, и какие контроллеры поддерживают такую функцию?


Вернуться к началу
 Заголовок сообщения: Re: "Временные" сложности
СообщениеДобавлено: Пн авг 19, 2013 8:45 am 
Не в сети

Зарегистрирован: Вт сен 18, 2012 1:31 pm
Сообщения: 9
Простите, имелось ввиду в CoDeSys 2.3.


Вернуться к началу
 Заголовок сообщения: Re: "Временные" сложности
СообщениеДобавлено: Пн авг 19, 2013 11:01 am 
Не в сети
Site Admin

Зарегистрирован: Ср июл 20, 2005 2:32 pm
Сообщения: 153
kgb писал(а):
В своей книге "Программируемые контроллеры" Вы пишете: "...В системе CoDeSys реализована невытесняющая многозадачность..." (стр.104).

Книга устарела. Особенно этот раздел.

В CODESYS Control входит обязательный компонент – планировщик задач. Его можно настраивать под разное железо. Во встраиваемых системах (без ОС) используется планировщик без вытеснения. В прошлом веке это был типовой вариант. В современных ПЛК, как правило, есть ОС и есть реальная МЭК многозадачность.

Вызов задачи можно связать с событием (аппаратным или программным). В 2.3 работает. Во многих контроллерах есть быстрые входы. См. конфиг. задач – по событию.


Вернуться к началу
 Заголовок сообщения: Re: "Временные" сложности
СообщениеДобавлено: Вт авг 20, 2013 8:38 am 
Не в сети

Зарегистрирован: Вт сен 18, 2012 1:31 pm
Сообщения: 9
Спасибо за ответ, пусть даже и упрощенный. Наверное - каков вопрос...
Я в курсе про планировщик задач и обработчик событий.
У того же Овена есть быстрые входы, но документация (ПЛК1хх) описывает их только как аппаратный счетчик или обработчик сигналов энкодера. Где то в примерах описывается возможность чтения их напрямую вне цикла, и ни слова о использовании таких входов, как событие вызывающее выполнение задачи.
Отсюда вопрос: Контроллеры каких производителей, работающих со средой CoDeSys, или ее полноценного аналога, могут использовть физический вход, как сигнал первоочередного вызова конкретной задачи ( в общем использовать сигнал как прерывание).

P.S. А о книге, Вы зря так. Книги не стареют, хотя и нуждаются в корректировке.


Вернуться к началу
 Заголовок сообщения: Re: "Временные" сложности
СообщениеДобавлено: Вт авг 20, 2013 12:17 pm 
Не в сети
Site Admin

Зарегистрирован: Ср июл 20, 2005 2:32 pm
Сообщения: 153
Более глубокий ответ требует уточнения. Если Вы изготовитель контроллера, то для своих внутренних целей, Вы можете в CODESYS сделать нормальный обработчик аппаратного прерывания. Например, некоторые стеки полевых сетей требуют этого. Обработчики прерываний всегда пишутся специальным образом с жесткими ограничениями иначе можно обрушить всю систему. Выносить их в прикладную программу ПЛК нельзя. Ни в одном ПЛК Вы не найдете возможности обработки аппаратного прерывания в прикладной МЭК задаче.

Быстрый вызов прикладных задач по событиям могут все контроллеры с CODESYS, если изготовитель включил соответствующие события в прошивку и таргет. Даже простенькие ПЛК Frenzel Berg это умеют. У Овен 100% есть обработка событий. Вопрос только в их составе в разных моделях. Нужно смотреть список событий конкретного ПЛК или уточнять у изготовителя. Все МЭК задачи вызывает планировщик, циклические по таймерам, событийные по соответствующим событиям. Хороший планировщик может быстро обнаружить событие (по прерыванию или иным способом) корректно прервать работу активных задач и вызвать соответствующую задачу.


Вернуться к началу
 Заголовок сообщения: Re: "Временные" сложности
СообщениеДобавлено: Чт авг 22, 2013 8:01 am 
Не в сети

Зарегистрирован: Вт сен 18, 2012 1:31 pm
Сообщения: 9
Спасибо! Теперь туман немного рассеялся.


Вернуться к началу
 Заголовок сообщения: Re: "Временные" сложности
СообщениеДобавлено: Ср июн 11, 2014 7:14 am 
Не в сети

Зарегистрирован: Вт ноя 29, 2011 11:55 am
Сообщения: 1
Добрый день! Подскажите, пожалуйста, как в Codesys можно проверить переменная увеличивается или уменьшается?


Вернуться к началу
 Заголовок сообщения: Re: "Временные" сложности
СообщениеДобавлено: Пн июн 16, 2014 8:06 am 
Не в сети
Site Admin

Зарегистрирован: Ср июл 20, 2005 2:32 pm
Сообщения: 153
Перейти в режим Онлайн и посмотреть глазами как изменяется значение.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 13 сообщений ] 

Часовой пояс: UTC+01:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB