1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Пропуск циклических прерываний CPU 1214C

ПЛК SIMATIC (S7-200, S7-1200, S7-300, S7-400, S7-1500, ET200)
Ответить

Автор темы
Andron007
здесь недавно
здесь недавно
Сообщения: 25
Зарегистрирован: 09 дек 2019, 19:14
Имя: Андрей
Страна: Россия
город/регион: Иркутск
Благодарил (а): 6 раз
Поблагодарили: 3 раза

Пропуск циклических прерываний CPU 1214C

Сообщение Andron007 »

Доброго времени суток.
CPU 1214C DC/DC/DC V4.1 Tia Portal V13 SP1
Происходит пропуск циклических прерываний, в не зависимости от времени цикла. Других прерываний в программе нет, время выполнения прерывания гораздо меньше периода между прерываниями.
В программе определяется расход масла в гидросистеме. Используется гидродвигатель с энкодером и быстрый счетчик. Нужно сохранять показания быстрого счетчика в прерывании с частотой от 1 Гц до 1000 Гц. Но в прерывание программа уходит не стабильно по времени в не зависимости от частоты.
Может есть возможность фиксировать время ухода в прерывание с точностью мксек.

Михайло
почётный участник форума
почётный участник форума
Сообщения: 3559
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 6 раз
Поблагодарили: 253 раза

Пропуск циклических прерываний CPU 1214C

Сообщение Михайло »

Что представляет собой прерывание? Фильтр дискретного входа ослабили?

Автор темы
Andron007
здесь недавно
здесь недавно
Сообщения: 25
Зарегистрирован: 09 дек 2019, 19:14
Имя: Андрей
Страна: Россия
город/регион: Иркутск
Благодарил (а): 6 раз
Поблагодарили: 3 раза

Пропуск циклических прерываний CPU 1214C

Сообщение Andron007 »

Циклическое прерывание ОВ30 с приоритетом 24. Фильтр для счетчика ослабил до 3,2 мкс.
Попробовал применить инструкцию RUNTIME в прерывании для замера времени, данные похожи на правду. В среднем замеры показывают 950...1050 мкс бывает и 800 мкс при прерываниях через 1 мс. Также бывают пропуски по 2000 мкс, на 300 замеров от 3 до 10 раз. При чем пропуски и при 1 сек. прерываниях не исчезают.
Попробую делить результат со счетчика на полученное время.
Аватара пользователя

legionercheg
знаток Eplan
знаток Eplan
Сообщения: 965
Зарегистрирован: 18 ноя 2013, 08:32
Имя: Сергей
Страна: Россия
Благодарил (а): 89 раз
Поблагодарили: 115 раз

Пропуск циклических прерываний CPU 1214C

Сообщение legionercheg »

А вы точно разделом форума не ошиблись??? :)
Аватара пользователя

VADR
администратор
администратор
Сообщения: 4711
Зарегистрирован: 25 июл 2008, 07:12
Имя: Диев Александр Васильевич
Страна: Россия
город/регион: г. Сегежа, Карелия
Благодарил (а): 192 раза
Поблагодарили: 336 раз

Пропуск циклических прерываний CPU 1214C

Сообщение VADR »

Перенёс в соответствующий раздел. Andron007, будьте внимательнее при размещении сообщений.
Повторное использование кода не отменяет повторного использования мозга при его повторном использовании.

Михайло
почётный участник форума
почётный участник форума
Сообщения: 3559
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 6 раз
Поблагодарили: 253 раза

Пропуск циклических прерываний CPU 1214C

Сообщение Михайло »

Прерывания не могут вызываться чаще, чем цикл операционной системы + время выполнения того самого прерывания. А это порядка 1 мс для S7-1200, я думаю.

Перестройте концепцию работы системы: то, что должно работать быстро, отдайте на откуп микросхеме счетчика HSC.

Что вы делаете такое?
Аватара пользователя

MuadDib
частый гость
частый гость
Сообщения: 462
Зарегистрирован: 31 июл 2010, 09:12
Имя: Павел
Страна: РФ
Благодарил (а): 8 раз
Поблагодарили: 13 раз

Пропуск циклических прерываний CPU 1214C

Сообщение MuadDib »

Михайло писал(а): 21 окт 2020, 20:54 Прерывания не могут вызываться чаще, чем цикл операционной системы + время выполнения того самого прерывания. А это порядка 1 мс для S7-1200, я думаю.
В этом случае была бы сильная зависимость от частоты прерывания. Более редкие прерывания - меньше шансов на пропуск. При частоте прерывания на порядки меньшей "цикла операционной системы" пропусков не должно быть вообще. А ТС утверждает обратное: пропуски есть даже при 1 Гц.

