Тема: Пожелания
Показать сообщение отдельно
Старый 16.01.2009, 10:36   #26
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Пожелания

Цитата:
Сообщение от Sergey Cherevko
Немного поясню.
События могут разные, но для SMH и Pixel актуальны всего два:
1. Изменение состояния входа (прерывание по входу)
2. Асинхронное к тику прерывание по времени
Обработчики событий нужны для уменьшения времени реакции контроллера. А реакции SMH и Pixel хватает лишь на не очень быстрые процессы.
Пример из жизни. Pixel с 2 МР, проект на чуть меньше 1000 блоков. Реальный тик 50...55мс, заданный 75. Железяка с датчиками положения и довольно низкой динамикой позиционируется пикселом на границе схода флажка с датчика после его "пролета".
Конечно, можно собрать несложную схему на внешних реле с реакцией на срабатыание датчика менее 1мс. Но это же не наш метод Обычно всё наоборот и разные ошибки проектирования устраняются программными методами...
Поэтому и хотелось бы иметь какой-либо обработчик событий. Например, каждую 1мс контроллер бросает остальные дела и обрабатывает заданный пользователем макрос. В макросе опросил вход, обработал алгоритм и тут же выдал результат на выход.
1) В пределах своего быстродействия что SMH, что Пиксель "прерывание" отработают. Не стоит их применять в неподходящих им задачах. Если вам нужна реакция 1 мс, то контроллер должен иметь время цикла не более 0.5 мс. Иначе любые ухищрения только усугубят ситуацию.

2) Асинхронность асинхронностью, но смысл в каком-то внеочередном выполнении какого-то макроса, если циклу подчинены также и обновление входов и выходов? Ну, обработал макрос данные, куда он их денет? Правильный вариант решения указанной вами проблемы - кардинальное сокращение времени общего цикла.

Во всех мощных системах с ОС реального времени просто очень маленькое время цикла (менее 1 мс), поэтому возникает ощущение "прерывания" и "параллельной работы". Но это ощущение, не более.

У нас есть продукт, который можно использовать в системах позиционирования - это FS-01, у неё время срабатывания измеряется долями миллисекунд.

PS. Не поделитесь, какие-такие реле срабатывают быстрее, чем 1 мс?

PPS. Вы представили очень упрощённую модель, правильно это делается так: каждую 1мс контроллер бросает остальные дела, опрашивает входы, сохраняет контекст основной задачи, обрабатывает заданный пользователем макрос, выдаёт результат на выход, восстанавливает контекст основной задачи. В результате такой чехарды времени потратится больше, чем 1 мсек. Но самое грубое, что произойдёт - это потеряется синхронность выполнения основной программы. Например: основная программа включает 2 дискретных выхода. Важно, чтобы они включились одновременно. Контроллер включает один, в это время возникает прерывание, в течении которого он выполняет макрос из 100 блоков. Тратит на это 1-2 мс. В итоге второй дискретный выход включится с задержкой.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием