Category Archives: Siemens PLC

Простые применения свободнопрограммируемого интерфейса 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 не возможны, зато возможны комментарии к сегментам.

Работа с аналоговыми потенциометрами S7-200

Этот пример поясняет применение аналоговых потенциометров SIMATIC CPU 214. Положение аналоговых потенциометров преобразуется в цифровое значение между 0 и 255 и заносится в два байта специальных, причем SMB28 содержит значения потенциометра 1, а SMB29 значение потенциометра 2.

Метод 1:

В качестве первого варианта рассмотрим применение аналогового потенциометра 0 для точной установки таймера. Грубая или предварительная установка (здесь 200мс) производится в программе. Потенциометр может быть при этом использован для дальнейшей установки нужного значения до ,примерно, 1,48 секунды. После каждого цикла таймера будут выполнятся операции подпрограммы 1: Значение потенциометра 0, содержащееся в SMB28, будет загружено в AC1, разделено пополам и прибавлено к 200мс-предустановке. В основной программе число циклов таймера в AC2 будет увеличено на 1 и индицировано на выходном байте AB0.

Метод 2:

Второй метод позволяет сложить и усреднить в AC3 значения потенциометра 1 в 100 следующих друг за другом циклах программы. В первом цикле запоминаются нижнее граничное в VW14 и верхнее граничное в VW16 значения. Если усредненное значение ниже нижней границы или выше верхней границы, то это значение заносится в VW12 и копируется в VW14, VW16 и VW18. Новые верхняя и нижняя границы задаются прибавлением или вычитанием 3мс к усредненному значению. Среднее значение потенциометра, сохраненное в VW18, будет передано в основную программу в таймер T34. Здесь считаются циклы таймера и индицируются затем на выходном байте AB1. Этот метод создает путем фильтрации значений потенциометра относительно постоянную установку таймера от 0 до 2,55 секунд.

Метод 3:

Метод 3 это прямая загрузка значения потенциометра в качестве предустановки для таймера T35. Здесь число циклов таймера будет индицироваться на выходном байте AB0. Установка таймера может быть изменена в любом цикле.

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

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

// Подпрограмма SBR 1:

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

SBR 1

LD T33 // После выполнения цикла таймера

MOVW 0, AC1 // аккумулятор AC1 сбрасывается

MOVB SMB28, AC1 // и значение потенциометра 0 копируется в AC1

MOVW 2, VW60

DIV VW60, AC1 // Принятое значение потенциометра делится пополам

+I 20, AC1 // и прибавляется смещение 200 мс

MOVW AC1, VW0 // Значение AC1 копируется в VW0

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

// Подпрограмма SBR 2:

// Определение среднего значения потенциометра 1 по 100 циклам программы

SBR 2

LD SM0.0 // В каждом цикле

INCW VW10 // счетчик циклов увеличивается на 1

MOVB SMB29, AC0 // Значение потенциометра 1 заносится в AC0

+I AC0, AC3 // Прибавляется к общему значению в AC3

LDW= VW10,100 // После 100 циклов

MOVW 100, VW50

DIV VW50, AC3 // Значение для образования среднего значения делится на 100

MOVW AC3, VW12 // Среднее значение заносится в VW12

MOVW 0, VW10 // Сброс счетчика циклов

MOVD 0, AC3 // Сброс памяти общего значения

= M0.0

LD M0.0

LDW<= VW12, VW14 // и новое среднее значение вне поля допуска

OW>= VW12, VW16

ALD

FILL VW12, VW14, 3 // Новое среднее значение копируется в VW14, VW16 и VW18

-I 3, VW14 // Установка новой нижней границы (Среднее значение — 3мс)

+I 3, VW16 // Установка новой верхней границы (Среднее значение + 3мс)

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

Для того чтобы преобразовать 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 требуют отдельных сегментов.

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

С помощью прерываний по времени создается тактовое мигание, причем частота мигания уполовинивается нажатием выключателя 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 требуют отдельных сегментов.

Подключение модема к Siemens ПЛК

Модемный модуль дает возможность подключать непосредственно к аналоговой телефонной линии и имеет следующие характеристики:

  • предоставляет интерфейс связи с международными телефонными линиями
  • предоставляет модемный интерфейс со STEP 7-Micro/WIN для программирования и устранения неисправностей (телесервис)
  • поддерживает протокол Modbus RTU
  • поддерживает цифровую и текстовую пейджинговую связь
  • поддерживает передачу коротких сообщений (SMS)
  • допускает передачу данных от CPU к CPU и от CPU к Modbus
  • предоставляет парольную защиту
  • обеспечивает обратный вызов для предотвращения несанкционированного доступа к данным

Конфигурация модемного модуля хранится в CPU

Для настройки модемного модуля можно использовать Мастер расширения функций

модема (Modem Expansion wizard) STEP 7-Micro/WIN.

Интерфейс со STEP 7-Micro/WIN

Модемный модуль допускает обмен данными со STEP 7-Micro/WIN через телефонную линию (телесервис). При работе со STEP 7-Micro/WIN вам не нужно настраивать или программировать CPU, чтобы использовать модемный модуль в качестве удаленного модема.

Для использования модемного модуля со STEP 7-Micro/WIN действуйте следующим образом:

  1. Снимите питание с CPU и присоедините модемный модуль к шине расширения ввода/вывода. Не подключайте модули ввода/вывода, пока CPU находится под напряжением.
  2. Подключите к модемному модулю телефонную линию. В случае необходимости используйте переходное устройство.
  3. Подключите питание 24 В постоянного тока к клеммному блоку модемного модуля.
  4. Подключите заземляющую клемму клеммного блока модемного модуля к земле системы.
  5. Установите в нужное положение переключатели кода страны.
  6. Подайте напряжение на CPU и модемный модуль.
  7. Настройте STEP 7-Micro/WIN на обмен данными с 10-битовым модемом.

Протокол Modbus RTU

Модемный модуль можно настроить так, чтобы он функционировал как slave-устройство Modbus RTU. Модемный модуль принимает запросы Modbus через модемный интерфейс, интерпретирует эти запросы и передает данные в CPU или из него. После этого модемный модуль генерирует ответ Modbus и передает его через модемный интерфейс.

Модемный модуль поддерживает функции Modbus, приведенные в таблице 1. Функции 4 и 16 Modbus позволяют считывать или записывать до 125 регистров временного хранения информации (250 байтов в памяти переменных) в одном запросе. Функции 5 и 15 ведут запись в регистр выходов образа процесса CPU. Эти значения могут быть перезаписаны программой пользователя.

Адреса Modbus обычно записываются в виде значений из 5 или 6 символов, содержащих тип данных и смещение.

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

Функции Modbus, поддерживаемые модемным модулем


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

Отображение адресов Modbus в адреса CPU

Пейджинговая связь и передача сообщений SMS

Модемный модуль поддерживает передачу цифровых и текстовых пейджинговых сообщений и сообщений SMS (Short Message Service [Служба коротких сообщений]) на сотовые телефоны (если они поддерживаются провайдером сотовой связи). Сообщения и телефонные номера хранятся в конфигурационном блоке модемного модуля, который должен быть загружен в блок данных CPU. Для создания сообщений и телефонных номеров конфигурационного блока модемного модуля можно воспользоваться Мастером расширения функций модема. Мастер расширения функций модема создает также программный код, позволяющий вашей программе инициировать передачу сообщений.

Цифровая пейджинговая связь

Цифровая пейджинговая связь использует для передачи цифровых значений на пейджер тональные сигналы кнопочного телефона. Модемный модуль набирает запрашиваемую пейджинговую службу, ожидает конца речевого сообщения, а затем передает тональные сигналы, соответствующие цифрам пейджингового сообщения. В пейджинговом сообщении разрешены цифры от 0 до 9, астериск (*), A, B, C и D. Символы, фактически отображаемые пейджером вместо астериска и A, B, C и D, не стандартизованы и определяются пейджером и провайдером пейджинговой связи.

Текстовая пейджинговая связь

Текстовая пейджинговая связь допускает передачу провайдеру пейджинговой связи и от него на пейджер алфавитно-цифровых сообщений. Провайдеры текстовой пейджинговой связи обычно имеют линию с модемом, которая принимает текстовые сообщения. Модемный модуль использует для передачи текстовых сообщений провайдеру пейджинговой связи алфавитно-цифровой протокол Telelocator (Telelocator Alphanumeric Protocol, TAP). Многие провайдеры текстовой пейджинговой связи используют этот протокол для приема сообщений.

Служба коротких сообщений (SMS)

Передача сообщений через Службу коротких сообщений (Short Message Service, SMS) поддерживается некоторыми службами сотовой телефонной связи, обычно теми, которые совместимы со стандартом GSM. SMS позволяет модемному модулю передавать сообщение по аналоговой телефонной линии провайдеру SMS. Затем провайдер SMS передает это сообщение на сотовый телефон, и сообщение появляется на текстовом дисплее телефона. Модемный модуль использует для передачи сообщений провайдеру SMS алфавитно-цифровой протокол Telelocator (Telelocator Alphanumeric Protocol, TAP) и универсальный компьютерный протокол (Universal Computer Protocol, UCP). SMS- сообщения можно передавать провайдеру SMS только в том случае, если он поддерживает эти протоколы на линии с модемом.

