Tag Archives: SIMATIC

Управление часами реального времени SIMATIC S7-214

 

Краткое описание

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

  • Байт 0: Столетие (00 — 99)
  • Байт 1: Месяц (1 — 12)
  • Байт 2: День (1 — 31)
  • Байт 3: Часы (00 — 24)
  • Байт 4: Минуты (00 — 59)
  • Byte 5: Секунды (00 — 59)
  • Byte 6: не занято
  • Byte 7: День недели (1-7 = Вс-Сб)

Данные хранятся в коде BCD (при чтении) или должны заноситься в коде BCD (при записи). При нажатии кнопки на E0.0 в часы реального времени будет занесена предустановленная дата. Кнопка на E0.1 служит для индикации текущего значения секунд, которое копируется на выходной байт AB0. Кодирование при этом производится на выбор в формате BCD (E0.1 = ‘1’) или двоичном (E0.1 = ‘0’).

Описание программы вкл. листинг

При нажатии кнопки на входе E0.0 будет вызвана подпрограмма 0. Эта подпрограмма заполняет 8 байтов VB100 до VB107 соответствующими значениями для даты и времени. Заключительная команда ‘TODW’ сохраняет установки для часов реального времени. Часы реального времени считываются в каждом цикле. Эти данные заносятся в 8 байтов с VB400 по VB407 в формате BCD (4 бита представляют цифру от 0 до 9). Если установлен вход E0.1, то это значение копируется непосредственно на выходной байт.

Если вход E0.1 не установлен, то слово данных VW404 копируется в слово VW204, а затем старший байт VB204, который содержит значение минут, стирается. Это мероприятие необходимо, так как конвертирование значения секунд из формата BCD в двоичный может быть произведено только пословно. Теперь двоичнокодированное значение секунд передается на выходной байт AB0.

Размер программы составляет 46 слов.

Основная программа

// TITEL = Часы реального времени

LD E0.0 // Кнопка записи реального времени

EU

CALL 0 // Вызов подпрограммы 0

LD SM0.0 // Начало стека

TODR VB400 // Чтение данных реального времени и запись в 8- байтовый буфер

LD E0.1 //Кнопка индикации секунд в формате BCD

MOVB VB405, AB0 // Копирование текущего значения секунд в выходной байт

LDN E0.1

MOVW VW404, VW204 //Копирование слова

MOVB 0, VB204 //Стирание старш. байта (минуты)

BCDI VW204 // Преобразование BCD => Двоич.

MOVB VB205, AB0 // Копирование текущего значения секунд в выходной байт

MEND

 

Подпрограмма

SBR 0 // Установка даты и времени

LD SM0.0

MOVB 16#95, VB100 // год: 95

MOVB 16#02, VB101 // месяц: февраль

MOVB 16#14, VB102 // день: 14

MOVB 16#12, VB103 // часы: 12

MOVB 16#0, VB104 // минуты: 00

MOVB 16#0, VB105 // секунды: 00

MOVB 16#0, VB106 // не занято

MOVB 16#3, VB107 // день недели: вторник

TODW VB100 // записать время

RET // Конец подпрограммы

 

 

 

Простые применения свободнопрограммируемого интерфейса S-200

В данном примере применения описывается использование свободнопрограммируемого интерфейса. Свободнопрограммируемый означает в данном случае, что протокол свободно определяем. Информация необходимая для связи заносится при этом в байт специальных меркеров SMB30.

Пользователь должен помнить о следующих соглашениях:

  • Четность
  • Число битов на символ
  • Скорость

В режиме передачи именуемом режим свободного порта данные могут как передаваться так и приниматься. В данном примере описана передача данных с имитацией программы печати.

Для того чтобы пояснить прием данных, добавлена программа считывателя штрих-кода.

Рисунок 1 Схема включения

 

Рисунок 2 Структура программы принтер

 

 

Рисунок 3 Структура программы Штрих-код

Описание программы, включая листинг: принтер

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

Программа составляет 13 слов.

 

Основная программа

// TITEL = Режим свободного порта

// Для этого приложения важно, корректно установить режим свободного порта.

// В байт специальных меркеров SMB30 заносится необходимая информация.

// Введенные значения можно определить с помощью руководства.

// Команда передачи XMT содержит начальный адрес передаваемой информации.

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

