Значение параметров REQ, RET_VAL и BUSY для асинхронных SFC
Асинхронно работающие SFC - это SFC, которые вызываются более одного раза до того, как они завершат выполнение своих функций. Следующие SFC всегда выполняются асинхронно или в определенных ситуациях:
- SFC7 "DP_PRAL"
- SFC11 "DPSYC_FR"
- SFC12 "D_ACT_DP"
- SFC13 "DPNRM_DG"
- SFC51 "RDSYSST"
- SFC55 "WR_PARM"
- SFC56 "WR_DPARM"
- SFC57 "PARM_MOD"
- SFC58 "WR_REC"
- SFC59 "RD_REC"
- SFC65 "X_SEND"
- SFC67 "X_GET"
- SFC68 "X_PUT"
- SFC69 "X_ABORT"
- SFC72 "I_GET"
- SFC73 "I_PUT"
- SFC74 "I_ABORT"
- SFC82 "CREA_DBL"
- SFC83 "READ_DBL"
- SFC84 "WRIT_DBL"
- SFC90 "H_CTRL"
- SFC102 "RD_DPARA"
Идентификация задания
Если Вы запускаете аппаратное прерывание, выдаете команды управления для ведомых DP-устройств, запускаете передачу данных или прерываете несконфигурированное соединение с помощью одной из вышеперечисленных SFC, а затем вновь вызываете ту же SFC до завершения текущего задания, то реакция SFC будет зависеть от того, включает ли в себя второй вызов тоже самое задание.
Следующая таблица объясняет, какие входные параметры определяют задание для каждой из этих функций SFC. Если эти параметры совпадают с параметрами еще не завершенного задания, то этот вызов SFC считается продолжающимся (follow-on) вызовом.
SFC | Задание идентифицируется посредством... |
---|---|
7 "DP_PRAL" | IOID, LADDR |
11"DPSYC_FR" | LADDR, GROUP, MODE |
13 "DPNRM_DG" | LADDR |
51 "RDSYSST" | SSL_ID, INDEX |
55 "WR_PARM" | IOID, LADDR, RECNUM |
56 "WR_DPARM" | IOID, LADDR, RECNUM |
57 "PARM_MOD" | IOID, LADDR |
58 "WR_REC" | IOID, LADDR, RECNUM |
59 "RD_REC" | IOID, LADDR, RECNUM |
65 "X_SEND" | DEST_ID, REQ_ID |
67 "X_GET" | DEST_ID, VAR_ADDR |
68 "X_PUT" | DEST_ID, VAR_ADDR |
69 "X_ABORT" | DEST_ID |
72 "I_GET" | IOID, LADDR, VAR_ADDR |
73 "I_PUT" | IOID, LADDR, VAR_ADDR |
74 "I_ABORT" | IOID, LADDR |
82 "CREA_DBL" | LOW_LIMIT, UP_LIMIT, COUNT, ATTRIB, SRCBLK |
83 "READ_DBL" | SRCBLK, DSTBLK |
84 "WRIT_DBL" | SRCBLK, DSTBLK |
90 "H_CTRL" | MODE, SUBMODE |
102 "RD_DPARA" | LADDR, RECNUM |
Входной параметр REQ
Входной параметр REQ (request [запрос]) используется исключительно для запуска задания:
- Если Вы вызываете SFC для выполнения задания, которое в данный момент не активно, то задание запускается с помощью REQ = 1 (ситуация 1)
- Если определенное задание было запущено и еще не завершено, а Вы вызываете SFC вновь, чтобы выполнить то же самое задание (например, в ОВ циклических прерываний), то SFC не анализирует REQ (ситуация 2)
Выходные параметры RET_VAL и BUSY
С помощью выходных параметров RET_VAL и BUSY отображается состояние исполнения.
- В ситуации 1 (первый вызов при REQ=1) в RET_VAL вводится W#16#7001, если системные ресурсы свободны и входные параметры правильны. Тогда устанавливается BUSY.
Если требуемые системные в данный момент используются или входные параметры содержат ошибки, то в RET_VAL вносится соответствующий код ошибки, а BUSY имеет значение 0.
В ситуации 2 (вызов, когда активно то же самое задание) в RET_VAL вносится W#16#7002 (это предупреждение о том, что это задание еще обрабатывается), а BUSY устанавливается - Следующее относится к последнему вызову задания:
- Если не произошло ошибки, то с помощью SFC13 "DPNRM_DG," SFC67 "X_GET" и SFC72 "I_GET" в RET_VAL в виде положительного числа байтов вводится количество передаваемых данных. Тогда BUSY имеет значение 0
Если происходит ошибка, то RET_VAL содержит информацию об этой ошибке, а BUSY 0 - Если не произошло ошибки, то с помощью SFC59 "RD_REC" в RET_VAL вводится размер записи данных в байтах или 0. В этом случае BUSY имеет значение 0.
Если происходит ошибка, то в RET_VAL вводится код ошибки, а BUSY имеет значение 0. - У всех остальных SFC, если задание было выполнено без ошибок, то в RET_VAL вводится 0, а BUSY имеет значение 0.
Если происходит ошибка, то в RET_VAL вводится код ошибки, а BUSY имеет значение 0
- Если не произошло ошибки, то с помощью SFC13 "DPNRM_DG," SFC67 "X_GET" и SFC72 "I_GET" в RET_VAL в виде положительного числа байтов вводится количество передаваемых данных. Тогда BUSY имеет значение 0
Если первый и последний вызов приходят одновременно, то реакция для RET_VAL и BUSY будет такой же, как описано для последнего вызова.
Следующая таблица дает обзор описанных выше соотношений. В частности, она показывает возможные значения выходных параметров, если выполнение задания не завершено после вызова SFC.
После каждого вызова Вы должны проанализировать в своей программе соответствующие выходные параметры.
Связь между вызовом, REQ, RET_VAL и BUSY во время выполнения задания.
Номер вызова | Тип вызова | REQ | RET_VAL | BUSY |
---|---|---|---|---|
1 | Первый вызов | 1 | W#16#7001 | 1 |
Код ошибки | 0 | |||
от 2 до (n - 1) | Промежуточный вызов |
Не имеет значения |
W#16#7002 | 1 |
N | Последний вызов |
Не имеет значения |
W#16#0000 (исключения: SFC59 "RD_REC", если целевая область больше, чем передаваемая запись данных, и SFC13 "DPNRM_DG," SFC67 "X_GET" и SFC72 "I_GET", если не было ошибок)
Код ошибки, если были ошибки |
0 0 |
<-- Предыдущая статья | Следующая статья --> |