Переменные, вставленные в текстовые сообщения и в короткие сообщения SMS

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

Передача данных

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

С помощью Мастера расширения функций модема можно сконфигурировать передачу данных, во время которой производится одно считывание из удаленного устройства, одна запись в удаленное устройство или считывание из удаленного устройства и запись в него. При передаче данных используется сконфигурированный протокол модемного модуля. Если модемный модуль настроен на поддержку протокола PPI (тогда он может реагировать на STEP 7-Micro/WIN), то и для передачи данных используется протокол PPI. Если модемный модуль настроен на поддержку протокола Modbus RTU, то данные передаются с помощью протокола Modbus.

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

Защита с помощью пароля

Защита модемного модуля паролем не обязательна и активизируется с помощью мастера расширения функций модема. Пароль, используемый модемным модулем, отличается от пароля CPU. Модемный модуль использует собственный пароль из 8 символов, который абонент (вызывающая программа) должен предоставить модемному модулю, прежде чем он получит доступ к присоединенному CPU. Пароль хранится в памяти переменных CPU как часть конфигурационного блока модемного модуля. Конфигурационный блок модемного модуля должен быть загружен в блок данных присоединенного CPU.

Если в блоке системных данных активизирована парольная защита CPU, то абонент (вызывающая программа) должен предоставить этот пароль CPU, чтобы получить доступ к функциям, защищенным паролем.

 

Команды для обмена данными в Step7

Команда чтения из сети (NETR) инициирует коммуникационную операцию для получения данных из удаленного устройства через указанный порт (PORT), как указано в таблице (TBL). Команда записи через сеть (NETW) инициирует коммуникационную операцию для записи данных в удаленное устройство через указанный порт (PORT), как указано в таблице (TBL).

Сбойные состояния, устанавливающие ENO = 0:

  • 0006 (косвенный адрес)

Команда NETR может прочитать до 16 байтов информации из удаленной станции, а команда NETW может записать до 16 байтов информации в удаленную станцию.

В программе можно иметь любое количество команд NETR/NETW, но одновременно можно активизировать не более восьми команд NETR и NETW.

С помощью мастера команд для операций чтения из сети и записи через сеть вы можете создать счетчик. Для запуска этого мастера команд выберите команду меню Tools > Instruction Wizard [Инструменты > Мастер команд], а затем в окне мастера команд выберите опцию Network Read/Network Write [Чтение из сети/Запись через сеть].

Параметр TBL для команд чтения из сети и записи через сеть

Коды ошибок для параметра TBL2

Рисунок

 

Команды Step7, связанные со временем

Чтение и установка часов реального времени

Команда чтения часов реального времени (TODR) считывает текущее время и дату из аппаратных часов и загружает их в 8-байтовый буфер времени, начиная с адреса T. Команда установки часов реального времени (TODW) записывает в аппаратные часы текущее время и дату, загруженные в 8-байтовый буфер, начинающийся с адреса, указанного параметром T.