LD SM0.1 //Меркер первого цикла

MOVB +9,SMB30 // Свободный порт,

//9600 Бод,без паритета

// 8 бит/символ

MOVB +1,VB100 // Длина сообщения: 1

// ASCII символ

MOVB 16#41,VB101 // Длина символа “A”

// 1 байт (A => 41 hex)

LD E0.1 // Начало передачи

// вход E0.1

EU // Определение положит. фронта

XMT VB100,0 // Передача на интерфейс связи

MEND // Конец основной программы

 

 

Описание программы вкл.листинг: Считыватель штрих-кода

В данной программе описан прием данных. Штрих-код считыватель посылает при этом считанные данные через свободнопрограммируемый интерфейс на SIMATIC S7-200. Чтобы упростить реализацию данного примера, в качестве передатчика вместо считывателя штрих- кода можно использовать программу-терминал под Windows.

Размер программы составляет 15 слов.

 

Основная программа

// TITEL = Режим свободного порта

// Для этого приложения важно, корректно установить режим свободного порта.

// В байт специальных меркеров SMB30 заносится необходимая информация.

// Введенные значения можно определить с помощью руководства.

// Принятые данные реализуются через прерывание. Если данные поступят через

// свободнопрограммируемый интерффейс, то выполняется т.н. прерывание для приема, которое в данном приложении носит обозначение INT 0.

LD SM0.1 // Меркер первого цикла

MOVB +9,SMB30 // Свободный порт,9600 Бод,без паритета, 8 бит/символ

ATCH 0, 8 //Назначен. прерывания для приема 0

ENI // Деблокировка подпрограммы прерываний

MEND // Конец осн.программы

 

 

Подпрограмма прерывания

// В подпрограмме прерывания 0 принятые символы, сохраняемые в байте специальных меркеров SMB2, сравниваются с большой буквой “A”.

//в случае совпадения устанавливается выходной бит A0.1.

INT 0 // Подпрограмма прерывания для приема

LDB= SMB2,16#41 // Сравнение принятого символа в SMB2 с “A”

// Если символ “A”

S A0.1,1 // получен, то устанавливается A0.1

RETI // Возврат в основную программу

Для того чтобы преобразовать TOOLITE2 AWL в S7-Micro/DOS AWL

  • Установите ‘K’ перед каждым числом, не являющимся 16-ричной константой (напр. 4 →K4)
  • Замените ‘16#’ → ‘KH’ для всех 16-ричных констант (напр. 16#FF → KHFF)
  • Поставьте запятые для смены полей. Используйте клавиши перемещения или клавишу TAB для перехода от поля к полю.
  • Для преобразования программы S7-Micro/DOS AWL в KOP-форму нужно начинать каждый сегмент словом ‘NETWORK’ и номером. Каждый сегмент в этом примере имеет свой номер на диаграмме KOP. Используйте NWENFG в меню редактора для ввода нового сегмента. Команды MEND, RET, RETI, LBL, SBR и INT требуют отдельных сегментов.
  • Комментарии к строкам, начинающиеся с «//» в S7-Micro/DOS не возможны, зато возможны комментарии к сегментам.

 

S7-200 Примеры управление широтно-импульсной модуляцией

Краткое описание:

CPU-214 S7-200 содержит функцию выдачи прямоугольных сигналов на выходы A0.0 и A0.1. При этом длительность периода и ширина импульса устанавливаются независимо друг от друга. Ширина импульса соответствует времени, в течение которого выходной сигнал за период имеет состояние „1“.

Данный пример описывает широтно-импульсную модуляцию (ШИМ), где на выход A0.0 выдается сигнал, ширина импульса которого увеличивается от периода к периоду на 0,5 с. Длительность периода составляет 5 с, а стартовая ширина импульса 0,5 с. Если будет достигнуто максимальное значение ширины импульса 4,5 с, то ширина импульса снова начинает уменьшаться на 0,5 с, пока значение не станет равно нулю. Этот процесс повторяется периодически.

Для проведения такой широтно-импульсной модуляции необходимо связать выход A0.0 со входом E0.0, также как массу напряжения питания с массой входов, для того чтобы имелась возможность управлять ШИМ из программы.

Описание программы вкл. листинг:

