Управління Швидким лічильником S-200 – PLC – це просто!
Сайт для тих, хто хоче навчитися програмувати ПЛК
Управління Швидким лічильником S-200
У цьому прикладі застосування пояснюється функція швидкого лічильника SIMATIC S7-200. Швидкий лічильник може використовуватися в різних конфігураціях для того, щоб обробляти вхідні сигнали від датчиків, як напр. датчик переміщення.
Імпульсні виходи використовуватимуться у цьому, щоб створити швидкі сигнали. При цьому з'являється можливість генерувати послідовність імпульсів (PTO), а також модулювати ширину імпульсів (ШІМ), щоб напр., керувати серводвигуном. Так як в даному застосуванні використовується послідовність імпульсів, можна використовувати тільки CPU 214 DC/DC/DC.
Це застосування покликане показати, як має бути структурована програма, щоб використовувати швидкий лічильник і функцію послідовності імпульсів у найпростіших конфігураціях.

У цьому прикладі описується функція швидкого лічильника S7-200 DC/DC/DC. Він вважає швидше, ніж ПЛК може обробити цикл. Використовуваний лічильник це 2 кілогерцевий програмний лічильник, який вбудований у S7-212. S7-214 має додатково два апаратні лічильники по 7 КГц. Усі лічильники разом вимагають 10 байт у пам'яті даних, керувати, зберігання значень, рахунки і читання поточного стану.
Розмір програми складає 96 слів.
Основна програма
Основна програма скидає вихід A0.0, так як він необхідний для функції імпульсів. Крім того, ініціалізується швидкий лічильник HSC0 і викликаються підпрограми 0 і 1. При цьому HSC0 запускається з наступними властивостями: можлива актуалізація значення, прямий рахунок. Програма завершується, якщо виконується кількість циклів, зазначених у SBR 0 (SMD72).
LD SM0.1 // Перший цикл
R A0.0,1 // Скидання виходу // A0.0 для імпульсів
MOVB 16 # F8, SMB37 // Завантаження контрольних бітів для швидкого лічильника HSC0 (деблокування HSC0, оновлення поточних значень, оновлення скидів, оновлення напряму рахунку та числа циклів). Команда HSC використовує ці контрольні біти для конфігурування швидкого лічильника.
MOVD 0, SMD38 // Початкове значення швидкого лічильника HSC0
MOVD 1000, SMD42 // Перше значення зупинки від HSC0
HDEF 0,0 // Визначення швидкого лічильника 0 режимі 0
CALL 0 // Виклик підпрограми 0
CALL 1 // Виклик підпрограми 1
MEND // Кінець основної програми

Підпрограми
// Підпрограма 0 служить для ініціалізації та деблокування видачі імпульсів. У байті спеціальних меркерів SMB67 визначається висновок: послідовність імпульсів, часом базис, оновлення значень та деблокування. Слово SMW68 містить час циклу як мультиплікатор тимчасового базису. У подвійному слові спеціальних меркерів задається число циклів, що генеруються.
SBR 0 // Підпрограма 0
LD SM0.0 // Завжди в одиниці
MOVB 16 # 8D, SMB67 // Видача імпульсів: 1мс,
// PTO, деблокування, оновлення
MOVW 1,SMW68// Довжина циклу в мс
MOVD 30000, SMD72 // Число гененованих циклів
PLS 0 // Дозвіл видачі імпульсів на вихід A0.0
RET // Кінець підпрограми 0

Підпрограма 1 запускає швидкий лічильник HSC0 і призначає підпрограму 0 події переривання 12 (поточне значення HSC0 = скидання). Ця подія виникає, якщо кількість порахованих імпульсів (поточне значення) досягає поточного значення зупинки (скидання). Відбувається розблокування переривання.
SBR 1 // Підпрограма 1
LD SM0.0 // Завжди в одиниці
ATCH 0,12 // Призначення INT 0 події переривання 12 (HSC0 поточне значення = скидання)
ENI // Деблокування переривання
HSC 0 // Пуск швидкого лічильника 0
RET // Кінець підпрограми 1

Підпрограми переривань
//Підпрограма переривання 0 буде викликана, якщо досягнуто перше значення скидання (1000) швидкого лічильника 0. Вихід A0.1 встановлюється та задається нове значення скидання (1500) для швидкого лічильника.
// Підпрограма переривання 1 призначається події переривання 12 замість підпрограми 0.
INT 0 // Підпрограма переривання 0
LD SM0.0 // Завжди в одиниці
S A0.1,1 // Установка виходу A0.1
MOVD 16 # A0, SMB37 // Установка контрольних бітів: тільки завантаження нового скидання
MOVD 1500,SMD42// Наступне значення скидання HSC0
ATCH 1,12 // Призначення INT 1події переривання 12 замість INT 0
HSC 0 // Завантаження нового скидання до HSC0
RETI // Кінець підпрограми переривання 0

// Підпрограма переривання 1 викликається, якщо досягнуто друге значення скидання (1500) швидкого лічильника 0. Вихід A0.2 встановлюється, напрямок рахунку змінюється зворотне і визначається нове значення скидання (1000).
// Підпрограма переривання 2 призначається події переривання 12 INT 1
Підпрограма переривання 1
LD SM0.0 // Завжди в одиниці
S A0.2,1 // Установка виходу A0.2
MOVB 16#B0,SMB37//Установка контрольних бітів для завантаження нового скидання та зворотного рахунку
MOVD 1000,SMD42// Наступне значення скидання
ATCH 2,12 // Призначення INT 2 події переривання 12 замість INT 1
HSC 0 // Завантаження нового скидання та нового напряму в HSC0
RETI // Кінець підпрограми переривання 1

Підпрограма переривання 2викликається, якщо досягнуто третього значення скидання (1000) швидкого лічильника 0. Виходи A0.1 і A0.2 скидаються, напрямок рахунку змінюється на пряме і поточне значення лічильника скидається в нуль.
Значення скидання залишається постійним. При цьому підпрограма переривання 0 призначається події переривання 12 виконання програми починається заново. Програма завершується, якщо задане SBR 0 (SMD72) число циклів відпрацьовано.
INT 2 // Підпрограма переривання 2
LD SM0.0 // Завжди в одиниці
R A0.1,2 // Скидання виходів A0.1 та A0.2
MOVB 16#D8,SMB37//Установка контрольних бітів для завантаження нового поточного значення прямого рахунку
MOVD 0,SMD38// Скидання поточного значення лічильника HSC0
ATCH 0,12 // Призначення INT 0 події переривання 12
HSC 0 // Новий запуск швидкого лічильника 0
RETI // Кінець підпрограми переривання 2

Вказівки щодо перетворення
Для того, щоб перетворити TOOLITE2 AWL в S7-Micro/DOS AWL: