Главная   Downloads   Разное  
FAQ     Поиск   Регистрация   Вход 
Текущее время: Чт мар 28, 2024 16:13

Часовой пояс: UTC + 3 часа (Russia: MSK)




Начать новую тему Ответить на тему  [ 11 сообщений ] 
Автор Сообщение
 Заголовок сообщения: Прерыания
СообщениеДобавлено: Пт мар 23, 2007 15:29 
Не в сети
Аватара пользователя

Регистрация: Сб сен 30, 2006 14:07
Сообщения: 763
Откуда: Москва
Подскажите почему не рекомендуется (руководство по программированию) устанавливать период прерываний меньше 10ms?
Что может не работать?


В начало
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт мар 23, 2007 21:46 
Не в сети
Site Admin
Аватара пользователя

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

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

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


В начало
 Профиль  
 
 Заголовок сообщения: Прерывания
СообщениеДобавлено: Пн мар 26, 2007 13:02 
Не в сети
Аватара пользователя

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


В начало
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн мар 26, 2007 15:01 
Не в сети
Site Admin
Аватара пользователя

Регистрация: Вт сен 19, 2006 21:13
Сообщения: 3510
Откуда: Москва
50Гц скорее всего физические возможности транзисторного выхода. Например для обычного входа CJ1W-ID211, частота с которого можно считать импульсы где-то между 40-50 Гц. (проверено лично)


В начало
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 27, 2007 07:09 
Не в сети

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

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

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


В начало
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт мар 27, 2007 12:57 
Не в сети
Аватара пользователя

Регистрация: Сб сен 30, 2006 14:07
Сообщения: 763
Откуда: Москва
Получается что частота переключения физического выхода зависит только от времени цикла программы? Тогда для увеличения частоты необходимо применять более быстрый контроллер? Получается, что программа выполняя прерывание по таймеру обрабатывает кусок программы но выход при этом не срабатывает? Ведь внутри программы этот выход переключается с нужной мне частотой.Или я чего-то не понимаю? Просто с CPU45 без применения прерываний на выходе получал 450 Гц (наблюдал осциллографом).


В начало
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 28, 2007 06:22 
Не в сети

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

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

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

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


В начало
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт апр 12, 2007 17:27 
Не в сети

Регистрация: Чт апр 12, 2007 13:43
Сообщения: 6
Откуда: СПб
У меня работают ряд программ (CS1D-S CPU44) с прерыванием 1мс, легко выдается и принимается меандр в 20мс, естественно с IORF. Скан возрастает отностительно программы без прерывания, в зависимости от времени выполнения прерывания, в 1.4...2.2 раза. Фактический скан от 25 до 70мс.

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

_________________
В глазик ткну - я умею вести дискуссию!


В начало
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт апр 12, 2007 17:30 
Не в сети

Регистрация: Чт апр 12, 2007 13:43
Сообщения: 6
Откуда: СПб
Алексей писал(а):
Получается что частота переключения физического выхода зависит только от времени цикла программы? Тогда для увеличения частоты необходимо применять более быстрый контроллер?


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

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

_________________
В глазик ткну - я умею вести дискуссию!


В начало
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт апр 12, 2007 17:40 
Не в сети

Регистрация: Чт апр 12, 2007 13:43
Сообщения: 6
Откуда: СПб
Да, забыл.

При включенных прерываниях, особенно частых, случаются косяки при использовании инструкций 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 
Не в сети
Аватара пользователя

Регистрация: Сб сен 30, 2006 14:07
Сообщения: 763
Откуда: Москва
Огромное СПАСИБО всем за помощь! Применил немедленную регенерацию на физических выходах и все заработало как надо! Еще раз всем СПАСИБО!!!


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

Часовой пояс: UTC + 3 часа (Russia: MSK)


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

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


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

Найти:
Переход:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская документация по phpBB 3