Байт специальных меркеров SMB67 служит для инициализации широтно-импульсной модуляции на выходе A0.0. Это инициализация содержит деблокировку ШИМ и установки, позволяющие изменять длительность периода и ширину импульса, а также выбрать временной базис (здесь в мс). В подпрограмме 0 будут установлены соответствующие контрольные байты. Команда ENI производит глобальную деблокировку всех прерываний. По команде PLS 0 операционная система запоминает установленные значения и инициализирует так называемый “PTO/ШИМ-генератор”, который будет производить ШИМ на выходе A0.0.

Длительность периода 5 с задается передачей значения 5000 в слово специальных меркеров SMW68. Начальная ширина импульса устанавливается на 0,5 с, путем записи значения 500 в слово специальных меркеров SMW70.

Данная инициализация производится в первом цикле, путем логического связывания вызова подпрограммы с битом специальных меркеров SM0.1 (First Scan Flag). Инициализация и установка ШИМ будет прооизводится повторно, после завершения процесса ШИМ, т.е. когда текущая ширина импульса станет равной 0.

Вспомогательный маркер M0.0 служит для установки, будет ли ширина импульса увеличиваться или уменьшаться. Во время инициализации он устанавливается, для того чтобы могло производиться инкрементирование. Выход A0.0 связан со входом E0.0, так что выходной сигнал появляется и на входе E0.0. После того как будет выдан первый импульс, событие ‘0’ (положительный фронт на E0.0) будет назначено подпрограмме прерывания 1 (INT1) с помощью команды ‘ATCH’. INT1 повышает текущее значение импульса на 0,5 с а затем команда ‘DTCH’ разрывает связь этого прерывания с INT1, причем прерывание снова будет блокировано. Если ширина импульса при следующем увеличении станет равна длительности периода, то вспомогательный маркер M0.0 будет сброшен. При этом событие ‘0’ назначается подпрограмме прерывания 2, которая уменьшит ширину импульса после каждого импульса на 0,5 с. Когда ширина импульса станет равна 0, снова будет вызвана подпрограмма инициализации (подпрограмма SBR 0).

Размер программы составляет 66 слов.

Основная программа

// TITEL = УПРАВЛЕНИЕ ШИРОТНО-ИМПУЛЬСНОЙ МОДУЛЯЈИЕЙ

CALL 0 // вызов подпрограммы 0 для пуска ШИМ

LDW>= SMW70, VW0// Если ширина импульса >= (длина периода — ширина импульса),

R M0.0, 1// вспомогат. маркер сбрасывается

LDW= SMW70, 0// Если ширина импульса равна нулю,

CALL 0 // Вызов подпрограммы 0 для нового пуска ШИМ

LD E0.0 // ВходE0.0 установлен

U M0.0 // и вспомогательный маркер для увеличения установлен,

ATCH 1, 0 // то INT 1 назначена событию 0 (положительный фронт на E0.0)

LD E0.0 // Вход E0.0 установлен,

UN M0.0 // а вспомогательный маркер для увеличения не установлен,

ATCH 2, 0 // то INT 2 назначена событию 0 (положительный фронт на E0.0)

MEND // Конец основной программы

ПОДПРОГРАММА 0

// SM67.0 := 1 => сохранение новой длительности периода (деблокировка)

// SM67.1 := 1 => сохранение новой ширины импульса (деблокировка)

// SM67.3 := 1 => временной базис 1мс (если 0 => временной базис 1мкс)

// SM67.6 := 1 => выбор режима ШИМ (если 0 => режим PTO)

// SM67.7 := 1 =>общая деблокировка High-Speed-Output-функций

SBR 0 // Инициализация ШИМ

LD SM0.0 // Всегда в единице

S M0.0, 1 // Установка вспом. маркера “увеличение  ширины импульса”

MOVB 16#CB, SMB67//Установка контрольных байтов PTO/ШИМ — для выхода A0.0

MOVW 500, SMW70// Задание начальной ширина импульса (здесь 500 мс)

MOVW 5000, SMW68// длина периода (здесь 5 с)

ENI // Деблокировка всех прерываний

PLS 0 // Команда на программирование PTO/ШИМ-генератора

MOVW SMW68, VW0// Копировать длину периода в слово/ данных VW0

-I 500, VW0// Сохранить значение ‘длина периода — ширина импульса’ в слове данных VW0

