Страница 1 из 1

Отображение на графе переходов в прерываниях

Добавлено: 30 сен 2013, 17:54
Автоматизатор
При написании программы для контроллера (Step7 v11) возник вопрос: как отобразить на графе переходы, выполняемые в прерывании?

Описание задачи:
- есть вал, на который установлен датчик угловых перемещений (энкодер) ЛИР158 (разрешение 600 имп/оборот)
- необходимо вращать вал с разной скоростью (используется преобразователь частоты), которая изменяется в зависимости от количества выполненных оборотов
- в программе перед началом вращения вычисляется количество импульсов, при котором требуется переключить скорость
- в итоге вал должен вернуться в исходное положение

Как реализовано управление вращением
- энкодер подключен к контроллеру, сконфигурирован скоростной счетчик HSC1
- перед началом цикла счетчик сбрасывается (CV=0), задается опорное значение (CR=X2, где Х2 количество импульсов, при достижении которого надо включить скорость 2) и разрешается прерывание по событию счетчика HSC1 CV=CR,
- включается вращение вала на скорости 1
- когда счетчик HSC1 насчитает CV=X2, то выполнится прерывание, в котором надо изменить скорость с 1 на 2, загрузить новое значение в CR
- и т.д.

Как лучше оформить граф? Надо ли отображать команды разрешения прерываний?

Re: Отображение на графе переходов в прерываниях

Добавлено: 30 сен 2013, 18:30
CHANt
Прерывание вызывает переменная?
На мой взгляд, подпрограмма (граф) в прерывании, это уже другой граф - подчиненный

Re: Отображение на графе переходов в прерываниях

Добавлено: 30 сен 2013, 18:48
Михайло
Нужен ли в данном случае вообще граф, если он у тебя по особому реализован? СтОит ли вообще заморачиваться? Может можно написать прогу в типичном LD и довольствоваться? Такое не прокатит?

На мой взгляд, методика Шалыто - это лишь инструмент. Если нужно забить гвоздь, то необязательно использовать для этого молоток, можно иногда и пассатижами забить...

Re: Отображение на графе переходов в прерываниях

Добавлено: 01 окт 2013, 05:55
Автоматизатор
Михайло писал(а):СтОит ли вообще заморачиваться?
Пока думали как оформить граф, нашли косяк в программе. Граф - это не самоцель, конечно. Граф дает наглядность, удобно обсуждать работу по графу, а не по коду. Поэтому продолжаем работу.
CHANt писал(а):Прерывание вызывает переменная?
Прерывание вызывается по условию: значение скоростного счетчика равно предустановленному значению.
CHANt писал(а):На мой взгляд, подпрограмма (граф) в прерывании, это уже другой граф - подчиненный
Сейчас написана и отлаживается программа, в которой переходы между состояниями были вначале были сделаны в основном блоке, а потом перенесены в прерывания для увеличения быстродействия. Кроме этого для увеличения скорости реакции добавлены команды непосредственного сброса выходов, которые выполняются в переходах.
Переход в прерывании.JPG

Re: Отображение на графе переходов в прерываниях

Добавлено: 01 окт 2013, 16:16
Автоматизатор
В процессе отладки выявилась одна непонятная вещь. В программе для удобства были сконфигурированы два счетчика, считающие импульсы от одного энкодера: абсолютный и относительный. Абсолютный автоматически обнуляется по сигналу от нулевой метки, т.е. показывает отклонение вала от нулевой метки. Относительный счетчик обнуляется программно и используется для расчета относительных перемещений.

Так вот: если в настройке HSC выбрать у одного счетчика тип однофазный, а у другого А-В, то счетчики считают по-разному. Причем не получается вычислить закономерность рассогласования. Если выставить один тип - то счетчики станут считать одинаково.

Re: Отображение на графе переходов в прерываниях

Добавлено: 01 окт 2013, 17:12
Михайло
Автоматизатор писал(а):Абсолютный автоматически обнуляется по сигналу от нулевой метки, т.е. показывает отклонение вала от нулевой метки.
Это как реализовано? Прерыванием?

P.S. Вообще рассказал бы, как настраиваются оба HSC-счетчика. A/B-счетчик с настройкой учетверения 4Х?

Re: Отображение на графе переходов в прерываниях

Добавлено: 02 окт 2013, 16:42
Автоматизатор
Михайло писал(а):Это как реализовано?
Один счетчик (абсолютного положения HSC1) настраивается:
- для АВ квадратурного 1Х счета (входа I0.0 и I0.1) в прямом направлении,
- генерируется прерывание по событию: счетное значение равно предустановленному (для того, чтобы засечь момент прохождения мимо нулевой метки),
- с использованием внешнего входа (I0.3) для сброса,
- адрес для чтения значения ID1000.
Стоит только провернуть вал до нулевой метки, как счетчик автоматически сбрасывается. Значение счетчика - отклонение от нулевой метки.

Второй счетчик (относительного перемещения HSC3) настраивается аналогично, но без внешнего сброса:
- для АВ квадратурного 1Х счета (входа I0.4 и I0.5) в прямом направлении,
- генерируется прерывание по событию: счетное значение равно предустановленному (для того, чтобы засечь момент прохождения мимо заданного значения).

Сегодня продолжили эксперименты. Выяснили, что по приборам позиционирование выполняется с допуском +-5 импульсов, а по факту вал не доезжает почти четверть оборота (80-100 импульсов). Использовали однофазные счетчики. Есть подозрения, что вал двигателя на холостом ходу при управлении от преобразователя частоты так резко тормозит, что реверсирует. При реверсе однофазные счетчики продолжают считать вверх. Завтра попробуем с выше описанной настройкой.

Re: Отображение на графе переходов в прерываниях

Добавлено: 02 окт 2013, 18:18
Михайло
Может счетчики HSC "захлебываются"? Ну то есть реальная частота импульсов превышает максимум для этих счетчиков.

Re: Отображение на графе переходов в прерываниях

Добавлено: 02 окт 2013, 18:56
Автоматизатор
Михайло писал(а):Может счетчики HSC "захлебываются"?
Частота маленькая. Задание 5 Гц на преобразователе - это скорость двигателя 300 об/мин - или 5 об/с - 3 кГц на счетчике.

Re: Отображение на графе переходов в прерываниях

Добавлено: 03 окт 2013, 18:12
Автоматизатор
Сегодня настроили 4-квадратурные АВ-счетчики. Все работает. А вал двигателя действительно при торможении реверсирует.