Вообще, надеяться на хоть какую-то стабильность по времени при 1000 Гц на обычном PLC бессмысленно. Для такой частоты нужна какая-то своя железяка, где все процессы детерминированны и под вашим контролем. Но вот пропуски циклического прерывания, даже при очень медленном цикле - для меня это неожиданность.

Автор темы
Andron007
здесь недавно
здесь недавно
Сообщения: 25
Зарегистрирован: 09 дек 2019, 19:14
Имя: Андрей
Страна: Россия
город/регион: Иркутск
Благодарил (а): 6 раз
Поблагодарили: 3 раза

Пропуск циклических прерываний CPU 1214C

Сообщение Andron007 »

Михайло писал(а): 21 окт 2020, 20:54 Прерывания не могут вызываться чаще, чем цикл операционной системы + время выполнения того самого прерывания.
То есть период циклических прерываний зависит от длительности основного цикла?
Михайло писал(а): 21 окт 2020, 20:54 Что вы делаете такое?
Нужно мерить и рисовать график расхода масла через пропорциональный клапан в зависимости от поданного на этот клапан сигнала. Но самое сложное, с чем у меня проблемы, это мерить быстродействие клапана, время открытия, это в среднем 20 - 40 мс. То есть хотелось бы проводить замер расхода каждую 1 мс.
Как уже писал при помощи инструкции RUNTIME точное время м/у прерываниями определить удается. Но столкнулся с проблемой HSC, в одинаковые промежутки времени ~1мс насчитывает значения от 0 до 160, энкодер 1000 имп/об кручу шуруповертом ~20 об/сек, в среднем должно быть около 80 импульсов при четырёхкратном А/В. При чем после каждого нулевого значения счетчика следующее прерывание насчитывает в два раза больше 160.
Рис. 1 По оси Х номер прерывания, по Y импульсы
График.png
Рис. 2 Интервалы времени в сек. между прерываниями 60-100. Тэг Время[61] = 1987 мкс, был пропуск.
Период.png

Рис. 3 Импульсы насчитанные за прерывания 60-100. Они уже поделенные на время между соответствующими прерываниями и выводятся на графике рис.1.
Импульсы.png
Если настроить HSC на замер частоты, то всё прекрасно работает, но это раз в 10 мс.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Parliament74
корифей
корифей
Сообщения: 792
Зарегистрирован: 16 ноя 2016, 11:33
Имя: Максим Владимирович
Страна: Россия
город/регион: Магнитогорск
Благодарил (а): 16 раз
Поблагодарили: 202 раза

Пропуск циклических прерываний CPU 1214C

Сообщение Parliament74 »

Сколько у Вас время цикла OB1?
Andron007 писал(а): 22 окт 2020, 06:49 То есть хотелось бы проводить замер расхода каждую 1 мс.

У меня есть подозрение, что для этого нужно нечто иное, чем CPU1214...

Автор темы
Andron007
здесь недавно
здесь недавно
Сообщения: 25
Зарегистрирован: 09 дек 2019, 19:14
Имя: Андрей
Страна: Россия
город/регион: Иркутск
Благодарил (а): 6 раз
Поблагодарили: 3 раза

Пропуск циклических прерываний CPU 1214C

Сообщение Andron007 »

Parliament74 писал(а): 22 окт 2020, 11:40 Сколько у Вас время цикла OB1?
Программа написана чисто для эксперимента с HSC в ОВ1 почти ничего нет, наибольшее время цикла 2 мс.
И под рукой у меня сейчас CPU1211C.
Parliament74 писал(а): 22 окт 2020, 11:40 У меня есть подозрение, что для этого нужно нечто иное, чем CPU1214...
Согласен, но этот контроллер со всеми модулями расширения уже установлен и работает. Появилось желание проверять быстродействие клапанов. Хотелось бы обойтись программными средствами или совместимым железом.

Автор темы
Andron007
здесь недавно
здесь недавно
Сообщения: 25
Зарегистрирован: 09 дек 2019, 19:14
Имя: Андрей
Страна: Россия
город/регион: Иркутск
Благодарил (а): 6 раз
Поблагодарили: 3 раза

Пропуск циклических прерываний CPU 1214C

Сообщение Andron007 »

Вроде получилось.
Точное время между прерываниями определяем при помощи инструкции RUNTIME, так как прерывания плавают по времени и пропадают.
И, мой косяк, нужно опрос HCS проводить как физический вход, а не образ.(%ID1000:P)
Минимальное время цикла ОВ1 пробовал ставить от 1 до 10 мс на процесс ни как не повлияло, всё работает.
График построен при прерывании через 1 мс.
Результат.png
Буду в основной проект переносить.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Автор темы
Andron007
здесь недавно
здесь недавно
Сообщения: 25
Зарегистрирован: 09 дек 2019, 19:14
Имя: Андрей
Страна: Россия
город/регион: Иркутск
Благодарил (а): 6 раз
Поблагодарили: 3 раза

Пропуск циклических прерываний CPU 1214C

Сообщение Andron007 »

Для будущего поколения дополню, что бы грабли не мешали. Время прерываний гуляет и его также определяю инструкцией RUNTIME. А пропуски у меня были из за того что я в основном цикле постоянно гонял SET_CINT, по этому при обновлении параметров прерывания (даже если они не менялись) происходили пропуски.

Михайло
почётный участник форума
почётный участник форума
Сообщения: 3559
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 6 раз
Поблагодарили: 253 раза

Пропуск циклических прерываний CPU 1214C

Сообщение Михайло »

Прерывание не может прерывать текущую функцию основного цикла, иначе был бы кавардак. Только как функция завершила свое выполнение, только тогда прерывание возможно. Ваша функция SET_CINT, видимо, тяжеленная, вот и результат.

Автор темы
Andron007
здесь недавно
здесь недавно
Сообщения: 25
Зарегистрирован: 09 дек 2019, 19:14
Имя: Андрей
Страна: Россия
город/регион: Иркутск
Благодарил (а): 6 раз
Поблагодарили: 3 раза

Пропуск циклических прерываний CPU 1214C

Сообщение Andron007 »

Михайло писал(а): 13 ноя 2021, 20:40 Ваша функция SET_CINT, видимо, тяжеленная,
Стандартная функция для установки параметров циклического прерывания. Совпадение времени начала прерывания и выполнения этой функции приводит к пропускам.

Подпрограмма прерывания имеет больший приоритет чем основной цикл и может прервать его в любом месте. Какие могут быть проблемы при прерывании функции основного цикла?

Михайло
почётный участник форума
почётный участник форума
Сообщения: 3559
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 6 раз
Поблагодарили: 253 раза

Пропуск циклических прерываний CPU 1214C

Сообщение Михайло »

Кто знает, как работают прерывания. Я честно говоря, не уверен. Это может быть аппаратное прерывание, а может на уровне ОС. ОС дождется окончания выполнения функции и перенаправит на прерывание. Надо мануал - основы прерываний прочитать.
Аватара пользователя

Nicolayy
освоился
освоился
Сообщения: 280
Зарегистрирован: 14 фев 2014, 11:55
Имя: Николай
Страна: Россия
Благодарил (а): 9 раз
Поблагодарили: 64 раза

Пропуск циклических прерываний CPU 1214C

Сообщение Nicolayy »

Михайло писал(а): 14 ноя 2021, 12:44 Прерывание не может прерывать текущую функцию основного цикла, иначе был бы кавардак
Ну, конечно, может! В этом и смысл. И, конечно, может случиться кавардак. Тот, кто пишет программу, должен делать так, чтобы кавардака не было.
Михайло писал(а): 14 ноя 2021, 12:44 Это может быть аппаратное прерывание, а может на уровне ОС. ОС дождется окончания выполнения функции и перенаправит на прерывание
Нет, всё не так. Аппаратное прерывание отличается лишь тем, что его реализация может выполняться отдельным контроллером прерываний. Т.е. например, нужно реализовать скоростной счетчик 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 и все будет работать, если процессор вообще скушает такое количество высокоточной информации.

Автор темы
Andron007
здесь недавно
здесь недавно
Сообщения: 25
Зарегистрирован: 09 дек 2019, 19:14
Имя: Андрей
Страна: Россия
город/регион: Иркутск
Благодарил (а): 6 раз
Поблагодарили: 3 раза

Пропуск циклических прерываний CPU 1214C

Сообщение Andron007 »

Михайло писал(а): 16 ноя 2021, 06:06 Смотреть в сторону функции HSC в режиме Period.
В режиме измерения периода, в настройках HSC, необходимо указать период измерения (1, 0.1 или 0.01 сек). За указанный период измерения (минимум 10 мс) мы можем получить среднее значение периода поступивших импульсов. Такой вот огород.
Михайло писал(а): 16 ноя 2021, 06:06 Разумнее снизить число импульсов в секунду до 1000 и все будет работать
Т.е. предлагаете менять энкодеры под разные частоты :o

Михайло
почётный участник форума
почётный участник форума
Сообщения: 3559
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 6 раз
Поблагодарили: 253 раза

Пропуск циклических прерываний CPU 1214C

Сообщение Михайло »

Вы плохо знаете HSC. Возьмите, и выберите настройку Period, а не Frequency. И еще раз внимательно посмотрите мои формулы и сделайте, чтобы заработало.

Автор темы
Andron007
здесь недавно
здесь недавно
Сообщения: 25
Зарегистрирован: 09 дек 2019, 19:14
Имя: Андрей
Страна: Россия
город/регион: Иркутск
Благодарил (а): 6 раз
Поблагодарили: 3 раза

Пропуск циклических прерываний CPU 1214C

Сообщение Andron007 »

Михайло писал(а): 16 ноя 2021, 20:08 Вы плохо знаете HSC.
Дак подскажите как определить период (частоту) импульсов за 1 мс.

Может у меня ПО другое
11.png
Или не та документация
22.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Михайло
почётный участник форума
почётный участник форума
Сообщения: 3559
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
город/регион: г. Чехов, МО
Благодарил (а): 6 раз
Поблагодарили: 253 раза

Пропуск циклических прерываний CPU 1214C

Сообщение Михайло »

Нее, все то ПО.
Вы получите результат точнее вашего самопала. Усредните результат за 10 мс и получите более высокую точность нежели квантованная частота. А если усреднять не обязательно, то получите суперточность.

Автор темы
Andron007
здесь недавно
здесь недавно
Сообщения: 25
Зарегистрирован: 09 дек 2019, 19:14
Имя: Андрей
Страна: Россия
город/регион: Иркутск
Благодарил (а): 6 раз
Поблагодарили: 3 раза

Пропуск циклических прерываний CPU 1214C

Сообщение Andron007 »

Andron007 писал(а): 22 окт 2020, 06:49 Но самое сложное, с чем у меня проблемы, это мерить быстродействие клапана, время открытия, это в среднем 20 - 40 мс. То есть хотелось бы проводить замер расхода каждую 1 мс.
За время измерения в 10 мс, я получу две или три горизонтальных линии на графике.
Михайло писал(а): 16 ноя 2021, 21:52 А если усреднять не обязательно, то получите суперточность.
Как применяя HSC, без циклических прерываний, получить среднюю длительность периода или частоту импульсов хотя бы за 1 мс?

LexSL
осмотрелся
осмотрелся
Сообщения: 191
Зарегистрирован: 16 дек 2011, 15:13
Имя: Алексей
Страна: Россия
Благодарил (а): 59 раз
Поблагодарили: 44 раза

Пропуск циклических прерываний CPU 1214C

Сообщение LexSL »

Andron007 писал(а): 16 ноя 2021, 22:27 Как применяя HSC, без циклических прерываний, получить среднюю длительность периода или частоту импульсов хотя бы за 1 мс?
Может быть такой вариант подойдет?
Тип данных 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;
Не забыть для HSC выставить Type of counting = Period и для Input DI ослабить Input filter как надо. В общем, в хелпе все написано.

Автор темы
Andron007
здесь недавно
здесь недавно
Сообщения: 25
Зарегистрирован: 09 дек 2019, 19:14
Имя: Андрей
Страна: Россия
город/регион: Иркутск
Благодарил (а): 6 раз
Поблагодарили: 3 раза

Пропуск циклических прерываний CPU 1214C

Сообщение Andron007 »

LexSL писал(а): 17 ноя 2021, 07:23 Может быть такой вариант подойдет?
ElapsedTime возвращает время в наносекундах, прошедшее между последним импульсом в текущем интервале измерения периода и последним импульсом в предыдущем интервале измерения периода.
NewPeriod определяет интервал измерения периода (время, затраченное на выполнение измерения периода). Разрешенными значениями являются 10, 100 или 1000 миллисекунд.
Поэтому в лучшем случае я получу среднее значение частоты за период в 10 мс. А нужно каждую мс обновлять значение частоты.

Автор темы
Andron007
здесь недавно
здесь недавно
Сообщения: 25
Зарегистрирован: 09 дек 2019, 19:14
Имя: Андрей
Страна: Россия
город/регион: Иркутск
Благодарил (а): 6 раз
Поблагодарили: 3 раза

Пропуск циклических прерываний CPU 1214C

Сообщение Andron007 »

Коллеги спасибо за идеи и комментарии.
Как только у меня получилось (как мне кажется) с вычислением частоты за 1 мс, мы поэкспериментировали и поняли, что инерционность нашей системы не позволяет раскрутить энкодер за столь малое время.
Но пропуски циклических прерываний меня беспокоили, и как оказалось методом проб и ошибок,
Andron007 писал(а): 13 ноя 2021, 19:29 А пропуски у меня были из за того что я в основном цикле постоянно гонял SET_CINT, по этому при обновлении параметров прерывания (даже если они не менялись) происходили пропуски.
Всё встало на свои места.
Но если кто ни будь предложит альтернативное измерение частоты за малый интервал времени (менее 10 мс), милости просим.
Ответить

Вернуться в «Simatic TIA Portal»