пятница, 14 октября 2016 г.

S7-1200 и скоростные счётчики (HSC)

Некоторое время назад возникла необходимость подключить энкодеры к S7-1200. В результате обнаружились некоторые нюансы в работе импульсных входов S7-1200 для подсчёта входных импульсов.

1. Выходные сигналы энкодера


Энкодеры генерируют 3 выходных сигнала. Использовать в программе можно от 1 до 3 сигналов в зависимости от задачи.

1 сигнал. Фаза А или Фаза B.

Использование 1 сигнала означает простой подсчёт импульсов, каждый фронт (переход с 0 на 1 входного дискретного сигнала будет означать появление нового импульса). Нет разницы какой сигнала использовать, фазу А или фазу B.

2 сигнала. Фаза А + Фаза B.

Два сигнала необходимы, чтобы не только определить количество импульсов, но и направление вращения. Т.е. второй сигнал смещён на 90 градусов относительно первого, если рассматривать возникновение импульсов как вращение. А на дискретных входах второй сигнал повторяет первый, но возникает на половину периода раньше или позже и заканчивается соответственно. Зная, какой сигнал (Фаза А или Фаза B) возникает раньше при повороте двигателя в ту или иную сторону, можно определить направление вращения.

3 сигнала. Фаза А + Фаза B + сигнал сброса Z

Третий импульс (референтная метка) служит для того, чтобы определить начальное положение. Поскольку оно является нулевой точкой, то этом положении счётчик импульсов сбрасывается. Поэтому он называется в S7-1200 просто сигналом сброса (reset input)

 

 2. Дискретные входы контроллера S7-1200


Контроллер может использовать максимум 18 дискретных входов для функций скоростных счётчиков, что включает в себя 14 дискретных входа на самом контроллере и 4 входа на плате 6ES7 221-3AD30-0XB0.
Максимальное количество счётчиков - 6 штук. Входы деляться на три группы:

1. 200 кГц, 4 DI (плата 6ES7 221-3AD30-0XB0)

2. 100 кГц, 6 DI (I0.0 - I0.5)

3. 30 кГц, 8 DI (I0.6 - I1.5)



Принцип следующий: чем больше входов используется для счётчиков, тем меньше остаётся возможностей использовать более скоростные счётчики, т.е., например, вы используется плату для подключения импульсных сигналов 200 кГц, но при этом собираетесь считать все три максимально возможных импульса (A, B, Z). Таким образом, у вас остается только один незадействованный канал на 200 кГц. Нь если считать импульс по одному каналу, то можно делать это отдельно для четырёх разных энкодеров.

3. Настройка входов в TIA Portal


Настройка довольно-таки проста, в Device Configuration дважды щёлкнуть по контроллеру, далее в разделе General ищем пункт High Speed Counters, тут настраиваем каждый счётчик (HSC1 .. HSC6).

Подпункт Function:  
Type of Counting задаёт, что мы будем считать (количество импульсов или их частоту). 



Operating phase устанавливает, сколько мы задействуем фаз (т.е. нужно ли нам знать направление вращения). 


Установка "A/B counter" в пункте "Operating phase" деалет возможным учёт направления движение и, соответственно, производит подсчёт импульсов в плюс и в минус относительно текущего значения. Установка "Two phase" позволяет прибавлять к текущему значению счётчика при фронте на одной фазе и отнимать от текущего значения при фронте на другой фазе.
 
Подпункт Reset to initial value: опция Use external reset input устанавливает импульсный вход сброса (Z).

Чтобы вручную сбрасывать счётчик импульсов, необходимо использовать функциональный блок (FB) CTRL_HSC. Вызов производится через экземплярный DB:
"CTRL_HSC_DB"(HSC := "Local~HSC_1", CV := true, NEW_CV := "SP_New_CV");
где
CTRL_HSC_DB - экземплярный DB,
Local~HSC_1 - это "Local~" наименование скоростного счётчика
SP_New_CV - это значение, на которое сбрасывается счётчик

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

Для каждого выбранного DI автоматически указывается его разрешающая способность (Гц).

При этом разрешающая способность может не означать её реального значения, а получится заметно заниженнее. Не следует забывать о фильтрации дискретных входов, период времени которой, в случае импульснного входа, следует уменьшить до минимума.




Подпункт I/O Addresses: вот тут и хранится то самое значение счётчика. Start address - это адрес в области памяти I. 

 
Забавно, что именно I память используется для этих целей. S7-1200 и так отличился, в отличие от S7-200 его аналоговые входы/выходы пронумерованы в одной области с дискретными (в S7-200 AIW0 и I0.0 не пересекались, например). А тут ещё и скоростные счётчики втиснусь. Я рекомендую использовать такое простое разграничение: 

I 0.0, I0.1, I0.2... - для DI, 
IW 500, IW502, IW504... - для аналоговых входов модулей контроллера
IW 900 и IW902 - для аналоговых входов самого ПЛК
ID 1000, ID 1004... - для скоростных счётчиков.

При использовании контроллера CPU1215C я бы рекомендовал также отделять адреса аналоговых выходов ПЛК (QW 900,..) от ан. выходов модулей (QW 500,..), поскольку это упрощает замену контроллера 1214C на 1215C и наоборот. 

Далее, если значение измерялось в частоте (frequency), то его необходимо перевести в понятные единицы в зависимости от энкодера (т.е. имп/сек разделить на имп/об, в результате имеем об/сек).

 

НЮАНСЫ.


Ну, вот всё вроде ясно и понятно... было бы, если бы не пара нюансов.

1. В интернете полно информации, которая может вас ввести в заблуждение. Это информация о старых моделях контроллеров S7-1200, у которых назначение каждого DI для скоростных счётчиков было строго расписано.


К современным моделям контроллеров (прошивка 4.х) это всё отношения не имеет. Подробнее для старых моделей можно почитать тут.

2.Следует иметь ввиду, что энкодеры выдают сигналы разного напряжения. Плата 200 кГц существует в двух вариантах: для 5 В и для 24 В. Но на самом контроллере входы 100 кГц предназначены только для напряжения 24 В.
У ПЛК CPU1217C последние 4 входа, рассчитанные на частоту до 1 МГц, рассчитаны на напряжение 1.5 В.

P. S. Некоторые иллюстрации и материалы взяты из этой статьи.