cpu13.ru - форум OMRON
http://cpu13.ru/

Прерыания
http://cpu13.ru/viewtopic.php?f=4&t=105
Страница 1 из 1

Автор:  Алексей [ Пт мар 23, 2007 15:29 ]
Заголовок сообщения:  Прерыания

Подскажите почему не рекомендуется (руководство по программированию) устанавливать период прерываний меньше 10ms?
Что может не работать?

Автор:  Олег [ Пт мар 23, 2007 21:46 ]
Заголовок сообщения: 

Если имеется ввиду интервальный таймер с цыклом менее 10ms, то всё очень просто, у меня бывает что программа на две трети CJ1M-CPU13 занимает по времени от 6 до 35ms, время цикла гуляет в зависимости от того что он делает. Если в такую прогу вставить прерывания по таймеру с маленьким циклом, в какой-то момент резко вырастает время цикла всей программы, врят-ли прога писалась с учётом такого времени и если используешь Р_0_02s, Р_0_1s то, что от них зависит может просто перестать выполняться. Можно даже превысить аварийное время цикла.

если прога не очень емкая, можно контролируя состояние P_Max_Cycle_Time и P_Cycle_Time_Value, подобрать наименьшее время интервального таймера, при котором не наблюдается неприятных явлений.

не помню на каком интервале, но время цикла раздувал до 350-400 ms. на контроллере с парой модулей.

Автор:  Алексей [ Пн мар 26, 2007 13:02 ]
Заголовок сообщения:  Прерывания

Именно так. Проще говоря проблема в том, чтобы в CPU13 в связке с транзисторными выходами OD211 получить на выходе меандр размахом 24 вольта и частотой 100 Гц. При прерывании по таймеру через 10ms (50Гц)
все работает. Стоит уменьшить до 9ms (надо 5ms) как все "портится". Хотя при этом в программе все нормально (ставил счетчик и он считал все импульсы с частотой 100гц. т. е. 1000 импульсов отсчитывал за 10 сек.)

Автор:  Олег [ Пн мар 26, 2007 15:01 ]
Заголовок сообщения: 

50Гц скорее всего физические возможности транзисторного выхода. Например для обычного входа CJ1W-ID211, частота с которого можно считать импульсы где-то между 40-50 Гц. (проверено лично)

Автор:  CerJe [ Вт мар 27, 2007 07:09 ]
Заголовок сообщения: 

Здесь дело, скорее всего не в физических возможностях блока OD211, а во времени выполнения цикла проргаммы. Ссылаясь на уважаемого Олега, который утверждает, что программа выполняется от 6 до 35 mS, и зная, что период включения и выключения точки выходного блока OD211 составляет около 0,5mS, можно вычислить частоту работы:

f =1000/ ( 35 + 0,5) = 57,14 Гц

А как Вы знаете, входные биты читаются перед выполнением программы, а выходные устанавливаются только ПОСЛЕ выполнения программы, то выше приведенный результат все объясняет!

Автор:  Алексей [ Вт мар 27, 2007 12:57 ]
Заголовок сообщения: 

Получается что частота переключения физического выхода зависит только от времени цикла программы? Тогда для увеличения частоты необходимо применять более быстрый контроллер? Получается, что программа выполняя прерывание по таймеру обрабатывает кусок программы но выход при этом не срабатывает? Ведь внутри программы этот выход переключается с нужной мне частотой.Или я чего-то не понимаю? Просто с CPU45 без применения прерываний на выходе получал 450 Гц (наблюдал осциллографом).

Автор:  CerJe [ Ср мар 28, 2007 06:22 ]
Заголовок сообщения: 

Именно так, частота переключения физического выхода ЗАВИСИТ от цикла программы, если только не применяются инструкции типа IORF. Если использовать более мощный контроллер для этих целей позволяют возможности и это действительно необходимый шаг, попытаться можно, но все равно, с моей точки зрения, ощутимого эффекта добиться будет трудно.

Как я понимаю, меандр не зависит от логики работы программы, посему единственное, что приходит на ум - это использование генератора импульсов. Или попробовать поизвращаться с IORF инструкцией внутри прерывания, т.е. обновлять выход при обработке прерывания.

Вы утверждаете, что внутри программы выход переключается с нужной частотой. Если Вы используете прерывания, то оно и понятно. Другое дело в том, что в природе есть устройства физического ввода для обработки прерываний (CJ1W-INT01), но нет устройств физического вывода для установки результата прерывания. Поэтому мы опять приходим к зависимости от цикла программы.

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

Автор:  greycygnet [ Чт апр 12, 2007 17:27 ]
Заголовок сообщения: 

У меня работают ряд программ (CS1D-S CPU44) с прерыванием 1мс, легко выдается и принимается меандр в 20мс, естественно с IORF. Скан возрастает отностительно программы без прерывания, в зависимости от времени выполнения прерывания, в 1.4...2.2 раза. Фактический скан от 25 до 70мс.

Практическая ошибка подсчета длины импульса (проверялось генератором и осцилом) ~1..3мс.

Автор:  greycygnet [ Чт апр 12, 2007 17:30 ]
Заголовок сообщения: 

Алексей писал(а):
Получается что частота переключения физического выхода зависит только от времени цикла программы? Тогда для увеличения частоты необходимо применять более быстрый контроллер?


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

При необходимости выдать сигнал частотой более скана необходимо использовать прерывание по времени с использованием того-же IORF.

Автор:  greycygnet [ Чт апр 12, 2007 17:40 ]
Заголовок сообщения: 

Да, забыл.

При включенных прерываниях, особенно частых, случаются косяки при использовании инструкций FOR..NEXT.

Скажем конструкция

MOV &0 D0
FOR &256
++ D0
NEXT

Может на выходе дать в D0 как 256, так и с некоторой вероятностью 257 и больше. Т.е. сделать большее число циклов. Особенно неприятно, если такая штука случается внутри вложенного цикла.

Лечится так:
MOV &0 D0
FOR &256
++ D0
>= D0 &256 | BREAK
NEXT

Автор:  Алексей [ Пн апр 16, 2007 13:05 ]
Заголовок сообщения: 

Огромное СПАСИБО всем за помощь! Применил немедленную регенерацию на физических выходах и все заработало как надо! Еще раз всем СПАСИБО!!!

Страница 1 из 1 Часовой пояс: UTC + 3 часа (Russia: MSK)
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/