Команды вызова, активизации и завершения блоков

Команды вызова осуществляют условный или безусловный вызов командных (OB, PB, FB) блоков. Команды завершения блоков возвращают управление из текущего блока в вызывавший блок или системную программу. При выполнении команд вызова и завершения блоков возможно прерывание выполнения программы организационными блоками, работающими от входов (OB2...OB9) или по времени (OB10...OB18). Команды активизации блока данных делают указанный блок данных активным. Последующие обращения к словам или байтам данных будут относиться к новому активному блоку.

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

Общая структура шагового блока должна быть следующей:

STEP MWx (DWx, =fo)

SPA =S0

SPA =S1

SPA =S2 Структура перехода к текущему шагу

...............

SPA =Sn

BE

S0: Команды шага 0

Формирование условия перехода к следующему шагу Шаг 0

NXTS MWx (DWx, =fo)

S1: Команды шага 1

Формирование условия перехода к следующему шагу Шаг 1

NXTS MWx (DWx, =fo)

S2: Команды шага 2

Формирование условия перехода к следующему шагу Шаг 2

NXTS MWx (DWx, =fo)

...............

Sn: Команды шага n

Формирование условия перехода к следующему шагу Шаг n

NXTS MWx (DWx, =fo)

Команда STEP совместно с набором команд SPA =SM осуществляет переход к текущему шагу, номер которого берется из MWx (DWx, =fo) - операнда команды STEP. Между командами STEP, SPA =SM и BE не должно быть других команд или пустых строк. Если номер шага (содержимое MWx (DWx, =fo)) равен 0, то управление передается на команду SPA =S0 и далее на строку с меткой S0. Если номер шага (содержимое MWx (DWx, =fo)) равен 1, то управление передается на команду SPA =S1 и далее на строку с меткой S1, и т. д. Выполняются команды текущего шага. Затем в LA формируется логическое условие перехода к следующему шагу. Если LA=0, то команда NXTS выполняет выход из блока (аналогично команде BE). Если LA=1, то команда NXTS увеличивает на 1 номер текущего шага в MWx (DWx, =fo) и выполняет выход из блока. При выполнении блока в следующем цикле будет активизирован уже следующий шаг блока. Когда номер шага достигнет значения (n+1), то по команде STEP управление будет передаваться на команду, стоящую после команды SPA =Sn (в данном случае BE, обработка шагов выполняться не будет до тех пор, пока номер шага не будет изменен на значение <=n).

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

1) SPA - безусловный вызов блока.

Формат команды:

SPA OBn - безусловный вызов организационного блока;

SPA PBn - безусловный вызов программного блока;

SPA FBn - безусловный вызов функционального блока;

SPA =fo - безусловный вызов формального параметра.

где n - номер блока; fo - формальный параметр (OBn, PBn, FBn (без формальных параметров)).

Выполняется вызов блока независимо от каких-либо условий. Управление передается на начало вызванного блока. Команда не меняет аккумуляторы и флаги в OB и PB и изменяет флаги ZF, CF, SF, PF, OF в FB.

Формат индексной команды SPA:

B DWx(MWx) B DWx(MWx) B DWx(MWx)

+SPA OBn +SPA PBn +SPA FBn

где x - номер слова данных или метки, содержащего индекс; n - номер блока. Команда изменяет регистр флагов F. Команда “заканчивает опрос” (объяснение этого термина см. в п. 5.2).

2) SPB - условный вызов блока.

Формат команды:

SPB OBn - условный вызов организационного блока;

SPB PBn - условный вызов программного блока;

SPB FBn - условный вызов функционального блока;

SPB =fo - условный вызов формального параметра.

где n - номер блока; fo - формальный параметр (OBn, PBn, FBn (без формальных параметров)).

