- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Пропуск циклических прерываний CPU 1214C
-
- здесь недавно
- Сообщения: 25
- Зарегистрирован: 09 дек 2019, 19:14
- Имя: Андрей
- Страна: Россия
- город/регион: Иркутск
- Благодарил (а): 6 раз
- Поблагодарили: 3 раза
Пропуск циклических прерываний CPU 1214C
Доброго времени суток.
CPU 1214C DC/DC/DC V4.1 Tia Portal V13 SP1
Происходит пропуск циклических прерываний, в не зависимости от времени цикла. Других прерываний в программе нет, время выполнения прерывания гораздо меньше периода между прерываниями.
В программе определяется расход масла в гидросистеме. Используется гидродвигатель с энкодером и быстрый счетчик. Нужно сохранять показания быстрого счетчика в прерывании с частотой от 1 Гц до 1000 Гц. Но в прерывание программа уходит не стабильно по времени в не зависимости от частоты.
Может есть возможность фиксировать время ухода в прерывание с точностью мксек.
CPU 1214C DC/DC/DC V4.1 Tia Portal V13 SP1
Происходит пропуск циклических прерываний, в не зависимости от времени цикла. Других прерываний в программе нет, время выполнения прерывания гораздо меньше периода между прерываниями.
В программе определяется расход масла в гидросистеме. Используется гидродвигатель с энкодером и быстрый счетчик. Нужно сохранять показания быстрого счетчика в прерывании с частотой от 1 Гц до 1000 Гц. Но в прерывание программа уходит не стабильно по времени в не зависимости от частоты.
Может есть возможность фиксировать время ухода в прерывание с точностью мксек.
-
- почётный участник форума
- Сообщения: 3559
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 6 раз
- Поблагодарили: 253 раза
Пропуск циклических прерываний CPU 1214C
Что представляет собой прерывание? Фильтр дискретного входа ослабили?
-
- здесь недавно
- Сообщения: 25
- Зарегистрирован: 09 дек 2019, 19:14
- Имя: Андрей
- Страна: Россия
- город/регион: Иркутск
- Благодарил (а): 6 раз
- Поблагодарили: 3 раза
Пропуск циклических прерываний CPU 1214C
Циклическое прерывание ОВ30 с приоритетом 24. Фильтр для счетчика ослабил до 3,2 мкс.
Попробовал применить инструкцию RUNTIME в прерывании для замера времени, данные похожи на правду. В среднем замеры показывают 950...1050 мкс бывает и 800 мкс при прерываниях через 1 мс. Также бывают пропуски по 2000 мкс, на 300 замеров от 3 до 10 раз. При чем пропуски и при 1 сек. прерываниях не исчезают.
Попробую делить результат со счетчика на полученное время.
Попробовал применить инструкцию RUNTIME в прерывании для замера времени, данные похожи на правду. В среднем замеры показывают 950...1050 мкс бывает и 800 мкс при прерываниях через 1 мс. Также бывают пропуски по 2000 мкс, на 300 замеров от 3 до 10 раз. При чем пропуски и при 1 сек. прерываниях не исчезают.
Попробую делить результат со счетчика на полученное время.
-
- знаток Eplan
- Сообщения: 965
- Зарегистрирован: 18 ноя 2013, 08:32
- Имя: Сергей
- Страна: Россия
- Благодарил (а): 89 раз
- Поблагодарили: 115 раз
-
- администратор
- Сообщения: 4711
- Зарегистрирован: 25 июл 2008, 07:12
- Имя: Диев Александр Васильевич
- Страна: Россия
- город/регион: г. Сегежа, Карелия
- Благодарил (а): 192 раза
- Поблагодарили: 336 раз
Пропуск циклических прерываний CPU 1214C
Перенёс в соответствующий раздел. Andron007, будьте внимательнее при размещении сообщений.
Повторное использование кода не отменяет повторного использования мозга при его повторном использовании.
-
- почётный участник форума
- Сообщения: 3559
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 6 раз
- Поблагодарили: 253 раза
Пропуск циклических прерываний CPU 1214C
Прерывания не могут вызываться чаще, чем цикл операционной системы + время выполнения того самого прерывания. А это порядка 1 мс для S7-1200, я думаю.
Перестройте концепцию работы системы: то, что должно работать быстро, отдайте на откуп микросхеме счетчика HSC.
Что вы делаете такое?
Перестройте концепцию работы системы: то, что должно работать быстро, отдайте на откуп микросхеме счетчика HSC.
Что вы делаете такое?
-
- частый гость
- Сообщения: 462
- Зарегистрирован: 31 июл 2010, 09:12
- Имя: Павел
- Страна: РФ
- Благодарил (а): 8 раз
- Поблагодарили: 13 раз
Пропуск циклических прерываний CPU 1214C
В этом случае была бы сильная зависимость от частоты прерывания. Более редкие прерывания - меньше шансов на пропуск. При частоте прерывания на порядки меньшей "цикла операционной системы" пропусков не должно быть вообще. А ТС утверждает обратное: пропуски есть даже при 1 Гц.
Вообще, надеяться на хоть какую-то стабильность по времени при 1000 Гц на обычном PLC бессмысленно. Для такой частоты нужна какая-то своя железяка, где все процессы детерминированны и под вашим контролем. Но вот пропуски циклического прерывания, даже при очень медленном цикле - для меня это неожиданность.
-
- здесь недавно
- Сообщения: 25
- Зарегистрирован: 09 дек 2019, 19:14
- Имя: Андрей
- Страна: Россия
- город/регион: Иркутск
- Благодарил (а): 6 раз
- Поблагодарили: 3 раза
Пропуск циклических прерываний CPU 1214C
То есть период циклических прерываний зависит от длительности основного цикла?
Нужно мерить и рисовать график расхода масла через пропорциональный клапан в зависимости от поданного на этот клапан сигнала. Но самое сложное, с чем у меня проблемы, это мерить быстродействие клапана, время открытия, это в среднем 20 - 40 мс. То есть хотелось бы проводить замер расхода каждую 1 мс.
Как уже писал при помощи инструкции RUNTIME точное время м/у прерываниями определить удается. Но столкнулся с проблемой HSC, в одинаковые промежутки времени ~1мс насчитывает значения от 0 до 160, энкодер 1000 имп/об кручу шуруповертом ~20 об/сек, в среднем должно быть около 80 импульсов при четырёхкратном А/В. При чем после каждого нулевого значения счетчика следующее прерывание насчитывает в два раза больше 160.
Рис. 1 По оси Х номер прерывания, по Y импульсы Рис. 2 Интервалы времени в сек. между прерываниями 60-100. Тэг Время[61] = 1987 мкс, был пропуск.
Рис. 3 Импульсы насчитанные за прерывания 60-100. Они уже поделенные на время между соответствующими прерываниями и выводятся на графике рис.1. Если настроить HSC на замер частоты, то всё прекрасно работает, но это раз в 10 мс.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- корифей
- Сообщения: 792
- Зарегистрирован: 16 ноя 2016, 11:33
- Имя: Максим Владимирович
- Страна: Россия
- город/регион: Магнитогорск
- Благодарил (а): 16 раз
- Поблагодарили: 202 раза
Пропуск циклических прерываний CPU 1214C
Сколько у Вас время цикла OB1?
У меня есть подозрение, что для этого нужно нечто иное, чем CPU1214...
У меня есть подозрение, что для этого нужно нечто иное, чем CPU1214...
-
- здесь недавно
- Сообщения: 25
- Зарегистрирован: 09 дек 2019, 19:14
- Имя: Андрей
- Страна: Россия
- город/регион: Иркутск
- Благодарил (а): 6 раз
- Поблагодарили: 3 раза
Пропуск циклических прерываний CPU 1214C
Программа написана чисто для эксперимента с HSC в ОВ1 почти ничего нет, наибольшее время цикла 2 мс.
И под рукой у меня сейчас CPU1211C.
Согласен, но этот контроллер со всеми модулями расширения уже установлен и работает. Появилось желание проверять быстродействие клапанов. Хотелось бы обойтись программными средствами или совместимым железом.Parliament74 писал(а): ↑22 окт 2020, 11:40 У меня есть подозрение, что для этого нужно нечто иное, чем CPU1214...
-
- здесь недавно
- Сообщения: 25
- Зарегистрирован: 09 дек 2019, 19:14
- Имя: Андрей
- Страна: Россия
- город/регион: Иркутск
- Благодарил (а): 6 раз
- Поблагодарили: 3 раза
Пропуск циклических прерываний CPU 1214C
Вроде получилось.
Точное время между прерываниями определяем при помощи инструкции RUNTIME, так как прерывания плавают по времени и пропадают.
И, мой косяк, нужно опрос HCS проводить как физический вход, а не образ.(%ID1000:P)
Минимальное время цикла ОВ1 пробовал ставить от 1 до 10 мс на процесс ни как не повлияло, всё работает.
График построен при прерывании через 1 мс. Буду в основной проект переносить.
Точное время между прерываниями определяем при помощи инструкции RUNTIME, так как прерывания плавают по времени и пропадают.
И, мой косяк, нужно опрос HCS проводить как физический вход, а не образ.(%ID1000:P)
Минимальное время цикла ОВ1 пробовал ставить от 1 до 10 мс на процесс ни как не повлияло, всё работает.
График построен при прерывании через 1 мс. Буду в основной проект переносить.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- здесь недавно
- Сообщения: 25
- Зарегистрирован: 09 дек 2019, 19:14
- Имя: Андрей
- Страна: Россия
- город/регион: Иркутск
- Благодарил (а): 6 раз
- Поблагодарили: 3 раза
Пропуск циклических прерываний CPU 1214C
Для будущего поколения дополню, что бы грабли не мешали. Время прерываний гуляет и его также определяю инструкцией RUNTIME. А пропуски у меня были из за того что я в основном цикле постоянно гонял SET_CINT, по этому при обновлении параметров прерывания (даже если они не менялись) происходили пропуски.
-
- почётный участник форума
- Сообщения: 3559
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 6 раз
- Поблагодарили: 253 раза
Пропуск циклических прерываний CPU 1214C
Прерывание не может прерывать текущую функцию основного цикла, иначе был бы кавардак. Только как функция завершила свое выполнение, только тогда прерывание возможно. Ваша функция SET_CINT, видимо, тяжеленная, вот и результат.
-
- здесь недавно
- Сообщения: 25
- Зарегистрирован: 09 дек 2019, 19:14
- Имя: Андрей
- Страна: Россия
- город/регион: Иркутск
- Благодарил (а): 6 раз
- Поблагодарили: 3 раза
Пропуск циклических прерываний CPU 1214C
Стандартная функция для установки параметров циклического прерывания. Совпадение времени начала прерывания и выполнения этой функции приводит к пропускам.
Подпрограмма прерывания имеет больший приоритет чем основной цикл и может прервать его в любом месте. Какие могут быть проблемы при прерывании функции основного цикла?
-
- почётный участник форума
- Сообщения: 3559
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 6 раз
- Поблагодарили: 253 раза
Пропуск циклических прерываний CPU 1214C
Кто знает, как работают прерывания. Я честно говоря, не уверен. Это может быть аппаратное прерывание, а может на уровне ОС. ОС дождется окончания выполнения функции и перенаправит на прерывание. Надо мануал - основы прерываний прочитать.
-
- освоился
- Сообщения: 280
- Зарегистрирован: 14 фев 2014, 11:55
- Имя: Николай
- Страна: Россия
- Благодарил (а): 9 раз
- Поблагодарили: 64 раза
Пропуск циклических прерываний CPU 1214C
Ну, конечно, может! В этом и смысл. И, конечно, может случиться кавардак. Тот, кто пишет программу, должен делать так, чтобы кавардака не было.
Нет, всё не так. Аппаратное прерывание отличается лишь тем, что его реализация может выполняться отдельным контроллером прерываний. Т.е. например, нужно реализовать скоростной счетчик HSC, для этого нужно постоянно опрашивать состояние импульсного входа. Если это будет делать CPU, то его программа будет постоянно прерываться по времени. А можно сделать реализацию отдельным процессором, который ничем другим больше не занимается, и который затем передаст информацию о насчитанных импульсах основному CPU через какой-то специальный регистр. То, что аппаратные прерывания имеют высокий приоритет, вовсе не означает, что синхронные прерывания будут дожидаться окончания каких-то функций.
-
- почётный участник форума
- Сообщения: 3559
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 6 раз
- Поблагодарили: 253 раза
Пропуск циклических прерываний CPU 1214C
Обычные прерывания не требуют отдельных процессоров.
Самое интересное, топикстартер городит огород. Вместо того, чтобы измерять расход по принципу тахометра, он пытается делать это по принципу частотомера. С его 80 импульсами в миллисекунду он бы поимел сверхвысокоточные измерения 80 раз в миллисекунду, поправьте, если неточно выразился. Смотреть в сторону функции HSC в режиме Period.
Тахометрический метод предполагает измерение периода между соседними импульсами. Аппаратный счетчик HSC умеет мерять период времени с точностью до наносекунд (Сименс даже не уточняет, до скольки наносекунд, кажется до сотен).
Частотомер:
v = число_импульсов / t,
v = var / const
Тахометр:
v = число_импульсов / t,
v = const / var
Разумнее снизить число импульсов в секунду до 1000 и все будет работать, если процессор вообще скушает такое количество высокоточной информации.
Самое интересное, топикстартер городит огород. Вместо того, чтобы измерять расход по принципу тахометра, он пытается делать это по принципу частотомера. С его 80 импульсами в миллисекунду он бы поимел сверхвысокоточные измерения 80 раз в миллисекунду, поправьте, если неточно выразился. Смотреть в сторону функции HSC в режиме Period.
Тахометрический метод предполагает измерение периода между соседними импульсами. Аппаратный счетчик HSC умеет мерять период времени с точностью до наносекунд (Сименс даже не уточняет, до скольки наносекунд, кажется до сотен).
Частотомер:
v = число_импульсов / t,
v = var / const
Тахометр:
v = число_импульсов / t,
v = const / var
Разумнее снизить число импульсов в секунду до 1000 и все будет работать, если процессор вообще скушает такое количество высокоточной информации.
-
- здесь недавно
- Сообщения: 25
- Зарегистрирован: 09 дек 2019, 19:14
- Имя: Андрей
- Страна: Россия
- город/регион: Иркутск
- Благодарил (а): 6 раз
- Поблагодарили: 3 раза
Пропуск циклических прерываний CPU 1214C
В режиме измерения периода, в настройках HSC, необходимо указать период измерения (1, 0.1 или 0.01 сек). За указанный период измерения (минимум 10 мс) мы можем получить среднее значение периода поступивших импульсов. Такой вот огород.
Т.е. предлагаете менять энкодеры под разные частоты
-
- почётный участник форума
- Сообщения: 3559
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 6 раз
- Поблагодарили: 253 раза
Пропуск циклических прерываний CPU 1214C
Вы плохо знаете HSC. Возьмите, и выберите настройку Period, а не Frequency. И еще раз внимательно посмотрите мои формулы и сделайте, чтобы заработало.
-
- здесь недавно
- Сообщения: 25
- Зарегистрирован: 09 дек 2019, 19:14
- Имя: Андрей
- Страна: Россия
- город/регион: Иркутск
- Благодарил (а): 6 раз
- Поблагодарили: 3 раза
Пропуск циклических прерываний CPU 1214C
Дак подскажите как определить период (частоту) импульсов за 1 мс.
Может у меня ПО другое Или не та документация
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- почётный участник форума
- Сообщения: 3559
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 6 раз
- Поблагодарили: 253 раза
Пропуск циклических прерываний CPU 1214C
Нее, все то ПО.
Вы получите результат точнее вашего самопала. Усредните результат за 10 мс и получите более высокую точность нежели квантованная частота. А если усреднять не обязательно, то получите суперточность.
Вы получите результат точнее вашего самопала. Усредните результат за 10 мс и получите более высокую точность нежели квантованная частота. А если усреднять не обязательно, то получите суперточность.
-
- здесь недавно
- Сообщения: 25
- Зарегистрирован: 09 дек 2019, 19:14
- Имя: Андрей
- Страна: Россия
- город/регион: Иркутск
- Благодарил (а): 6 раз
- Поблагодарили: 3 раза
Пропуск циклических прерываний CPU 1214C
За время измерения в 10 мс, я получу две или три горизонтальных линии на графике.
Как применяя HSC, без циклических прерываний, получить среднюю длительность периода или частоту импульсов хотя бы за 1 мс?
-
- осмотрелся
- Сообщения: 191
- Зарегистрирован: 16 дек 2011, 15:13
- Имя: Алексей
- Страна: Россия
- Благодарил (а): 59 раз
- Поблагодарили: 44 раза
Пропуск циклических прерываний CPU 1214C
Может быть такой вариант подойдет?
Тип данных HSC_Period и функциональный блок CTRL_HSC_EXT (и хелп по нему), если кратко:
DB HSC1_Data => с переменной ctrl_hsc: HSC_Period
OB1 =>
Код: Выделить всё
"CTRL_HSC_EXT_DB1"(HSC := "Local~HSC_1",
DONE => "HSC1_Data".done,
BUSY => "HSC1_Data".busy,
ERROR => "HSC1_Data".error,
STATUS => "HSC1_Data".status,
CTRL := "HSC1_Data".ctrl_hsc);
IF HSC1 <> 0 THEN
IF "HSC1_Data".ctrl_hsc.ElapsedTime <> 0 AND "HSC1_Data".ctrl_hsc.ElapsedTime <> 16#FFFFFFFF
AND "HSC1_Data".ctrl_hsc.EdgeCount <> 0 THEN
frequency := 60000000000.0 * UDINT_TO_REAL("HSC1_Data".ctrl_hsc.EdgeCount) / UDINT_TO_REAL("HSC1_Data".ctrl_hsc.ElapsedTime);
(*у меня импульсы приходят на индуктивный датчик от магнита установленного на валу двигателя, поэтому умножаем на 60 млрд чтобы перевести в секунды, а точность HSC - наносекунды*)
ELSIF "HSC1_Data".ctrl_hsc.ElapsedTime = 16#FFFFFFFF THEN
frequency := 0.0;
END_IF;
ELSE
frequency := 0.0;
END_IF;
-
- здесь недавно
- Сообщения: 25
- Зарегистрирован: 09 дек 2019, 19:14
- Имя: Андрей
- Страна: Россия
- город/регион: Иркутск
- Благодарил (а): 6 раз
- Поблагодарили: 3 раза
Пропуск циклических прерываний CPU 1214C
ElapsedTime возвращает время в наносекундах, прошедшее между последним импульсом в текущем интервале измерения периода и последним импульсом в предыдущем интервале измерения периода.
NewPeriod определяет интервал измерения периода (время, затраченное на выполнение измерения периода). Разрешенными значениями являются 10, 100 или 1000 миллисекунд.
Поэтому в лучшем случае я получу среднее значение частоты за период в 10 мс. А нужно каждую мс обновлять значение частоты.
-
- здесь недавно
- Сообщения: 25
- Зарегистрирован: 09 дек 2019, 19:14
- Имя: Андрей
- Страна: Россия
- город/регион: Иркутск
- Благодарил (а): 6 раз
- Поблагодарили: 3 раза
Пропуск циклических прерываний CPU 1214C
Коллеги спасибо за идеи и комментарии.
Как только у меня получилось (как мне кажется) с вычислением частоты за 1 мс, мы поэкспериментировали и поняли, что инерционность нашей системы не позволяет раскрутить энкодер за столь малое время.
Но пропуски циклических прерываний меня беспокоили, и как оказалось методом проб и ошибок,
Но если кто ни будь предложит альтернативное измерение частоты за малый интервал времени (менее 10 мс), милости просим.
Как только у меня получилось (как мне кажется) с вычислением частоты за 1 мс, мы поэкспериментировали и поняли, что инерционность нашей системы не позволяет раскрутить энкодер за столь малое время.
Но пропуски циклических прерываний меня беспокоили, и как оказалось методом проб и ошибок,
Всё встало на свои места.
Но если кто ни будь предложит альтернативное измерение частоты за малый интервал времени (менее 10 мс), милости просим.