RET // Конец подпрограммы 0 и возврат в основную программу

Подпрограммы прерываний

INT 1 // Увеличение ширины импульса

LD SM0.0 // Всегда в единице

+I 500, SMW70// Увеличение ширины импульса на 500мс

PLS 0 // Команда на программирование PTO/ШИМ-генератора

DTCH 0 // Разделить прерывание и назначенное ему событие 0

RETI // Конец ISR 1 и возврат в основную программу

Подпрограмма обработки прерываний 2

INT 2 // Уменьшение ширины импульса

LD SM0.0 // Всегда в единице

-I 500, SMW70// Уменьшение ширины импульса на 500мс

PLS 0 // Команда на программирование PTO/ШИМ-генератора

DTCH 0 // Разделить прерывание и назначенное ему событие 0

RETI // Конец ISR 2 и возврат в основную программу

 

Управление Быстрым счетчиком 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:

  • Установите ‘K’ перед каждым числом, не являющимся 16-ричной константой (напр. 4 → K4)
  • Замените ‘16#’ → ‘KH’ для всех 16-ричных констант (напр. 16#FF → KHFF)
  • Поставьте запятые для смены полей. Используйте клавиши перемещения или клавишу TAB для перехода от поля к полю.
  • Для преобразования программы S7-Micro/DOS AWL в KOP-форму нужно начинать каждый сегмент словом ‘NETWORK’ и номером. Каждый сегмент в этом примере имеет свой номер на диаграмме KOP. Используйте NWENFG в меню редактора для ввода нового сегмента. Команды MEND, RET, RETI, LBL, SBR и INT требуют отдельных сегментов.
  • Комментарии к строкам начинающиеся с «//» в S7-Micro/DOS не возможны, зато возможны комментарии к сегментам.

Управление прерываниями по времени

С помощью прерываний по времени создается тактовое мигание, причем частота мигания уполовинивается нажатием выключателя E0.1. Подача сигнала на вход 0.0 восстанавливает первоначальную частоту.

Этот пример призван пояснить общую работу с прерываниями по времени и изменением временного растра.

 

В байт специальных меркеров SMB34 заносится растр времени, с которым вызывается прерывание по времени с номером 10 (первое прерывание по временем). В байт специальных меркеров SMB 35 растр времени, с которым вызывается прерывание по времени с номером 11 (второе прерывание по времени — поддерживается только CPU 214). Растр времени в обоих случаях будет определен с инкрементом 1мс. Минимальное допустимое значение растра времени составляет 5 мс, максимальное — 255 мс.

Программа состоит из следующих подпрограмм:

  • Main Инициализация и задание времени
  • INT 0 Установка выхода A0.0
  • INT 1 Сброс выхода A0.0

Размер программы составляет 51 слово.

Основная программа

// TITEL = TIME-INT

// В этой первой части основной программы задается начальный растр времени

// и связываются два прерывания управляемых по времени.

 

// По положительному фронту входа E0.1 растр времени прерывания по времени

// удваивается. Для выполнения этого нового задания необходимо

// разорвать связи между прерываниями и подпрограммами прерывания,

// так как в противном случае новые значения не будут восприняты. Разрыв

// связи производится командой DTCH.

// После задания нового растра времени, связи должны быть заново созданы

// командой ATCH.

 

// По положительному фронту входа E0.0 будет восстановлена старая тактовая

// частота.

 

 

Подпрограммы прерываний

// ************************************************************

// При вызове подпрограммы прерывания 0 устанавливается выход A0.0.

 

// ************************************************************

// При вызове подпрограммы прерывания 1 выход A0.0 сбрасывается.

// Так как растр времени для вызова подпрограммы прерывания 1 в два раза длиннее, чем

// растр времени для вызова подпрограммы прерывания 0, возникает такт мигания.

 

Указания по преобразованию

Для того чтобы преобразовать TOOLITE2 AWL в S7-Micro/DOS AWL :

  • Установите ‘K’ перед каждым числом, не являющимся 16-ричной константой (напр. 4 станет K4)
  • Замените ‘16#’ на ‘KH’ для всех 16-ричных констант (напр. 16#FF → KHFF)
  • Поставьте запятые для смены полей. Используйте клавиши перемещения или клавишу TAB для перехода от поля к полю.
  • Для преобразования программы S7-Micro/DOS AWL в KOP-форму нужно начинать каждый сегмент словом ‘NETWORK’ и номером. Каждый сегмент в этом примере имеет свой номер на диаграмме KOP. Используйте NWENFG в меню редактора для ввода нового сегмента. Команды MEND, RET, RETI, LBL, SBR и INT требуют отдельных сегментов.

 