Выполняется вызов блока в зависимости от содержимого логического аккумулятора LA. Если LA равен 1, обработка текущего блока программы прерывается, и управление передается на начало вызванного блока. Если LA равен 0, вызов не выполняется и обработка текущего блока программы продолжается с команды, следующей за командой вызова. Команда изменяет флаги ZF, SF, PF. Флаги CF и OF сбрасываются в 0.

Формат индексной команды SPB:

B DWx(MWx) +SPB OBn B DWx(MWx) +SPB PBn B DWx(MWx) +SPB FBn

где x - номер слова данных или метки, содержащего индекс; n - номер блока. Команда изменяет состояние регистра флагов F. Команда “заканчивает опрос”.

3) BE - безусловный конец блока.

Формат команды: BE.

Обрабатываемый блок заканчивается безо всяких условий. Происходит возврат в предыдущий блок, где находился вызов. Обработка программы продолжается с команды, следующей за командой вызова. Команда не меняет аккумуляторы и флаги. Команда “заканчивает опрос”.

4) ВЕВ - условный конец блока.

Формат команды: ВЕВ.

Обрабатываемый блок заканчивается, если содержимое логического аккумулятора LA равно 1. Происходит возврат в предыдущий блок, где находился вызов. Обработка программы продолжается с команды, следующей за командой вызова. Если LA равен 0, обрабатываемый блок не заканчивается, и обработка текущего блока программы продолжается с команды, следующей за командой ВЕВ. Изменяются флаги ZF, SF, PF. Флаги CF и OF сбрасывается в 0. Команда “заканчивает опрос”.

5) STP - переход в режим “СТОП”.

Формат команды: STP.

Команда переводит контроллер в режим “СТОП” (Р0), прекращая обработку программы пользователя. Команда применяется, например, чтобы как можно скорее вывести контроллер в пассивное, безопасное состояние в случае программного обнаружения сбоев. Исполнение команды STP не зависит от результата логической операции. Команда не меняет аккумуляторы и флаги. Команда “заканчивает опрос”.

6) A - активизация блока данных.

Формат команды:

A DBn - активизация блока данных;

A =fo - активизация формального параметра.

где n - номер блока данных; fo - формальный параметр (DBn).

Команда активизации блока данных делает указанный блок данных активным. Последующие обращения к словам/байтам данных будут относиться к активному блоку. Команда не меняет аккумуляторы и флаги. Команда “заканчивает опрос”.

Формат индексной команды активизации блока данных:

B DWx(MWx)

+A DBn

где x - номер слова данных или метки, содержащего индекс; n - номер блока.

7) ТВЕ - активизация вызовов программного блока по времени.

Формат команды: ТВЕ PBn, m

где n - номер программного блока, m - значение параметра (см. в табл. 5.1).

Команды активизации вызовов блока по времени ТВЕ разрешают периодический вызов указанного программного блока через интервал времени Т, определяемый параметром m следующим образом:

Таблица 5.1

m              
T, мс 1,25 2,5          

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

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

Команда не меняет аккумуляторы и флаги. Команда “заканчивает опрос”.

8) TBD - отмена вызовов программного блока по времени.

Формат команды: TBD.

Команда TBD запрещает периодический вызов блока, разрешенный ранее командой TBE. Команда не меняет аккумуляторы и флаги. Команда “заканчивает опрос”.

9) STEP - переход на обработку шага.

Формат команды:

STEP MWx (DWx) - переход на обработку шага из MWx или DWx;

STEP =fo - переход на обработку шага из формального параметра.

где х - номер слова метки или данных, откуда берется номер шага; fo - формальный параметр (MWx, DWx).

Команда изменяет аккумулятор RW1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.

10) NXTS - конец шага в блоке.

Формат команды:

NXTS MWx (DWx);

NXTS =fo.

где х - номер слова метки или данных, откуда берется номер шага; fo - формальный параметр (MWx, DWx).

Если LA=1, то номер шага в MWx (DWx) или в формальном операторе увеличивается на 1. Команда изменяет флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: