Внесение записи данных с помощью SFC58 "WR_REC"
С помощью SFC58 .WR_REC. (write record [внести запись]) Вы передаете запись данных, содержащуюся в RECORD, адресуемому модулю. Вы запускаете задание на запись, присваивая входному параметру REQ значение 1 при вызове SFC58. Если задание на запись смогло выполниться немедленно, то SFC возвращает в выходном параметре BUSY значение 0. Если BUSY имеет значение 1, то задание на запись еще не завершено.
Параметр | Описание | Тип данных | Область памяти | Характеристика |
---|---|---|---|---|
REQ | INPUT | BOOL | I, Q, M, D, L, константа |
REQ = 1: запрос на запись |
IOID | INPUT | BYTE | I, Q, M, D, L, константа |
Идентификатор адресной области: B#16#54 = периферийный вход (PI) B#16#55 = периферийный выход (PQ) Если модуль смешанный, то укажите идентификатор области самого младшего адреса. Если адреса одинаковы, укажите B#16#54. |
LADDR | INPUT | WORD | I, Q, M, D, L, константа |
Логический адрес модуля. У смешанных модулей указывайте младший из двух адресов. |
RECNUM | INPUT | BYTE | I, Q, M, D, L, константа | Номер записи данных (допустимые значения: от 2 до 240) |
RECORD | INPUT | ANY | I, Q, M, D, L | Запись данных. Допустимым является только тип данных BYTE. |
RET_VAL | OUTPUT | INT | I, Q, M, D, L | Если ошибка появляется, когда функция активна, то возвращаемое значение содержит код ошибки. |
BUSY | OUTPUT | BOOL | I, Q, M, D, L | BUSY = 1: процесс записи еще не закончен. |
Входной параметр RECORD
Передаваемые данные читаются из параметра RECORD при первом вызове SFC. Если передача записи данных длится дольше, чем вызов, то содержимое параметра RECORD больше не является релевантным для последующих вызовов SFC (для того же самого задания).
Информация об ошибках
Смотри раздел "Считывание записей данных с помощью функции SFC 59 "RD_REC".
Если происходит общая ошибка W#16#8544, то это показывает только то, что был заблокирован доступ по крайней мере к одному байту области памяти входов/выходов, содержащей запись данных. Передача данных была продолжена.
Чтение записи данных с помощью SFC59 "RD_REC"
С помощью SFC59 "RD_REC" (read record [читать запись]) Вы считываете запись данных с номером RECNUM из адресуемого модуля. Задание на чтение запускают, вызывая SFC59 и присваивая входному параметру REQ значение 1. Если задание на чтение может быть выполнено немедленно, то SFC возвращает в выходном параметре BUSY значение 0. Если BUSY имеет значение 1, то задание на чтение еще не завершилось. Считываемая запись данных вводится в область назначения, указанную параметром RECORD, если передача данных была свободна от ошибок.
Если Вы считываете запись данных с номером выше 1 из FM или CP, купленного до февраля 1997 (называемого ниже "старым модулем"), то реакция SFC59 отличается от реакции в случае нового модуля. Эта особая ситуация описана в разделе "Использование старых FM и CP S7-300 с номерами записей данных выше 1".
Нижеследующее относится к CPU S7-400 более низкой версии, чем показано в таблице ниже: Если область назначения меньше, чем считываемая запись данных, то в RET_VAL вводится W#16#80B1, а область назначения остается неизменной. Если длина области назначения и длина считываемой записи данных одинаковы, то в RET_VAL вместо значения 0 (нет ошибки) вводится длина записи данных в виде положительного значения.
CPU | Заказной номер | Версия (или выше) |
---|---|---|
CPU 412-1 | 6ES7412-1XF01-0AB0 | 03 |
CPU 413-1 | 6ES7413-1XG01-0AB0 | 03 |
CPU 413-2DP | 6ES7413-2XG01-0AB0 | 03 |
CPU 414-1 | 6ES7414-1XG01-0AB0 | 03 |
CPU 414-2DP | 6ES7414-2XG01-0AB0 | 03 |
CPU 414-2DP | 6ES7414-2XJ00-0AB0 | 03 |
CPU 416-1 | 6ES7416-1XJ01-0AB0 | 03 |
CPU 416-2DP | 6ES7416-2XK00-0AB0 | 03 |
CPU 416-2DP | 6ES7416-2XL00-0AB0 | 03 |
Параметр | Описание | Тип данных | Область памяти | Характеристика |
---|---|---|---|---|
REQ | INPUT | BOOL | I, Q, M, D, L, константа |
REQ = 1: запрос на запись |
IOID | INPUT | BYTE | I, Q, M, D, L, константа |
Идентификатор (ID) адресной области: B#16#54 = Периферийный вход (PI) B#16#55 = Периферийный выход (PQ) Если модуль смешанный, то задайте ID области с наименьшим адресом. Если адреса одинаковые, то задайте B#16#54. |
LADDR | INPUT | WORD | I, Q, M, D, L, константа | Логический адрес модуля. В случае смешанных модулей задайте меньший из двух адресов. |
RECNUM | INPUT | BYTE | I, Q, M, D, L, константа | Номер записи данных (разрешенные значения от 0 до 240) |
RET_VAL | OUTPUT | INT | I, Q, M, D, L | Если в то время, когда функция активна, происходит ошибка, то возвращаемое значение содержит код ошибки. Если область назначения больше, чем переданная запись данных, и при передаче не было ошибок, то вводится также длина фактически переданной записи данных в байтах (возможные значения: от +1 до +240). |
BUSY | OUTPUT | BOOL | I, Q, M, D, L | BUSY = 1: Чтение еще не закончилось |
RECORD | OUTPUT | ANY | I, Q, M, D, L | Область назначения для считываемой записи данных. В случае асинхронного выполнения SFC59 убедитесь, что фактические параметры RECORD имеют одинаковую информацию о длине во всех вызовах. Разрешен только тип данных BYTE |
Выходной параметр RET_VAL
- Если во время выполнения функции произошла ошибка, то возвращаемое значение содержит код ошибки.
- Если ошибок не было, то RET_VAL содержит:
- 0: если вся область назначения была заполнена данными из выбранной записи данных (запись данных может быть также неполной).
- длину фактически переданной записи данных в байтах (возможные значения: от +1 до + 240), если область назначения больше, чем переданная запись данных.
ошибка W#16#8545, то это указывает только на то, что был блокирован доступ, по крайней мере, к одному байту области памяти входов/выходов, содержащей запись данных. Запись данных была правильно считана модулем и записана в область памяти входов/выходов.
Установка RECORD
Если Вы хотите гарантировать, чтобы всегда читалась полная запись данных, то выберите область назначения длиной 241 байт. Если передача данных свободна от ошибок, то RET_VAL содержит фактическую длину записи данных.
Использование старых FM и CP S7-300 с номерами записей данных выше 1
Если Вы хотите считывать с помощью SFC59 "RD_REC" запись данных с номером выше 1 из старого FM S7-300 или старого CP S7-300, то помните о следующем:
- Если область назначения больше, чем фактическая длина требуемой записи данных, то никакие данные не вводятся в RECORD. RET_VAL имеет значение W#16#80B1
- Если область назначения меньше, чем фактическая длина требуемой записи данных, то CPU считывает столько байтов, начиная от начала записи, сколько определено в информации о длине RECORD, и вводит это количество байтов в RECORD. RET_VAL имеет значение 0
- Если длина, заданная в RECORD, равна фактической длине требуемой записи данных, то CPU считывает запись данных и вводит ее в RECORD. RET_VAL имеет значение 0
Информация об ошибках
"Реальные" данные об ошибках (коды ошибок W#16#8xyz) в следующей таблице могут быть разделены на два класса:
- Нерегулярные ошибки (коды ошибок от W#16#80A2 до 80A4, 80Cx):
При этом типе ошибки возможно, что ошибка будет устранена без принятия вами каких-либо мер, другими словами, целесообразно вновь вызвать SFC (в случае необходимости более одного раза). Примером нерегулярной ошибки является случай, когда требуемые ресурсы в настоящее время используются (W#16#80C3) - Постоянные ошибки (коды ошибки W#16#809x, 80A1, 80Bx, 80Dx):
Ошибка этого типа не будет устранена без принятия вами мер. Повторный вызов SFC будет успешным только после того, как ошибка устранена. Примером постоянной ошибки является ввод неправильной длины в RECORD (W#16#80B1)
Если Вы передаете записи данных ведомому устройству DPV1 с помощью SFC58 "WR_REC" или, если Вы выбираете записи данных из ведомого устройства DPV1 подчиненный с SFC59 "RD_REC", и если это устройство DPV1 функционирует в режиме DPV1, то ведущее устройство DP проверяет информацию об ошибках, которую оно получает от ведомого устройства DPV1, следующим образом:
Если код ошибки лежит в диапазонах W#16#8000 . W#16#80FF или W#16#F000 . W#16#FFFF, то ведущее устройство DP передает информацию об ошибках в SFC. Если код ошибки лежит вне указанных диапазонов, то CPU передает значение W#16#80A2 в SFC и приостанавливает ведомое устройство.
Для описания информации об ошибках, полученной от DPV1-устройства, см. раздел "Получение прерывания от ведомого устройства DP с помощью SFB 54 "RALRM" STATUS (состояние) [3].
Специальная информация об ошибках для SFC58 "WR_REC" и SFC59 "RD_REC".
Код ошибки (W#16#...) | Объяснение | Ограничение |
---|---|---|
7000 | Первый вызов с REQ=0: Передача данных не активна; BUSY имеет значение 0. | |
7001 | Первый вызов с REQ=1: Передача данных не активна; BUSY имеет значение 1. | Децентрализованная периферия |
7002 | Промежуточный вызов (REQ не имеет значения): Передача данных уже активна; BUSY имеет значение 1. | Децентрализованная периферия |
8090 | Задан недействительный логический базовый адрес: Нет назначения в SDB1/SDB2X или нет базового адреса | |
8092 | Тип, указанный в ссылке ANY, не BYTE. | Только S7-400 |
8093 | Этот SFC не разрешен для модуля, определяемого LADDR и IOID (разрешены следующие модули: модули S7-300 для S7-300, модули S7-400 для S7- 400, модули S7-DP для S7-300 и S7-400). | |
80A0 | Отрицательное подтверждение при считывании из модуля • модуль был снят во время задания на чтение или неисправен; • для Н-систем: односторонние I/О резервного CPU недоступны (напр., резервный CPU в режиме STOP). |
Только в случае SFC59 "RD_REC" |
80A1 | Отрицательное подтверждение при передаче записи данных в модуль • модуль был снят во время задания на чтение или неисправен; • для Н-систем: односторонние I/О резервного CPU недоступны (напр., резервный CPU в режиме STOP). |
Только в случае SFC58 "WR_REC" |
80A2 | Ошибка протокола DP на уровне 2, возможно, неисправность аппаратуры. | Децентрализованная периферия |
80A3 | Ошибка протокола DP в случае преобразователя данных с прямым каналом передачи данных или пользовательского интерфейса/пользователя. Возможно, неисправность аппаратуры. | Децентрализованная периферия |
80A4 | Ошибка связи в коммуникационной шине | Ошибка происходит между CPU и внешним интерфейсным модулем DP |
80B0 | • SFC недопустим для типа модуля. • Модуль не распознает запись данных. • Номер записи данных ≥ 241 не разрешен • В случае SFC58 (WR_REC) записи данных 0 и 1 не разрешены. |
|
80B1 | В параметре RECORD задана неправильная длина | • Для SFC58 "WR_REC": неправильная длина • Для SFC59 "RD_REC" (только при использовании старых FM S7-300 и CP S7-300): длина > длины записи • Для SFC13 "DPNRM_DG": длина < длины записи |
80B2 | Сконфигурированный слот не занят | |
80B3 | Фактический тип модуля не совпадает с типом модуля, требуемым в SDB1 | |
80C0 | В случае SFC59 (RD_REC): Модуль имеет запись данных, но все еще нет данных, которые нужно считывать. В случае SFC13 (DPNRM_DG): Нет доступных диагностических данных |
Только в случае SFC59 (RD_REC) или для SFC13 "DPNRM_DG" |
80C1 | Данные предыдущего задания на запись для той же самой записи данных в модуле еще не были обработаны модулем | |
80C2 | Модуль в настоящее время обрабатывает максимально возможное для CPU количество заданий | |
80C3 | Требуемые ресурсы (память и т.д.) в настоящее время заняты | |
80C4 | Внутренняя нерегулярная ошибка. Функция не может быть выполнена. • Повторите запуск задачи. При частом повторении ошибки проверьте Вашу систему на предмет электрических помех. |
|
80C5 | Децентрализованная периферия недоступна | Децентрализованная периферия |
80C6 | Передача записи данных была остановлена вследствие прерывания класса приоритета (горячий рестарт или фоновый режим) | Децентрализованная периферия |
<-- Предыдущая статья | Следующая статья --> |