Все значения даты и времени необходимо записывать в формате BCD (например, 16#97 для 1997 года). На рисунке, представленном ниже, показан формат 8-байтового буфера времени (T).

После продолжительного отключения питания или потери памяти часы реального времени (TOD) инициализируют следующую дату и время:

  • Дата: 01-Янв-90
  • Время: 00:00:00
  • День недели: Воскресенье

Сбойные состояния, устанавливающие ENO = 0

  • 0006 (косвенный адрес)
  • 0007 (ошибка даты TOD) Только для установки часов реального времени
  • 000C (часы отсутствуют)

Обычно ПЛК не проверяет соответствие дня недели дате. Могут быть восприняты неверные даты, например, 30 февраля. Правильность даты должны обеспечивать прграммисты при написании скрипта.

Не используйте команду TODR/TODW одновременно в главной программе и программе обработки прерывания. Эта команда не будет исполнена в программе обработки прерывания, которая пытается ее выполнить, когда действует другая команда TODR/TODW. Если делается попытка одновременно двух обращений к часам, то устанавливается SM4.3 (нефатальная ошибка 0007).

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

Високосные годы обрабатываются правильно до 2096 года.

Чтение расширенных часов реального времени

Команда чтения расширенных часов реального времени (TODRX) считывает текущую конфигурацию времени, даты и летнего времени из ПЛК и загружает их в 19– байтовый буфер, начинающийся по адресу, указанному параметром T.

Сбойные состояния, устанавливающие ENO = 0

  • 0006 (косвенный адрес)
  • 000C (отсутствует модуль часов)
  • 0091 (ошибка диапазона)

Установка расширенных часов реального времени Команда установки расширенных часов реального времени (TODWX) записывает текущую конфигурацию времени, даты и летнего времени в ПЛК из 19–байтового буфера, находящегося по адресу, указанному в параметре T.

Все значения даты и времени необходимо записывать в формате BCD (например, 16#02 для 2002 года). В таблице ниже показан формат 19–байтового буфера времени (T).

После продолжительного отключения питания или потери памяти часы реального времени инициализируют следующую дату и время:

Дата: 01-Jan-90

Время 00:00:00

День недели: воскресенье

Сбойные состояния, устанавливающие ENO = 0

  • 0006 (косвенный адрес)
  • 0007 (ошибка данных TOD)
  • 000C (отсутствует модуль часов)
  • 0091 (ошибка диапазона)

1 Европейская конвенция: Переводить часы на один час вперед в последнее воскресенье марта в 1:00 час ночи UTC (Universal Time Coordinated = универсальное синхронизированное время).  Переводить часы на один час назад в последнее воскресенье октября в 2:00 часа ночи UTC. (Местное время выполнения корректировки зависит от смещения часового пояса от UTC).

2 Конвенция США: Переводить часы на один час вперед в первое воскресенье апреля в 2:00 часа ночи местного времени. Переводить часы на один час назад в последнее воскресенье октября в 2:00 часа ночи местного времени.

3 Австралийская конвенция: Переводить часы на один час вперед в последнее воскресенье октября в 2:00 часа ночи местного времени. Переводить часы на один час назад в последнее воскресенье марта в 3:00 часа ночи местного времени.

4 Австралийская конвенция (Тасмания): Переводить часы на один час вперед в первое воскресенье октября в 2:00 часа ночи местного времени. Переводить часы на один час назад в последнее воскресенье марта в 3:00 часа ночи местного времени

5 Новозеландская конвенция: Переводить часы на один час вперед в первое воскресенье октября в 2:00 часа ночи местного времени. Переводить часы на один час назад 15 марта, если этот день приходится на воскресенье, или в первое воскресенье после 15 марта в 3:00 часа ночи местного времени

 

Стековые операции Step7

Логическое сопряжение 1-го и 2-го уровня по И

Команда логического сопряжения первого и второго уровня стека по И (ALD) логически сопрягает значения в первом и втором уровне стека, используя логическую операцию И. Результат загружается в вершину стека.

После выполнения ALD глубина стека уменьшается на единицу.

Логическое сопряжение 1-го и 2-го уровня поИЛИ

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

Дублирование вершины логического стека

Команда дублирования вершины логического стека (LPS) дублирует значение вершины стека и помещает это значение в стек. Дно стека выталкивается и теряется.

Копирование второго уровня стека

Команда копирования второго уровня стека (LRD) копирует второй уровень стека в его вершину. В стек ничего не помещается и из него ничего не извлекается, но его вершина замещается копией.

Извлечение вершины стека

Команда извлечения вершины стека (LPP) извлекает одно значение из стека. Второй уровень становится новой вершиной стека.

Логическое И для бита ENO

Команда логического И для бита ENO (AENO) выполняет логическое сопряжение бита ENO и вершины стека с использованием операции И, производя такой же эффект, как и бит ENO в блоке LAD или FBD. Результатом операции И является новая вершина стека. ENO – это булев выход для блоков в LAD и FBD. Если блок имеет поток сигнала на входе EN и выполняется без ошибок, то выход ENO передает поток сигнала следующему элементу. ENO может быть использован как деблокирующий бит, указывающий на успешное завершение команды. Бит ENO вместе с вершиной стека используется для воздействия на поток сигнала для выполнения последующих команд. У команд STL нет входа EN. Для выполнения условных операций вершина стека должна быть равна 1. В STL нет выхода ENO, но команды STL, соответствующие командам LAD и FBD с выходами ENO обязательно устанавливают специальный бит ENO. Доступ к этому биту осуществляется с помощью команды AENO.

Загрузка стека

Команда загрузки стека (LDS) дублирует бит стека (N) и помещает это значение в вершину стека. Дно стека выталкивается и теряется.

Как показано на рисeyrt, ПЛК использует логический стек для решения задач логики управления. В этих примерах «iv0»  «iv7» обозначают начальные значения логического стека, «nv» обозначает новое значение, поставляемое командой, а «S0» обозначает рассчитанное значение, сохраняемое в логическом стеке.