Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
STEP7_V53_Programming_r.pdf
Скачиваний:
2
Добавлен:
29.05.2025
Размер:
5.18 Mб
Скачать

Приложение

Раздел кода OB80

Введите в раздел кода OB80, вызываемого операционной системой при появлении ошибки времени, следующую программу пользователя на STL:

STL (OB80)

 

Объяснение

Network 1

 

 

AN

Q 4.1

Установить выход Q 4.1, если произошла

S

Q 4.1

ошибка времени.

CALL SFC 20

Передача блоков: сохранить всю информацию

SRCBLK := #STARTINFO

о событии запуска в области памяти с MB110

RET_VAL := MW 210

по MB129.

DSTBLK := P#M 110.0 Byte 20

 

A.5.4 Пример обработки прерываний с задержкой

A.5.4.1 Пример обработки прерываний с задержкой

Структура пользовательской программы "Прерывания с задержкой" OB20

OB1

A.5.4.2 Структура программы пользователя "Прерывания с задержкой"

Задача

Когда вход I 0.0 устанавливается, выход Q 4.0 должен устанавливаться 10 секундами позже. Каждый раз, когда вход I 0.0 устанавливается, задержка должна перезапускаться.

Время (секунды и миллисекунды) запуска прерывания с задержкой должно появляться в виде специфического для пользователя идентификатора в информации о событии запуска OB прерываний с задержкой (OB20).

Если в течение этих 10 секунд устанавливается I 0.1, то организационный блок OB20 не должен вызываться; значение выхода Q 4.0 не должно устанавливаться.

Когда устанавливается вход I 0.2, выход Q 4.0 должен сбрасываться.

Преобразование в программу пользователя

Следующая таблица показывает подзадачи используемых блоков.

Блок Подзадача

OB1 Чтение текущего времени и подготовка к запуску прерывания с задержкой Запуск прерывания с задержкой в зависимости от фронта сигнала на входе I 0.0

Отмена прерывания с задержкой в зависимости от состояния прерывания с задержкой и фронта сигнала на входе I 0.1

Сброс выхода Q 4.0в зависимости от состояния входа I 0.2

OB2 Установка выхода Q 4.0

0Чтение и подготовка текущего времени Сохранение информации о событии запуска в области меркеров

Программирование с помощью STEP 7 v5.3

 

A5E00261405-01

A-93

Приложение

Используемые адреса

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

Адрес

Значение

I0.0

Вход для разблокировки действия «запуск прерывания с задержкой»

I0.1

Вход для отмены прерывания с задержкой

I0.2

Вход для сброса выхода Q 4.0

Q4.0

Выход, устанавливаемый OB (OB20) прерываний с задержкой

MB1

Используется как флаг фронта и буфер двоичного результата (бит

 

состояния BR) для SFC

MW4

STATUS [состояние] прерывания с задержкой (SFC34 "QRY_TINT")

MD10

Секунды и миллисекунды в двоично-десятичном коде из информации о

 

событии запуска OB1

MW 100

RET_VAL в SFC32 "SRT_DINT"

MW102

RET_VAL в SFC34 "QRY_DINT"

MW104

RET_VAL в SFC33 "CAN_DINT"

MW106

RET_VAL в SFC20 "BLKMOV"

с MB120 по MB139

Память для информации о событии запуска OB20

MD140

Секунды и миллисекунды в двоично-десятичном коде из информации о

 

событии запуска OB20

MW144

Секунды и миллисекунды в двоично-десятичном коде из информации о

 

событии запуска OB1; извлекаются из информации о событии запуска OB20

 

(специфический для пользователя ID SIGN)

Используемые системные функции

В программе пользователя «Прерывания с задержкой» используются следующие SFC:

SFC32 "SRT_DINT"

:

Запуск прерывания с задержкой

SFC33 "CAN_DINT"

:

Отмена прерывания с задержкой

SFC34 "QRY_DINT"

:

Запрос прерывания с задержкой

 

Программирование с помощью STEP 7 v5.3

A-94

A5E00261405-01

Приложение

A.5.4.3 OB20