Управление подпрограммами прерываний ввода/вывода

 

Эта программа для SIMATIC S7-212 и S7-214 считает от 0 до 255 в зависимости от входа E0.0: Если он установлен, то программа считает обратно, а если нет, то программа считает прямо. При переключении этого входа выполняется подпрограмма прерывания ввода/вывода, которая устанавливает или сбрасывает меркерный бит обратного счета M0.0.

Эта программа является примером подпрограммы прерывания ввода/вывода. Счетчик считает от 0 до 255. Если вход E0.0 не установлен, то идет прямой счет. Если вход E0.0 установлен, то идет обратный счет.

Структура программы:

Main Инициализация и подпрограмма счета

INT 0 прямой счет — вход E0.0 не установлен

INT 1 обратный счет — вход E0.0 установлен

Размер программы составляет 32 слова.

Основная программа

// TITLE=EVENT-INT

// Основная программа состоит из подпрограмм инициализации и счета.

// При 0 или 255 процесс счета завершается.

// Меркерный бит M0.0 (меркер обратного счета) отвечает за направление счета.

// Включение входа E0.0подпрограмма прерывания ввода/вывода INT 0 выключается.

// Вэтой подпрограмме устанавливается меркер обратного счета M0.0.

// При этом основная программа ведет обратный счет.

// Подпрограмма прерывания по событию INT 1 выполняется, если вход E0.0

// выключается. При этом меркер обратного счета M0.0 сбрасывается и

// программа вновь ведет прямой счет.

LD SM0.1 // Бит инициализации — только в 1 в первом рабочем цикле

MOVB 0,AC0 // Установка аккумулятора счетчика в 0

ENI // Разрешение для подпрограмм прерываний

ATCH 0,0 // Подпрограма по событию для положительного фронта входа E0.0

ATCH 1,1 // Подпрограма по событию для отрицательного фронта входа E0.0

 

LDN M0.0 // Если меркер обратного счета не установлен

UB>= 16#FE,AC0 // … и текущее значение счетчика меньше или равно 254

U SM0.5 // … и импульс 0.5 секунды

EU // … и положительный фронт импульса,

INCW AC0 // то содержимое аккумулятора сетчика увеличивается на 1

 

LD M0.0 // Если меркер обратного счета установлен

UB<= 16#1,AC0 // … и текущее значение счетчика больше или равно 1

U SM0.5 // … и импульс 0.5 секунды

EU // … и положительный фронт импульса,

DECW AC0 // то содержимое аккумулятора сетчика уменьшается на 1

 

LD SM0.0 // Всегда в единице

MOVB AC0,AB0 // Индикация текущего значения счетчика на выходах

MEND // Конец основной программы

 

Подпрограммы прерываний

// Подпрограмма прерывания по событию 0 устанавливает меркерный бит M0.0 в 0.

// В этом случае программа ведет обратный счет.

INT 0 // Подпрограмма по событию ведет обратный счет

LD SM0.0

S M0.0,1 // Установка меркера обратного счета

RETI // Конец подпрограммы прерываний

// Подпрограмма прерывания по событию 1 устанавливает меркерный бит M0.0 в 1.

// В этом случае программа ведет прямой счет.

 

INT 1 // Подпрограмма по событию ведет прямой счет

R M0.0,1 // Сброс меркера обратного счета

RETI // Конец подпрограммы прерываний

Указания по преобразованию

Для того чтобы преобразовать TOOLITE2 AWL в S7-Micro/DOS AWL

  • Установите ‘K’ перед каждым числом, не являющимся 16-ричной константой (напр. 4 → K4)
  • Замените ‘16#’ → ‘KH’ для всех 16-ричных констант (напр. 16#FF → KHFF)
  • Поставьте запятые для смены полей. Используйте клавиши перемещения или клавишу TAB для перехода от поля к полю.
  • Для преобразования программы S7-Micro/DOS AWL в KOP-форму нужно начинать каждый сегмент словом ‘NETWORK’ и номером. Каждый сегмент в этом примере имеет свой номер на диаграмме KOP. Используйте NWENFG в меню редактора для ввода нового сегмента. Команды MEND, RET, RETI, LBL, SBR и INT требуют отдельных сегментов.