Раздел описаний

В отличие от раздела описаний OB20, заданного по умолчанию, описываются следующие временные локальные переменные:

Структура для всей информации о событии запуска (STARTINFO)

Структура для времени (T_STMP) внутри структуры STARTINFO

Имя переменной

Тип данных

Описание

Комментарий

STARTINFO

STRUCT

TEMP

Информация о запуске для

 

 

 

OB20

E_ID

WORD

TEMP

Идентификатор события:

PC_NO

BYTE

TEMP

Класс приоритета

OB_NO

BYTE

TEMP

Номер OB

D_ID 1

BYTE

TEMP

Данные ID 1

D_ID 2

BYTE

TEMP

Данные ID 2

SIGN

WORD

TEMP

Специфический для

 

 

 

пользователя ID

DTIME

TIME

TEMP

Время, с которым

 

 

 

запускается прерывание с

 

 

 

задержкой

T_STMP

STRUCT

TEMP

Структура для элементов

 

 

 

времени суток (временной

 

 

 

ярлык)

YEAR

BYTE

TEMP

 

MONTH

BYTE

TEMP

 

DAY

BYTE

TEMP

 

HOUR

BYTE

TEMP

 

MINUTES

BYTE

TEMP

 

SECONDS

BYTE

TEMP

 

MSEC_WDAY

WORD

TEMP

 

 

END_STRUCT

TEMP

 

 

END_STRUCT

TEMP

 

Программирование с помощью STEP 7 v5.3

 

A5E00261405-01

A-95

Приложение

Раздел кода

 

Введите в раздел кода OB20 следующую программу пользователя на STL:

STL (OB20)

 

Объяснение

Network 1

 

 

SET

 

Безусловно установить выход Q 4.0

=

Q 4.0

 

Network 2:

 

 

L

QW 4

Немедленно активизировать выходное слово

T

PQW 4

 

Network 3:

 

 

L

#STARTINFO.T_STMP.SECONDS

Считать секунды из информации о событии

T

MW 140

запуска

L

#STARTINFO.T_STMP.MSEC_WDAY

Считать миллисекунды и день недели из

T

MW 142

информации о событии запуска

L

MD 140

 

SRD

4

Удалить день недели и записать обратно

T

MD 140

миллисекунды (теперь в BCD-коде в MW 142)

Network 4:

 

Считать время запуска прерывания с

L

#STARTINFO.SIGN

задержкой (= вызова SFC32) из информации о

T

MW 144

событии запуска

Network 5:

 

Копировать информацию о событии запуска в

CALL SFC 20

SRCBLK := STARTINFO

область памяти (с MB120 по MB139)

RET_VAL := MW 106

 

DSTBLK := P#M 120.0 Byte 20

 

 

Программирование с помощью STEP 7 v5.3

A-96

A5E00261405-01

Приложение

A.5.4.4 OB1

Раздел описаний

В отличие от раздела описаний OB1, заданного по умолчанию, описываются следующие временные локальные переменные:

Структура для всей информации о событии запуска (STARTINFO)

Структура для времени (T_STMP) внутри структуры STARTINFO

Имя переменной

Тип данных

Описание

Комментарий

STARTINFO

STRUCT

TEMP

Информация о запуске

 

 

 

для OB1

E_ID

WORD

TEMP

ID события:

PC_NO

BYTE

TEMP

Класс приоритета

OB_NO

BYTE

TEMP

Номер OB

D_ID 1

BYTE

TEMP

Данные ID 1

D_ID 2

BYTE

TEMP

Данные ID 2

CUR_CYC

INT

TEMP

Текущее время цикла

MIN_CYC

INT

TEMP

Минимальное время

 

 

 

цикла

MAX_CYC

INT

TEMP

Максимальное время

 

 

 

цикла

T_STMP

STRUCT

TEMP

Структура для

 

 

 

подробностей суточного

 

 

 

времени (временной

 

 

 

ярлык)

YEAR

BYTE

TEMP

 

MONTH

BYTE

TEMP

 

DAY

BYTE

TEMP

 

HOUR

BYTE

TEMP

 

MINUTES

BYTE

TEMP

 

SECONDS

BYTE

TEMP

 

MSEC_WDAY

WORD

TEMP

 

 

END_STRUCT

TEMP

 

 

END_STRUCT

TEMP

 

Программирование с помощью STEP 7 v5.3

 

A5E00261405-01

A-97

Приложение

Раздел кода

Введите в раздел кода OB1 следующую программу пользователя на STL:

STL (OB1)

 

Объяснение

Network 1

 

Считать секунды из информации о событии

L

#STARTINFO.T_STMP.SECONDS

T

MW 10

запуска

L

#STARTINFO.T_STMP.MSEC_WDAY

Считать миллисекунды и день недели из

T

MW 12

информации о событии запуска

L

MD 10

Удалить день недели и записать обратно

SRD

4

миллисекунды (теперь в BCD-коде в MW 12)

T

MD 10

Положительный фронт на входе I 0.0?

Network 2:

 

A

I 0.0

 

FP

M 1.0

 

=M 1.1

Network 3:

 

Если да, то запустить прерывание с задержкой

 

A

M 1.1

(время запуска прерывания с задержкой,

 

JNB

m001

присвоенное параметру SIGN)

 

CALL SFC 32

 

 

OB_NO := 20

 

 

DTME

:= T#10S

 

 

SIGN

:= MW 12

 

 

RET_VAL:= MW 100

 

m001:

NOP

0

 

Network 4:

 

Запрос состояния прерывания с задержкой

 

CALL SFC 34

(SFC QRY_DINT)

 

OB_NO := 20

 

 

RET_VAL:= MW 102

 

 

STATUS := MW 4

 

Network 5:

 

Положительный фронт на входе I 0.1?

 

A

I 0.1

 

 

FP

M 1.3

 

 

=

M 1.4

 

Network 6:

 

...и прерывание с задержкой запущено (бит 2

 

A

M 1.4

STATUS [состояния] прерывания с задержкой)?

 

A

M 5.2

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

 

JNB

m002

 

 

CALL SFC 33

 

 

OB_NO := 20

 

 

RET_VAL:= MW 104

Сбросить выход Q 4.0 через вход I 0.2

m002:

NOP

0

 

 

A

I 0.2

 

 

R

Q 4.0

 

 

Программирование с помощью STEP 7 v5.3

A-98

A5E00261405-01

Приложение

A.5.4.5 Пример маскирования и демаскирования синхронных ошибок

Следующий пример программы пользователя показывает, как маскировать и демаскировать синхронные ошибки. При использовании SFC36 "MSK_FLT" в программируемом фильтре ошибок маскируются следующие ошибки:

Ошибка длины области при чтении

Ошибка длины области при записи

Вторым вызовом SFC36 "MSK_FLT" можно замаскировать также область доступа:

• Ошибка доступа для ввода/вывода при записи

Замаскированные синхронные ошибки запрашиваются с помощью SFC38 "READ_ERR". "Ошибка доступа для ввода/вывода при записи" демаскируется с помощью SFC37 "DMSK_FLT.

Раздел кода

Ниже Вы найдете OB1, в котором запрограммирован пример программы пользователя в форме списка операторов.

 

STL (Network 1)

 

 

Объяснение

 

AN

M 255.0

 

Бит не сохраняемой памяти M 255.0 (только

 

JNB

m001

 

при первом прогоне = 0)

 

 

 

 

CALL

SFC 36

 

SFC36 MSK_FLT (маскирование синхронных

 

PRGFLT_SET_MASK

:=DW#16#C

ошибок) Бит 2 = Бит 3 = 1 (BLFL и BLFS

 

маскируются)

 

ACCFLT_SET_MASK

:=DW#16#0

Все биты=0 (ошибки доступа не маскируются)

 

Возвращаемое значение

 

RET_VAL

 

:=MW 100

Выходной фильтр текущей программной

 

 

ошибки в MD10

 

PRGFLT_MASKED

:=MD 10

Выходной фильтр текущей ошибки доступа в

 

ACCFLT_MASKED

:=MD 14

MD14

 

Установить M255.0, если маскирование

 

m001: A

BR

 

 

 

успешно.

 

S

M 255.0

 

 

 

STL (Network 2)

 

 

Объяснение

 

 

 

 

CALL

SFC 36

 

SFC36 MSK_FLT (маскирование синхронных

 

PRGFLT_SET_MASK

:=DW#16#0

ошибок)

 

Все биты=0 (дальнейшие программные ошибки

 

ACCFLT_SET_MASK

:=DW#16#8

не маскируются

 

Бит 3 = 1 (ошибки доступа для записи

 

RET_VAL

 

:=MW 102

маскируются)

 

 

Возвращаемое значение

 

PRGFLT_MASKED

:=MD 20

Выходной фильтр текущей программной

 

ACCFLT_MASKED

:=MD 24

ошибки в MD20

 

Выходной фильтр текущей ошибки доступа в

 

 

 

 

MD24

 

STL (Network 3)

 

 

Объяснение

 

 

 

 

AN

M 27.3

 

Завершить блок, если ошибка доступа для

 

BEC

 

 

записи (бит 3 в ACCFLT_MASKED) не

 

 

 

 

замаскирована

 

STL (Network 4)

 

 

Объяснение

 

 

 

 

L

B#16#0

 

 

 

T

PQB 16

 

Доступ для записи (при значении 0)в PQB 16

Программирование с помощью STEP 7 v5.3

 

A5E00261405-01

A-99

Приложение

 

STL (Network 5)

 

 

Объяснение

 

CALL

SFC 38

 

SFC38 READ_ERR (запрос синхронных ошибок)

 

 

PRGFLT_QUERY

:=DW#16#0

Все биты=0 (программные ошибки не

 

запрашиваются)

 

ACCFLT_QUERY

:=DW#16#8

Бит 3 = 1 (ошибка доступа для записи

 

запрашивается)

 

RET_VAL

 

:=MW 104

Возвращаемое значение

 

 

Выходной фильтр текущей программной

 

PRGFLT_CLR

:=MD 30

ошибки в MD30

 

ACCFLT_CLR

:=MD 34

Выходной фильтр текущей ошибки доступа в

 

MD34

 

A

BR

 

Ошибок не происходило и обнаружена ошибка

 

 

доступа для записи

 

A

M 37.3

 

Инвертировать RLO

 

NOT

 

 

M 0.0=1, если присутствует PQB 16

 

=

M 0.0

 

 

 

 

STL (Network 6)

 

 

Объяснение

 

 

 

 

L

B#16#0

 

 

 

 

T

PQB 17

 

Доступ для записи (при значении 0) в PQB 17

 

STL (Network 7)

 

 

Объяснение

 

 

 

 

CALL

SFC 38

 

SFC38 READ_ERR (запрос синхронных ошибок)

 

 

PRGFLT_QUERY

:=DW#16#0

Все биты=0 (программные ошибки не

 

запрашиваются)

 

ACCFLT_QUERY

:=DW#16#8

Бит 3 = 1 (ошибка доступа для записи

 

запрашивается)

 

RET_VAL

 

:=MW 104

Возвращаемое значение

 

 

Выходной фильтр текущей программной

 

PRGFLT_CLR

:=MD 30

ошибки в MD30

 

ACCFLT_CLR

:=MD 34

Выходной фильтр текущей ошибки доступа в

 

MD34

 

A

BR

 

Ошибок не происходило и обнаружена ошибка

 

 

доступа для записи

 

A

M 37.3

 

Инвертировать RLO

 

NOT

 

 

M 0.1=1, если присутствует PQB 17

 

=

M 0.1

 

 

 

 

STL (Network 8)

 

 

Объяснение

 

 

 

 

L

B#16#0

 

 

 

 

T

PQB 18

 

Доступ для записи (при значении 0) в PQB 18

 

STL (Network 9)

 

 

Объяснение

 

 

 

 

CALL

SFC 38

 

SFC38 READ_ERR (запрос синхронных ошибок)

 

 

PRGFLT_QUERY

:=DW#16#0

Все биты=0 (программные ошибки не

 

запрашиваются)

 

ACCFLT_QUERY

:=DW#16#8

Бит 3 = 1 (ошибка доступа для записи

 

запрашивается)

 

RET_VAL

 

:=MW 104

Возвращаемое значение

 

 

Выходной фильтр текущей программной

 

PRGFLT_CLR

:=MD 30

ошибки в MD30

 

ACCFLT_CLR

:=MD 34

Выходной фильтр текущей ошибки доступа в

 

MD34

 

A

BR

 

Ошибок не происходило и обнаружена ошибка

 

 

доступа для записи

 

A

M 37.3

 

Инвертировать RLO

 

NOT

 

 

M 0.2=1, если присутствует PQB 18

 

=

M 0.2

 

 

 

 

STL (Network 10)

 

 

Объяснение

 

 

 

 

L

B#16#0

 

 

 

 

 

 

 

Программирование с помощью STEP 7 v5.3

A-100

 

 

A5E00261405-01

 

 

 

 

Приложение

 

 

 

 

Доступ для записи (при значении 0) в PQB 19

 

T

PQB 19

 

 

STL (Network 11)

 

 

Объяснение

 

CALL

SFC 38

 

SFC38 READ_ERR (запрос синхронных ошибок)

 

 

 

 

 

Все биты=0 (программные ошибки не

 

PRGFLT_QUERY

:=DW#16#0

запрашиваются)

 

 

 

 

Бит 3 = 1 (ошибка доступа для записи

 

ACCFLT_QUERY

:=DW#16#8

запрашивается)

 

RET_VAL

 

:=MW 104

Возвращаемое значение

 

 

Выходной фильтр текущей программной

 

PRGFLT_CLR

:=MD 30

ошибки в MD30

 

 

 

 

Выходной фильтр текущей ошибки доступа в

 

ACCFLT_CLR

:=MD 34

MD34

 

 

 

 

Ошибок не происходило и обнаружена ошибка

 

A

BR

 

доступа для записи

 

A

M 37.3

 

Инвертировать RLO

 

NOT

 

 

M 0.3=1, если присутствует PQB 19

=M 0.3

 

STL (Network 12)

 

 

Объяснение

 

 

CALL

SFC 37

 

SFC37 DMSK_FLT (демаскирование

 

 

PRGFLT_RESET_MASK

:=DW#16#0

синхронных ошибок)

 

 

Все биты=0 (дальнейшие программные ошибки

 

 

ACCFLT_RESET_MASK

:=DW#16#8

не демаскируются)

 

 

Бит 3 = 1 (ошибка доступа для записи

 

 

RET_VAL

 

:=MW 102

демаскируется)

 

 

 

Возвращаемое значение

 

 

PRGFLT_MASKED

:=MD 20

Выходной фильтр текущей программной

 

 

 

 

 

ошибки в MD20

 

 

ACCFLT_MASKED

:=MD 24

Выходной фильтр текущей ошибки доступа в

 

 

 

 

 

MD24

 

STL (Network 13)

 

 

Объяснение

 

 

 

 

 

A

M 27.3

 

Завершить блок, если ошибка доступа для

 

 

BEC

 

 

записи (бит 3 в ACCFLT_MASKED) не

 

 

 

 

 

демаскирована

 

STL (Network 14)

 

 

Объяснение

 

 

 

 

 

A

M 0.0

 

 

 

 

JNB

m002

 

 

 

 

L

IB 0

 

Преобразовать IB0 в PQB 16, если он есть

 

 

T

PQB 16

 

 

 

m002:

NOP

0

 

 

 

STL (Network 15)

 

 

Объяснение

 

 

 

 

 

A

M 0.1

 

 

 

 

JNB

m003

 

 

 

 

L

IB 1

 

Преобразовать IB1 в PQB 17, если он есть

 

 

T

PQB 17

 

 

 

m003:

NOP

0

 

 

 

STL (Network 16)

 

 

Объяснение

 

 

 

 

 

A

M 0.2

 

 

 

 

JNB

m004

 

 

 

 

L

IB 2

 

Преобразовать IB2 в PQB 18, если он есть

 

 

T

PQB 18

 

 

 

m004:

NOP

0

 

 

 

 

 

 

 

 

STL (Network 17)

Объяснение

A

M 0.3

 

Программирование с помощью STEP 7 v5.3

A5E00261405-01

A-101

Приложение

JNB

m005

 

L

IB 3

Преобразовать IB3 в PQB 19, если он есть

T

PQB 19

 

m005: NOP

0

 

A.5.4.6 Пример блокировки и разблокировки прерываний и асинхронных ошибок (SFC39 и SFC40)

В этом примере программы пользователя предполагается раздел программы, выполнение которого не может прерываться прерываниями. Для этого раздела программы вызовы OB35 (прерывание по времени) блокируются при помощи SFC 39 "DIS_IRT", а позже снова разблокируются при помощи SFC 40 "EN_IRT".

SFC39 и SFC40 вызываются в OB1:

STL (OB1)

 

Объяснение

A

M 0.0

Раздел программы, который может

S

M 90.1

прерываться без проблем:

A

M 0.1

 

S

M 90.0

 

:

 

 

:

 

Раздел программы, который не должен

 

 

прерываться прерываниями:

CALL

SFC 39

Блокировать и сбрасывать прерывания

MODE

:=B#16#2

Режим 2: блокировать отдельные OB

OB_NO

:=35

прерываний

RET_VAL

:=MW 100

Блокировать OB35

:

 

 

:

 

 

L

PIW 100

 

T

MW 200

 

L

MW 90

 

T

MW 92

 

:

 

 

:

 

 

CALL

SFC 40

 

MODE

:=B#16#2

Разблокировать прерывания

OB_NO

:=35

Режим 2: разблокировать отдельные OB

RET_VAL

:=MW 102

прерываний

 

 

Разблокировать OB35

A

M 10.0

Раздел программы, который может

S

M 190.1

прерываться без проблем:

A

M 10.1

 

S

M 190.0

 

:

 

 

:

 

 

 

Программирование с помощью STEP 7 v5.3

A-102

A5E00261405-01

Приложение

A.5.4.7 Пример задержанной обработки прерываний и асинхронных ошибок (SFC41 и SFC42)

В этом примере программы пользователя предполагается раздел программы, выполнение которого не может прерываться прерываниями. Для этого раздела программы прерывания задерживаются при помощи SFC41 "DIS_AIRT", а позже снова разблокируются при помощи SFC42 "EN_AIRT".

SFC41 и SFC42 вызываются в OB1:

STL (OB1)

 

Объяснение

 

A

M 0.0

Раздел программы, который может

 

S

M 90.1

прерываться без проблем:

 

A

M 0.1

 

 

S

M 90.0

 

 

:

 

 

 

:

 

 

 

CALL

SFC 41

Раздел программы, который не должен

 

RET_VAL

:=MW 100

прерываться прерываниями:

 

L

PIW 100

Блокировать и задерживать прерывания

 

T

MW 200

 

 

L

MW 90

 

 

T

MW 92

 

 

:

 

 

 

:

 

 

 

:

 

 

 

CALL

SFC 42

Разблокировать прерывания

 

RET_VAL

:=MW 102

Число установленных блокировок прерываний

 

L

MW 100

находится в возвращаемом значении

 

DEC

1

Число установленных блокировок прерываний

 

находится в возвращаемом значении

 

L

MW 102

Это число после разблокировки прерываний

 

<>I

 

должно иметь такое же значение, как перед

 

 

блокировкой прерываний (здесь "0")

 

JC

err

Раздел программы, который может

 

 

 

 

A

M 10.0

прерываться без проблем:

 

 

 

S

M 190.1

 

 

A

M 10.1

 

 

S

M 190.0

 

 

:

 

 

 

:

 

Число установленных блокировок прерываний

 

BEU

 

отображается

err:

L

MW 102

 

 

T

QW 12

 

Программирование с помощью STEP 7 v5.3

 

A5E00261405-01

A-103