Переменные в STEP 7-Micro/WIN

Присвоение начальных значений переменным выполняется в редакторе блоков данных. Вы можете выполнять назначения байтам, словам или двойным словам памяти переменных. Комментарии не обязательны.

Редактор блоков данных – это текстовый редактор со свободно выбираемым форматом; это значит, что поля для тех или иных данных заранее не определяются. После того как вы напечатали строку и нажали клавишу ENTER, редактор блоков данных форматирует эту строку (выравнивает столбцы адресов, данных, комментариев; представляет адреса в памяти переменных большими буквами) и вновь ее отображает. Если вы в конце строки нажмете CTRL-ENTER, то адрес автоматически пересчитывается на следующее доступное значение.

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

Использование таблицы символов для символической адресации переменных

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

Для программ SIMATIC назначение глобальных символов производится в таблице символов. Для программ МЭК назначение глобальных символов производится в таблице глобальных переменных. Для присвоения адресу символического имени действуйте следующим образом:

1. Щелкните в навигационной панели на кнопке таблицы символов, чтобы вызватьтаблицу.

2. Введите символическое имя (например, Input1) в столбце «Symbol Name [Символическое имя]». Максимальная длина символического имени составляет 23 символа.

3. В столбце Address [Адрес] введите адрес (например, I0.0).

4. Для таблицы глобальных переменных МЭК введите значение в столбец Data Type [Тип данных] или выберите его из раскрывающегося окна списка.

Можно создать несколько таблиц символов, но вы не можете использовать одну и ту же строку более одного раза в качестве глобального символического имени ни в единственной таблице, ни в нескольких различных таблицах.

Использование локальных переменных

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

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

Контроль над программой с помощью таблицы состояний

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

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

Для вызова таблицы состояний выберите команду меню View > Component > Status Chart [Вид > Компонент > Таблица состояний] или щелкните на пиктограмме таблицы состояний на навигационной панели.

При создании таблицы состояний введите адреса переменных процесса, которые вы хотите наблюдать. Невозможно отобразить состояния констант, аккумуляторов и локальных переменных. Значения таймеров и счетчиков можно отображать в виде бита или слова. Если значение отображается в виде бита, то оно представляет состояние бита таймера или счетчика; если значение отображается в виде слова, то оно является значением таймера или счетчика.

Для создания таблицы состояний и контроля переменных:

  1. Введите в поле адресов адреса желаемых величин.
  2. В столбце Format выберите тип данных.
  3. Для отображения состояния переменных процесса в своем ПЛК выберите команду меню Debug > Chart Status [Отладка > Состояние таблицы].
  4. Если вы хотите опрашивать эти величины непрерывно или хотите однократно считать состояние, щелкните на соответствующем символе на панели инструментов.

В таблице состояний можно также принудительно устанавливать или изменять значения различных переменных процесса. В таблицу состояний можно вставлять дополнительные строки, выбрав команду меню Edit> Insert > Row [Редактировать > Вставить > Строка].

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

 

Создание библиотеки команд в STEP 7-Micro/WIN

В STEP 7-Micro/WIN можно создать библиотеку команд для конкретного пользователя или использовать библиотеку, созданную другими лицами.  Для создания библиотеки команд создайте сначала в STEP 7-Micro/WIN подпрограммы и программы обработки прерываний и сгруппируйте их. Вы можете скрыть код в этих подпрограммах и программах обработки прерываний, чтобы предотвратить случайные изменения и защитить технологию или ноу-хау автора.

Для создания библиотеки команд действуйте следующим образом:

1. Напишите программу в виде стандартного проекта STEP 7-Micro/WIN и поместите функции, которые должны быть включены в библиотеку, в подпрограммы или программы обработки прерываний.

2. Обеспечьте, чтобы все адреса в памяти переменных в подпрограммах или программах обработки прерываний получили символические имена. В памяти переменных используйте адреса, следующие друг за другом, чтобы минимизировать размер памяти переменных, необходимой для библиотеки.

3. Переименуйте подпрограммы и программы обработки прерываний в соответствии с названиями, с которыми они должны находиться в библиотеке.

4. Выберите команду меню File > Create Library [Файл > Создать библиотеку], чтобы скомпилировать новую библиотеку команд.

Создание пользовательской библиотеки в STEP 7-Micro/WIN

Создание пользовательской библиотеки в STEP 7-Micro/WIN

Дополнительную информацию о создании библиотек вы найдете в помощи для STEP 7-Micro/WIN в режиме online.

Чтобы получить доступ к командам из библиотеки команд необходимо:

1. Добавить к дереву команд каталог «Libraries [Библиотеки]», выбрав команду меню File > Add Libraries [Файл > Добавить библиотеки].

2. Выберите желаемую команду и вставьте ее в свою программу (как любую стандартную команду).

Если библиотечная программа нуждается в памяти переменных, то STEP 7-Micro/WIN после компиляции проекта потребует назначения области памяти.

Области памяти назначаются в диалоговом окне «Library Memory Allocation [Выделение памяти для библиотеки].

 

Ошибки в ПЛК Siemens

ПЛК разделяет ошибки на фатальные и не фатальные. Коды, сгенерированные ошибкой, можно посмотреть, выбрав команду меню PLC > Information [ПЛК Информация].

На рисунке показано диалоговое PLC Information [Информация ПЛК], содержащее и описание ошибки.

Поле Last Fatal [Последняя фатальная ошибка] показывает код предыдущей фатальной ошибки, сгенерированный ПЛК. Это значение сохраняется при выключениях и включениях питания, если сохраняется ОЗУ. Эта ячейка очищается всякий раз, когда очищается вся память ПЛК, или когда ОЗУ не сохраняется после длительного перерыва в подаче питания.

Окно аварий Step7

Окно аварий Step7

Поле Total Fatal [Всего фатальных ошибок] представляет собой количество фатальных ошибок, сформированных ПЛК начиная с момента последней очистки всех областей памяти ПЛК. Это значение сохраняется при выключениях и включениях питания, если сохраняется ОЗУ. Эта ячейка очищается всякий раз, когда очищается вся память ПЛК, или когда ОЗУ не сохраняется после длительного перерыва в подаче питания.

Нефатальные ошибки

В случае нефатальных ошибок речь идет об ошибках в построении программы пользователя, об ошибке при исполнении команды в программе пользователя и об ошибках в модулях расширения. С помощью STEP 7-Micro/WIN можно отобразить коды нефатальных ошибок. Имеется три основных группы нефатальных ошибок.

Ошибки компиляции программы

ПЛК компилирует программу, когда он ее загружает. Если ПЛК обнаруживает, что программа нарушает правило компиляции, то загрузка прерывается и генерируется код ошибки. (Программа, которая уже была загружена в ПЛК, по-прежнему будет существовать в постоянной памяти и не потеряется.) После исправления своей программы вы можете загрузить ее снова.

Ошибки конфигурации входов/выходов

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

Информация о состоянии модуля хранится в битах специальной памяти (SM). Ваша программа может контролировать и анализировать эти биты. Бит SM5.0 является глобальным битом ошибок конфигурации входов/выходов, который остается установленным, пока в модуле расширения сохраняется сбойная ситуация.

Ошибки выполнения программы

Ваша программа может создавать состояния ошибки во время своего выполнения. Эти ошибки могут возникать из-за ненадлежащего использования команды или из-за обработки командой недопустимых данных. Например, указатель косвенного адреса, который был действительным, когда программа компилировалась, может быть изменен во время выполнения программы так, что станет указывать на адрес вне допустимого диапазона. Это пример ошибки программирования, проявляющейся при выполнении программы. При возникновении такой ошибки устанавливается бит SM4.3. Он остается установленным, пока ПЛК находится в режиме RUN. Информация об ошибках выполнения программы хранится в битах специальной памяти (SM). Ваша программа может контролировать и анализировать эти биты.

Когда ПЛК обнаруживает нефатальную ошибку, он не переключается в режим STOP. Он только регистрирует событие в памяти SM и продолжает выполнение вашей программы. Однако вы можете спроектировать свою программу так, чтобы она принуждала ПЛК к переходу в состояние STOP, когда обнаруживается нефатальная ошибка. Следующий пример показывает сегмент программы, которая контролирует два глобальных бита нефатальных ошибок и переводит ПЛК в STOP всякий раз, когда устанавливается любой из этих битов.

Пример остановки выполнения программы при возникновении нефатальной ошибки

Пример остановки выполнения программы при возникновении нефатальной ошибки

Фатальные ошибки

Фатальные ошибки заставляют ПЛК прекратить выполнение программы. В зависимости от тяжести фатальной ошибки ПЛК может потерять способность к выполнению некоторых или всех функций. Целью обработки фатальных ошибок является перевод ПЛК в безопасное состояние, из которого ПЛК может реагировать на запросы о существующих сбойных состояниях. Когда ПЛК обнаруживает фатальную ошибку, он переключается в режим STOP, включает светодиоды SF/DIAG (красный) и STOP, заменяет таблицу выходов и выключает выходы. ПЛК остается в этом состоянии до исправления фатальной ошибки.

После устранения фатальной ошибки можно перезапустить ПЛК, используя один из следующих методов:

  • Выключите, а затем включите питание.
  • Переведите переключатель режимов работы из RUN или TERM в STOP.
  • Выберите из STEP 7-Micro/WIN команду меню PLC > Power–Up Reset [ПЛК > Сброс при запуске] для запуска ПЛК. Это заставляет ПЛК перезапуститься и сбросить все фатальные ошибки.

Перезапуск ПЛК сбрасывает состояние фатальной ошибки и выполняет диагностический тест, связанный с включением питания, чтобы проверить, что фатальная ошибка была устранена. Если обнаруживается другая фатальная ошибка, то ПЛК снова устанавливает светодиод ошибки, показывая, что ошибка по-прежнему существует. В противном случае ПЛК начинает нормальную работу. Имеется несколько возможных сбойных состояний, которые могут сделать ПЛК некоммуникабельным. В этих случаях вы не можете отобразить код ошибки ПЛК. Эти типы ошибок указывают на аппаратные отказы, требующие ремонта ПЛК; их невозможно устранить посредством изменений в программе или очистки памяти ПЛК.

 

Команды языка Step7

Определение EN/ENO

EN (Enable IN = Разрешающий вход) – это булев вход для блоков в LAD и FBD. Чтобы команда, представленная в виде блока, исполнялась, на этом входе должен присутствовать поток сигнала. В STL команды не имеют входа EN, но вершина стека должна быть логической “1”, чтобы соответствующая команда STL исполнялась.

ENO (Enable Out = Разрешающий выход) – это булев выход для блоков в LAD и FBD. Если у блока имеется поток сигнала на входе EN, и блок выполняет свою функцию без ошибок, то выход ENO передает поток сигнала следующему элементу. Если при исполнении блока обнаруживается ошибка, то поток сигнала завершается на блоке, в котором произошла ошибка.

В STL нет выхода ENO, но команды STL, соответствующие командам LAD и FBD с выходами ENO, устанавливают специальный бит ENO. Это бит доступен с помощью команды STL AENO (AND ENO) и может быть использован для создания того же эффекта, что и бит ENO блока.

Условные и безусловные входы

В LAD и FBD блок или катушка, зависящие от потока сигнала, изображаются присоединенными к какому-нибудь элементу с левой стороны. Катушка или блок, не зависящие от потока сигнала, изображаются непосредственно подключенными к левой шине.

Команды без выходов

Блоки, не допускающие каскадного соединения, изображаются без булевых выходов. Сюда относятся команды вызова подпрограммы, перехода на метку и условного завершения подпрограммы. В LAD тоже имеются катушки, которые могут быть помещены только у левой шины. Сюда относятся команды определения метки перехода, конца программного цикла с NEXT, загрузки реле последовательного управления (SCR), условного завершения SCR и конца SCR. В FBD они изображаются как блоки и отличаются непомеченными входами и отсутствием выходов.

Команды сравнения

Команда сравнения выполняется независимо от состояния потока сигнала. Если поток сигнала отсутствует (ложь), то выход ложен. Если поток сигнала присутствует (истина), то выход устанавливается в зависимости от результата сравнения. Команды сравнения SIMATIC FBD, IEC LAD и IEC FBD представляются как блоки, хотя операция выполняется как контакт.