---
title: "Руководство пользователя Библиотека paIEC104"
product: "Полигон"
document_number: "№ 1-RU-135062-1.2"
version: "1.2"
language: "ru"
source: "https://docs.owen.ru/product/poligon/doc/1203"
pdf: "https://docs.owen.ru/download/pdf/RuKr8.rp_biblioteka+paiec104_1-ru-135062-1.2.pdf"
generated: "2026-10-12"
---

# Руководство пользователя Библиотека paIEC104

## Содержание

- [Используемые термины и сокращения](#topic-108194)
- [Введение](#topic-108195)
- [Общие сведения](#topic-108196)
  - [Основные сведения о стандартах МЭК 60870-5](#topic-108197)
  - [Структура ASDU](#topic-108198)
- [Библиотека paIEC104](#topic-108199)
  - [Реализация протокола МЭК 60870-5-101 (IEC101uni)](#topic-108200)
  - [Реализация протокола МЭК 60870-5-104 (IEC104uni)](#topic-108201)
  - [Реализация протокола МЭК 60870-5-104. Сервер (IEC104Server)](#topic-108202)
  - [Входной буфер (IECBufIn)](#topic-108203)
  - [Выходной буфер (IECBufOut)](#topic-108204)
  - [Разбиение структуры типа ASDU M_EP\_\* (IECEPFromInt)](#topic-108205)
  - [Формирование структуры типа ASDU M_EP\_\* (IECIntFromEP)](#topic-108206)
  - [Расшифровка описателя качества типа ASDU M_IT\_\* (IECITSQIn)](#topic-108207)
  - [Формирование описателя качества типа ASDU M_IT\_\* (IECITSQOut)](#topic-108208)
  - [Расшифровка временных меток (IECTransTime)](#topic-108209)
  - [Получение отладочной информации (IECInfo)](#topic-108210)
- [Примеры настройки обмена по протоколу МЭК 60870-5-104](#topic-108211)
  - [Настройка обмена в режиме сервера по протоколу 5-104](#topic-108212)
    - [Передача информации о процессе в направлении контроля (M)](#topic-108213)
    - [Прием информации о процессе в направлении управления (C)](#topic-108214)
    - [Передача упакованных данных (M_EP\_\*)](#topic-108215)
    - [Передача интегральных сумм (M_IT\_\*)](#topic-108216)
  - [Настройка обмена в режиме клиента протокола 5-104](#topic-108217)
    - [Прием информации о процессе в направлении контроля (M)](#topic-108218)
    - [Передача информации о процессе в направлении управления (C)](#topic-108219)
    - [Прием упакованных данных (M_EP\_\*)](#topic-108220)
    - [Прием интегральных сумм (M_IT\_\*)](#topic-108221)
- [Примеры настройки обмена по протоколу МЭК 60870-5-101](#topic-108222)
  - [Настройка обмена в режиме сервера протокола 5-101](#topic-108223)
  - [Настройка обмена в режиме клиента протокола 5-101](#topic-108224)
- [Отладка и диагностика обмена](#topic-108225)
- [Описание типов информации ASDU](#topic-108226)
- [Причины передачи (COT)](#topic-108227)

<a id="topic-108194"></a>

## Используемые термины и сокращения

**Балансная передача** – режим передачи, при котором каждая из двух связанных станций (только в канале топологии точка-точка) является **комбинированной** и может начинать передачу сообщения в любой момент времени.

**Идентификатор типа** – однобайтное поле, определяющее структуру, тип и формат информационного объекта. Все информационные объекты одного блока данных прикладного уровня (**ASDU**) имеют одинаковую структуру, тип и формат.

**Комбинированная станция** – станция, которая может выступать в качестве **контролирующей** и **контролируемой**.

**Контролируемая станция** **(****Controlled** **Station****,** **Outstation****,** **Slave****,** **Server****)** – станция, которая передает информацию только по запросу контролирующей станции. Далее в документе – «сервер» или «контролируемая станция».

**Контролирующая станция** **(****Controlling** **Station****,** **Master****,** **Client****)** – станция, которая инициирует процедуру обмена информацией. Далее в документе – «клиент» или «контролирующая станция».

**Небалансная передача** – режим передачи, при котором только одна станция – **контролирующая** – может начинать передачу информации, а другая станция (все остальные станции при многоточечной топологии) – **контролируемая** – передает информацию только после запроса контролирующей станции.

**Объект информации** или **информационный объект** – группа данных вместе с ее идентификатором (адресом, наименованием).

**Описатель качества** – набор атрибутов, обеспечивающих дополнительной информацией о качестве объекта информации при передаче данных.

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

**ПЛК** – программируемый логический контроллер.

**Причина передачи** – однобайтное или двухбайтное поле, которое прилагается к **ASDU** для пояснения источника, инициирующего передачу данных в канал.

**Спорадическая передача** (в **Полигон** это **спонтанная передача**) – передача данных, инициируемая процессом пользователя при возникновении событий или изменений данных.

**ТИТ** – телеизмерение.

**ТС** – телесигнализация.

**ТУ** – телеуправление.

**Фоновое сканирование** – передача не изменившихся **ТС** и **ТИТ** в свободное время канала.

**Элемент информации** или **информационный элемент** – неделимая переменная, например, значение измеряемой величины или данные двухпозиционного состояния.

**ASDU** **(****Application** **Service** **Data** **Unit****)** – блок данных, обслуживаемый прикладным уровнем протокола.

**EPA** **(****Enhanced** **Performance** **Architecture****)** – архитектура с повышенной производительностью. Вместо классической семиуровневой [модели OSI](https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%82%D0%B5%D0%B2%D0%B0%D1%8F_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_OSI) архитектура EPA использует только три уровня: прикладной, канальный и физический, чтобы уменьшить время реакции при ограниченной скорости передачи.

**OPC UA (Open Platform Communications, Unified Architecture)** – промышленный протокол для обмена данными с ПЛК и для управления ими.. Спецификация OPC UA разработана организацией OPC Foundation.

**SQL** (**Structured Query Language**) – язык программирования для хранения и обработки информации в реляционной базе данных.

**Unix****-время** – количество секунд, прошедших с полуночи (00:00:00 UTC) 1 января 1970 года (четверг).

<a id="topic-108195"></a>

## Введение

Настоящее руководство описывает настройку обмена данными по протоколам **МЭК 60870-5-101** и **МЭК 60870-5-104** для контроллеров ОВЕН, программируемых в среде **Полигон**. Подразумевается, что читатель обладает базовыми навыками работы с **Полигон**, поэтому общие вопросы (например, создание и загрузка проектов) в данном документе не рассматриваются – они подробно описаны в документах [Руководство по программированию. Библиотека paCore](https://owen.ru/product/polygon/documentation) и [Быстрый старт](https://owen.ru/product/polygon/documentation).

Настройка обмена данными по протоколам **МЭК 60870-5-101** и **МЭК 60870-5-104** в среде **Полигон** осуществляется с помощью функциональных блоков из библиотеки <b>*paIEC*</b><b>*104*</b>. Данная библиотека доступна для работы при наличии соответствующей лицензии runtime (см. описание лицензионных пакетов [на странице среды программирования Полигон](https://owen.ru/product/polygon)).

Примеры в документе актуальны для версии среды **Полигон** – **1994**, версии библиотеки <b>*paIEC104*</b> – **921** и выше.

<a id="topic-108196"></a>

## Общие сведения

<a id="topic-108197"></a>

### Основные сведения о стандартах МЭК 60870-5

**МЭК 60870** – набор стандартов, определяющий системы, используемые для телеуправления и SCADA в электротехнике и энергетике. **Часть 5** определяет протоколы для контроля и управления с использованием постоянного соединения.

Стандарт разработан техническим комитетом МЭК №57 (рабочая группа 03).

Первая часть стандарта была опубликована в 1990 году и описывала преимущественно нижние уровни сетевой модели. Первое издание протокола **5-101** опубликовано в 1995 году. В 2000 году представлен **5-104** протокол, который во многом схож с последовательным **5-101** протоколом, но основан на применении стека [TCP/IP](https://ru.wikipedia.org/wiki/TCP/IP).

Стандарт оптимизирован для применения SCADA-системами: позволяет транслировать данные с удаленных станций на главную, обеспечивает оперативное управление с главной станции удаленными станциями.

Надежная передача данных обеспечивается показателями качества данных, а также контрольной суммой.

Стандарт позволяет оптимизировать трафик сети и использовать более экономичные сети с низкой пропускной способностью.

Дополнительно обеспечиваются такие функции, как временные отметки, блокировка операций, предотвращение несанкционированного доступа.

Существует идентичный российский стандарт ГОСТ Р МЭК 60870-5 «Устройства и системы телемеханики. Часть 5. Протоколы передачи» ([раздел 101](https://meganorm.ru/Data2/1/4293850/4293850742.pdf), [раздел 104](https://meganorm.ru/Data/58/5809.pdf)).

В **МЭК 60870-5** входят основные стандарты::

- **5-1** **Transmission** **Frame** **Formats** – описание передаваемых кадров;
- **5-2 Data Link Transmission Services** – описание сервисов канального уровня;
- **5-3 General Structure of Application Data** – общая структура прикладного уровня;
- **5-4 Definition and Coding of Information Elements**– определение и кодирование информации;
- **5-5** **Basic** **Application** **Functions** – применение сервисов прикладного уровня;
- **5-7** **Security** **extension** – расширение системы безопасности;
- **5-101** **Transmission** **Protocols** – сопутствующий стандарт для базовых задач телеуправления;
- **5-102** **Transmission** **Protocols** – сопутствующий стандарт для передачи интегральных данных измерений (не получил распространения);
- **5-103** **Transmission** **Protocols** – сопутствующий стандарт интерфейса защитного оборудования;
- **5-104** **Transmission** **Protocols** – сопутствующий стандарт для использования стека TCP/IP.

Стандарт оперирует следующими понятиями:

- **Контролирующая станция** **(****Controlling** **Station****,** **Master****,** **Client****)** – станция, инициирующая процедуру обмена информацией;
- **Контролируемая станция** **(****Controlled** **Station****,** **Outstation****,** **Slave****,** **Server****)** – станция, передающая информацию только по запросу контролирующей станции.

Поддерживаемые топологии сети изображены на рисунке ниже.

![IEC topo](https://docs.owen.ru/book_img/2148/134932.png)

*Поддерживаемые топологии сети*

**Уровни сетевой модели, определяемые стандартом 5-101 (модель EPA)**

| Уровень | Описание |
| --- | --- |
| Прикладной | Блоки данных, события с временными метками, синхронизация времени, управление, опрос (периодический и спорадический) |
| Канальный | Управление связью, контрольные суммы, адресация, подтверждение связи |
| Физический | [RS-232](https://ru.wikipedia.org/wiki/RS-232), [RS-485](https://ru.wikipedia.org/wiki/RS-485) и др. |

**Уровни сетевой модели, определяемые стандартом 5-104**

| Уровень | Описание |
| --- | --- |
| Прикладной | Блоки данных, события с временными метками, синхронизация времени, управление, опрос (периодический и спорадический). Интеграция со стеком TCP/IP |
| Транспортный и сетевой | TCP/IP |
| Канальный | RFC 894 |
| Физический | [IEEE 802.3 Ethernet](https://ru.wikipedia.org/wiki/Ethernet) |

<a id="topic-108198"></a>

### Структура ASDU

На прикладном уровне определяются блоки данных **ASDU** **(****Application** **Service** **Data** **Unit****)**.

**ASDU** содержит:

- Тип блока данных;
- Причину передачи;
- Адрес объектов информации;
- Объекты информации.

**Структура ASDU**

**Идентификатор блока данных**

| Название | Размер | Описание |
| --- | --- | --- |
| Идентификатор типа<br>(Type Identification – **Type ID**) | 1 байт | Структура, тип и формат данных |
| Классификатор переменной структуры<br>(Variable Structure Qualifier – **VSQ**) | 1 байт | Структура блока – тип объектов информации (объекты или элементы) и их количество |
| Причина передачи<br>(Cause Of Transmission – **COT**) | 1…2 байта | Пояснения источника, инициирующего передачу данных |
| Общий адрес станции<br>(**Common Adress** of ASDUs) | 1…2 байта | Уникальный адрес станции в сети |

**Объекты информации (один или несколько)**

Адрес объекта информации

Элемент информации (один или несколько)

Метка времени

Идентификатор типа **Type** **ID** составляет первое однобайтовое поле и определяет структуру, тип и формат объекта информации. Идентификатор типа принимает значения:

- **1…44** – статус и измерения;
- **45…99** – управляющие команды;
- **100…109** – команды для мониторинга;
- **110…119** – параметры измеряемых величин;
- **120…127** – передача файла.

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

- 1-й элемент: **M** – передача в направлении контроля (от сервера к клиенту), **C** – передача в направлении управления (от клиента к серверу), **P** – передача параметров, **F** – передача файлов;
- 2-й элемент – вид информации (две буквы);
- 3-й элемент: **T** – наличие метки времени, **N** – отсутствие метки времени;
- 4-й элемент – формат данных (**A**, **B**, **C** и т. д.).

Общее описание типов информации приведено в [Приложении А.](#topic-108226)

Классификатор переменной структуры **VSQ** составляет второе однобайтовое поле и определяет структуру блока, то есть тип информационных компонентов (объекты или элементы) и их количество.

Классификатор переменной структуры состоит из:

- **SQ** (бит 8) – тип объекта информации: **0** – Объект, **1** – элемент;
- **N** (биты 7…1) – количество объектов информации: **1…127**.

Причина передачи **COT** составляет третье однобайтовое поле (опционально – двухбайтовое).

Причина передачи состоит из:

- **Test** (бит 8) – тестовый режим передачи ASDU: **0** – рабочая передача, **1** – тестовая передача;
- **P****/****N** (бит 7): **0** – положительное подтверждение, **1** – отрицательное подтверждение;
- Причина передачи (биты 6…1): **1…47**.

Причины передачи перечислены в [Приложении Б.](#topic-108227)

**Общий адрес станции** занимает четвертое однобайтовое поле (опционально – двухбайтовое). Широковещательный адрес – **FF** (или **FFFF**).

**Объекты информации** представлены тремя типами:

- Одноэлементная информация – одна команда, событие или измерение;
- Многоэлементная информация – измерение и описатель качества;
- Последовательность элементов информации – серия измерений.

**Элемент информации** представлен четырьмя типами данных:

- Битовый;
- Целый;
- Вещественный;
- Строка битов (**Bitstring**).

В некоторые элементы информации включен **описатель качества**.

![Структура ASDU](https://docs.owen.ru/book_img/2148/134931.png)

*Структура ASDU*

Пример элемента информации типа **M****\_****SP****\_****NA**: одноэлементная информация (1 байт), в младшем разряде передается значение бита **SPI** **(****Single** **Point** **Information****)**. Описатель качества содержит:

- **IV (****I****nvalid/****V****alid)**: **0** – действительная, **1** – недействительная;
- **NT (****N****ot topical/****T****opical)**: **0** – актуальное значение, **1** – неактуальное значение;
- **SB (****S****ubstituted/****N****ot substituted)**: **0** – нет замещения, **1** – есть замещение. Значение величины поступает от оператора (**1**) или от автоматического источника (**0**);
- **BL (****B****locked/****N****ot blocked)**: **0** – нет блокировки, **1** – есть блокировка;
- **IN (****I****nversion)** – инверсное значение
- **GN (****G****eneral)** – обобщенная величина.

![Стр Эл ASDU](https://docs.owen.ru/book_img/2148/134930.png)

*Пример структуры элемента информации M_SP_NA*

<a id="topic-108199"></a>

## Библиотека paIEC104

Библиотека <b>*paIEC*</b><b>*104*</b> содержит функциональные блоки для реализации обмена по протоколам **МЭК 60870-5-101** и **МЭК 60870-5-104**.

В структуру библиотеки входят блоки [IEC101uni](#topic-108200) и [IEC104uni](#topic-108201), с помощью которых настраивается обмен по протоколам **5-101** (режим клиент) и **5-104** (режим сервер).. Для работы с этими блоками требуется подключить блоки работы с системными интерфейсами –<b>*210-*</b><b>*RS*</b><b>*485*</b>/<b>*210-*</b><b>*RS*</b><b>*485*</b> из библиотеки <b>*paOwenIO*</b> и<b>*TcpIpClA*</b> из библиотеки <b>*paCore*</b>.

> [!NOTE]
> **Примечание.** Для настройки сервера по протоколу **5-104** рекомендуется использовать более новый блок [IEC104Server](#topic-108202). Для его работы не требуется отдельный блок для работы с системным сокетом.

Блоки [IECBufIn](#topic-108203) и [IECBufOut](#topic-108204) реализуют входной и выходной буфер данных протокола, соответственно.

Остальные блоки библиотеки являются вспомогательными.

Блок [IECInfo](#topic-108210) используется для отладочных целей.

Для добавления библиотеки <b>*paIEC*</b><b>*104*</b> в проект следует:

1. Перейти в меню <b>*Окна/Проекты*</b>. В появившемся окне отобразится текущий проект и добавленные библиотеки.

   ![pa IEC104 01](https://docs.owen.ru/book_img/2148/134929.png)

   *Добавление библиотеки paIEC104 в проект*

2. Нажать кнопку <b>*Открыть*</b> и перейти в папку с файлами библиотеки, которую необходимо добавить. Затем в выпадающем списке выбрать тип файла <b>*Библиотека Полигон 2 (\*.*</b><b>*ll*</b><b>*2)*</b>.

   ![pa IEC104 02](https://docs.owen.ru/book_img/2148/134928.png)

   *Добавление библиотеки paIEC104 в проект*

3. В окне появится файл библиотеки с расширением **.****ll****2**. Следует выбрать его и нажать **Открыть**.

   ![pa IEC104 03](https://docs.owen.ru/book_img/2148/134927.png)

   *Добавление библиотеки paIEC104 в проект*

Добавленная библиотека отобразится в окне <b>*Проекты*</b>.

<a id="topic-108200"></a>

### Реализация протокола МЭК 60870-5-101 (IEC101uni)

Блок <b>*IEC101uni*</b> реализует протокол стандарта **МЭК 60870-5-101** и определяет функции контролирующей (клиента) и контролируемой станции (сервера).

Совместно с <b>*IEC101uni*</b> используются специальные буфера – [IECBufIn](#topic-108203) для получаемых данных/команд, [IECBufOut](#topic-108204) для отправляемых данных/команд. С помощью данных буферов создается база объектов информации, участвующих в обмене по указанному протоколу.

Так как работа блока занимает значительное время, данный блок следует размещать только в **Фоне**.

**Назначение входов и выходов IEC101uni**

**Входы**

| Элемент | Описание |
| --- | --- |
| cnc | Связь с блоком последовательного интерфейса <b>*210-RS485*</b>/<b>*210-RS232*</b> из библиотеки <b>*paOwenIO*</b> |
| enbl | Режим работы блока:<br>**0** – блок отключен;<br>**1** – блок в работе |
| ctl | Инициация команды управления.<br>Битовая маска:<br>**Бит 1** – инициировать команду общего опроса;<br>**Бит 7** – отсылать диагностические сообщения (**бит 12** на входе **cfg** должен быть установлен до компиляции проекта) |
| tm1 | Не используется |
| tm2 | Не используется |
| dbg | Конфигурация отладки.<br>Битовая маска:<br>**Бит 0…7** – битовая маска, которая определяет, какие типы сообщений выводить: **бит 0** – тип 1, ..., **бит 7** – тип 8 (высший уровень);<br>**Бит 8** – выводить в консоль;<br>**Бит 9** – выводить через блок <b>*Ram*</b><b>*Log*</b> из библиотеки <b>*paCore*</b> |
| bo | Входы для подключения <b>*IECBufOut*</b> (циклический) |

**Входы (константные)**

| Элемент | Описание |
| --- | --- |
| tmp | Период вызова главной функции блока, мс |
| prm | Тип канального уровня:<br>**IEC****\_****MASTER** – инициирует соединение;<br>**IEC****\_****SLAVE** – ожидает соединение |
| ltp | Режим канального уровня:<br>**IEC_BALANCED** – балансный;<br>**IEC_UNBALANCED** – небалансный |
| oa | Не используется |
| lka | Адрес станции в сети, если используется (**Link Address**) |
| las | Длина поля адреса станции. Определяется протоколом. Допустимые значения на входе:<br>**LINK_ADDR_NO** – адрес станции не используется;<br>**LINK_ADDR_1** – 1 байт;<br>**LINK_ADDR_2** – 2 байта |
| aas | Длина поля общего адреса ASDU. Определяется протоколом. Допустимые значения на входе:<br>**ASDU_ADDR_1** – 1 байт;<br>**ASDU_ADDR_2** – 2 байта |
| cts | Длина поля причины передачи (COT). Определяется протоколом. Допустимые значения на входе:<br>**COT_1** – 1 байт;<br>**COT_2** – 2 байта |
| iaa | Длина адреса объекта информации. Определяется протоколом. Допустимые значения на входе:<br>**IOA_1** – 1 байт;<br>**IOA_2** – 2 байта;<br>**IOA_3** – 3 байта |
| c1s | Глубина очереди сообщений класса 1 |
| c2s | Глубина очереди сообщений класса 2 |
| ofp | Если в течение этого времени (в мс) нет обмена, то по интерфейсу на выход **sts бит 0** блока выдается значение 0 – нет связи |
| frg | Максимальное межсимвольное расстояние при приеме кадра. Если это время (в мс) истекло – кадр считается недействительным |
| cpp | Период отправки с причиной передачи циклический, мс. Необходимость передачи данных с этой причиной задается для каждого выходного буфера. Рекомендуется задавать **cpp** **≠** **bpp** так, чтобы моменты срабатывания таймеров как можно реже пересекались |
| bpp | Период отправки сообщений с причиной передачи «фоновое сканирование», мс. Необходимость передачи данных с этой причиной задается для каждого выходного буфера. Рекомендуется задавать **cpp** **≠** **bpp** так, чтобы моменты срабатывания таймеров как можно реже пересекались |
| cfg | Конфигурация. Определяет поведение узла при старте и в процессе работы.<br>Битовая маска:<br>**Бит 0** – синхронизировать время после установления связи (используется системное время);<br>**Бит 1** – послать команду общего опроса после установления связи;<br>**Бит 4** – блокировать команду синхронизации времени;<br>**Бит 5** – включать метку времени при отправке данных с причиной передачи: циклические;<br>**Бит 6** – включать метку времени при отправке данных с причиной передачи: фоновое сканирование;<br>**Бит 8** – использовать структурированный адрес, прибавление стандартного смещения (для ТИТ смещение – **0x2000**, для ТС смещение – **0x1000**);<br>**Бит 12** – подключить протокол отправки диагностических сообщений |
| ito | Таймаут выполнения команды информация о процессе в направлении управления **C** (см. [Приложение А),](#topic-108226) мс |
| sto | Таймаут выбора команды информация о процессе в направлении управления **C** (см. [Приложение А),](#topic-108226) мс |

**Выходы**

| Элемент | Описание |
| --- | --- |
| itr | Выход для подключения <b>*IECBufIn*</b> |
| st1 | Выход статуса.<br>Битовая маска:<br>**Бит 0** – есть связь;<br>**Бит 1** – выполнена команда синхронизации времени;<br>**Бит 2** – первичный канальный уровень активен;<br>**Бит 3** – вторичный канальный уровень активен |
| st2 | Не используется |

![fb IEC101uni](https://docs.owen.ru/book_img/2148/134926.png)

*Блок IEC101uni*

Примеры работы с блоком приведены в [разделе](#topic-108223).

<a id="topic-108201"></a>

### Реализация протокола МЭК 60870-5-104 (IEC104uni)

Блок <b>*IEC104uni*</b> реализует протокол стандарта **МЭК 60870-5-104** и определяет функции контролирующей (клиента) и контролируемой станции (сервера).

> [!NOTE]
> **Примечание.** Для настройки сервера по протоколу **5-104** рекомендуется использовать более новый блок [IEC104Server](#topic-108202). Для него не требуется отдельный блок для работы с системным сокетом.

> [!NOTE]
> **Примечание.** В данном документе рассматривается обновленный блок <b>*IEC*</b><b>*104*</b><b>*uni*</b> (ревизия 2, версия библиотеки <b>*paIEC*</b><b>*104*</b> – **902** и выше).

Совместно с <b>*IEC104uni*</b> используются специальные буфера – [IECBufIn](#topic-108203) для получаемых данных/команд, [IECBufOut](#topic-108204) для отправляемых данных/команд. С помощью данных буферов создается база объектов информации, участвующих в обмене по указанному протоколу.

Данный блок следует размещать только в **Фоне**, потому что работа блока занимает значительное время.

**Назначение входов и выходов IEC104uni**

**Входы**

| Элемент | Описание |
| --- | --- |
| cnc | Связь с блоком <b>*TcpIpClA*</b> (для **IEC****\_****MASTER**) или <b>*TcpIp*</b><b>*SrA*</b> (для **IEC****\_****SLAVE**) из библиотеки <b>*paCore*</b> |
| enbl | Режим работы блока:<br>**0** – блок отключен;<br>**1** – блок в работе;<br>**2** – блок в работе, нет отправки данных (может использоваться для резерва) |
| ctl | Инициация команды управления.<br>Битовая маска:<br>**Бит 1** – инициировать команду общего опроса;<br>**Бит 2** – инициировать команду общего опроса счетчиков;<br>Бит 4 – не используется;<br>Бит 5 – не используется;<br>Бит 6 – не используется;<br>Бит 7 – не используется |
| tm1 | Не используется |
| tm2 | Не используется |
| dbg | Конфигурация отладки.<br>Битовая маска:<br>**Бит 0…7** – битовая маска, которая определяет, какие типы сообщений выводить: **бит 0** – тип 1, ..., **бит 7** – тип 8 (высший уровень);<br>**Бит 8** – выводить в консоль;<br>**Бит 9** – выводить через блок <b>*Ram*</b><b>*Log*</b> из библиотеки <b>*paCore*</b>;<br>Бит 10 – выводить через протокол отправки диагностических сообщений (для разработчиков);<br>**Бит 11** – выводить в консоль данные таймеров времени выполнения алгоритма и периода вызова алгоритма |
| bo | Входы для подключения <b>*IECBufOut*</b> (циклический) |

**Входы (константные)**

| Элемент | Описание |
| --- | --- |
| tmp | Период вызова главной функции блока, мс (см. [рисунок](#fig2)) |
| prm | Тип канального уровня:<br>**IEC****\_****MASTER** – инициирует соединение;<br>**IEC****\_****SLAVE** – ожидает соединение |
| oa | Не используется |
| w | Число пакетов, после получения последовательности которых узел обязан передать подтверждение о приеме (см. **t****2**): **w** **<** **k**, рекомендуется **w** **= 2/3****k** |
| k | Число пакетов, которое может отправить узел без подтверждения. Если **k** пакетов отправлено без подтверждения, то передача останавливается до получения подтверждения (см. **t****1**): **w** **<** **k**, рекомендуется **w** **= 2/3****k** |
| t1 | Таймаут при посылке кадров, мс. Если через время **t****1** не было получено подтверждение – соединение закрывается: **t2 < t1** |
| t2 | Таймаут для подтверждения, если число принятых пакетов **w** не достигнуто, мс: **t2 < t1** |
| t3 | Таймаут для посылки блоков тестирования при долгом простое, мс. С периодом **t****3** передается тестовый пакет для проверки канала, если ответа на тестовый пакет не последует – соединение закрывается |
| qsz | Длина очереди сообщений |
| cpp | Период отправки с причиной передачи «циклический», мс. Необходимость передачи данных с этой причиной задается для каждого выходного буфера. Рекомендуется задавать **cpp** **≠** **bpp** так, чтобы моменты срабатывания таймеров как можно реже пересекались |
| bpp | Период отправки сообщений с причиной передачи «фоновое сканирование», мс. Необходимость передачи данных с этой причиной задается для каждого выходного буфера. Рекомендуется задавать **cpp** **≠** **bpp** так, чтобы моменты срабатывания таймеров как можно реже пересекались |
| cfg | Конфигурация. Определяет поведение узла при старте и в процессе работы.<br>Битовая маска:<br>**Бит 0** – синхронизировать время после установления связи (используется системное время);<br>**Бит 1** – послать команду общего опроса после установления связи;<br>**Бит 2** – использовать глобальное время (UTC) в метках времени;<br>**Бит 3** – принудительно считать временные метки действительными;<br>**Бит 4** – блокировать команду синхронизации времени;<br>**Бит 5** – включать метку времени при отправке данных с причиной передачи: циклические;<br>**Бит 6** – включать метку времени при отправке данных с причиной передачи: фоновое сканирование;<br>**Бит 7** – включать метку времени при отправке данных с причиной передачи: общий опрос;<br>**Бит 8** – использовать структурированный адрес, прибавление стандартного смещения (для ТИТ смещение – **0x2000**, для ТС смещение – **0x1000**);<br>**Бит 9** – отключить замещение старых данных новыми в очереди;<br>Бит 12 – не используется;<br>Биты 16, 17, 18 и 19 – 4-х битовое число. В режиме контролируемой станции (**IEC****\_****SLAVE**), определяет максимальное количество одновременно подключаемых контролирующих станций |
| ito | Таймаут выполнения команды информация о процессе в направлении управления **C** (см. [Приложение А),](#topic-108226) мс |
| sto | Таймаут выбора команды информация о процессе в направлении управления **C** (см. [Приложение А),](#topic-108226) мс |
| bufsz | Размер буферов приема и передачи, байт |

**Выходы**

| Элемент | Описание |
| --- | --- |
| itr | Выход для подключения <b>*IECBufIn*</b> |
| st0 | Выход статуса.<br>Битовая маска:<br>**Бит 0** – есть связь;<br>**Бит 1** – выполнена команда синхронизации времени |
| st1 | Не используется |

![fb IEC104uni](https://docs.owen.ru/book_img/2148/134925.png)

*Блок IEC104uni*

Рассмотрим алгоритм работы связки блоков <b>*TcpIpClA*</b> и <b>*IEC*</b><b>*104*</b><b>*uni*</b> (см. [рисунок](#fig2)).

В фоновом потоке последовательно вызываются главные функции блоков. В алгоритме работы протокола можно выделить четыре основные подпрограммы, первые две из которых реализуют работу с системным сокетом (блок <b>*TcpIpClA*</b>).

Период вызова главной функции блока <b>*IEC*</b><b>*104*</b><b>*uni*</b> (и соответствующих подпрограмм) определяется входом **tmp**. Задание **tmp** может быть полезно для разгрузки потока в пользу других алгоритмов. При отсутствии ограничений можно установить **tmp** **= 1**.

При возникновении события на входе данные вместе с временной меткой (если она используется) передаются в очередь сообщений (длину очереди задает параметр **qsz**). Для каждого входа выделяется отдельная позиция в очереди.

Из очереди сообщений формируется пакет для отправки. Однотипные данные из очереди упаковываются в один пакет до достижения максимальной длины пакета, определенной стандартом.

Затем сформированный пакет помещается в буфер для передачи.

При задании параметра «длина очереди» **qsz** следует учитывать количество передаваемых объектов информации и частоту их изменения.

Размеры входных и выходных буферов **bufsz** следует выбирать из тех же соображений.

<a id="fig2"></a>

![fb IEC104uni work](https://docs.owen.ru/book_img/2148/134924.png)

*Работа IEC104uni: последовательность вызова подпрограмм в фоновом потоке*

Пример работы с блоком приведен в [разделе](#topic-108217).

<a id="topic-108202"></a>

### Реализация протокола МЭК 60870-5-104. Сервер (IEC104Server)

Блок <b>*IEC*</b><b>*104*</b><b>*Server*</b> реализует протокол стандарта **МЭК 60870-5-104** и определяет функцию контролируемой станции (сервера).

> [!NOTE]
> **Примечание.** Принципиальное отличие блока <b>*IEC*</b><b>*104*</b><b>*Server*</b> от [IEC104uni](#topic-108201) состоит в том, что в <b>*IEC*</b><b>*104*</b><b>*Server*</b> уже включены подпрограммы работы с системными сокетами. Помимо этого, различные подпрограммы протокола выделены в отдельные потоки (см. [рисунок](#topic-108202--fig2)). Таким образом, работа протокола независима от нагруженности фонового потока.

Совместно с <b>*IEC*</b><b>*104*</b><b>*Server*</b> используются специальные буфера – [IECBufIn](#topic-108203) для получаемых данных/команд, [IECBufOut](#topic-108204) для отправляемых данных/команд. С помощью данных буферов создается база объектов информации, участвующих в обмене по указанному протоколу.

Данный блок следует размещать только в **Фоне**, потому что работа блока занимает значительное время.

**Назначение входов и выходов IEC104Server**

**Входы**

| Элемент | Описание |
| --- | --- |
| enbl | Режим работы блока:<br>**0** – блок отключен;<br>**1** – блок в работе;<br>**2** – блок в работе, нет отправки данных (может использоваться для резерва) |
| ctl | Инициация команды управления.<br>Битовая маска:<br>**Бит 1** – инициировать команду общего опроса;<br>**Бит 2** – инициировать команду общего опроса счетчиков |
| tm1 | Не используется |
| tm2 | Не используется |
| dbg | Конфигурация отладки.<br>Битовая маска:<br>**Бит 0…7** – битовая маска, которая определяет, какие типы сообщений выводить: **бит 0** – тип 1, ..., **бит 7** – тип 8 (высший уровень);<br>**Бит 8** – выводить в консоль;<br>**Бит 9** – выводить через блок <b>*Ram*</b><b>*Log*</b> из библиотеки <b>*paCore*</b>;<br>Бит 10 – выводить через протокол отправки диагностических сообщений (для разработчиков);<br>**Бит 11** – выводить в консоль данные таймеров времени выполнения алгоритма и периода вызова алгоритма |
| bo | Входы для подключения <b>*IECBufOut*</b> (циклический) |

**Входы (константные)**

| Элемент | Описание |
| --- | --- |
| tmp | Период вызова подпрограммы обнаружения событий, мс (см. [рисунок](#topic-108202--fig2)) |
| lip | Локальный IP-адрес |
| lprt | Локальный порт |
| sdr | Сетевой стек, для ПЛК ОВЕН **"/"** |
| evntsprio | Приоритет потока обработки событий (см. [рисунок](#topic-108202--fig2)) |
| rxtxprio | Приоритет потока приема/передачи (см. [рисунок](#topic-108202--fig2)) |
| slts | Ограничение количества одновременных подключений клиентами |
| rxbsz | Размер буфера приема, байт |
| txbsz | Размер буфера передачи, байт |
| oa | Не используется |
| w | Число пакетов, после получения последовательности которых, узел обязан передать подтверждение о приеме (см. **t****2**): **w** **<** **k**, рекомендуется **w** **= 2/3****k** |
| k | Число пакетов, которое может отправить узел без подтверждения. Если **k** пакетов отправлено без подтверждения, то передача останавливается до получения подтверждения (см. **t****1**): **w** **<** **k**, рекомендуется **w** **= 2/3****k** |
| t1 | Таймаут при посылке кадров, мс. Если через время **t****1** не было получено подтверждение – соединение закрывается: **t2 < t1** |
| t2 | Таймаут для подтверждения, если число принятых пакетов **w** не достигнуто, мс: **t2 < t1** |
| t3 | Таймаут для посылки блоков тестирования при долгом простое, мс. С периодом **t****3** передается тестовый пакет для проверки канала, если ответа на тестовый пакет не последует – соединение закрывается |
| qsz | Длина очереди сообщений |
| cpp | Период отправки с причиной передачи циклический, мс. Необходимость передачи данных с этой причиной задается для каждого выходного буфера. Рекомендуется задавать **cpp** **≠** **bpp** так, чтобы моменты срабатывания таймеров как можно реже пересекались |
| bpp | Период отправки сообщений с причиной передачи фоновое сканирование, мс. Необходимость передачи данных с этой причиной задается для каждого выходного буфера. Рекомендуется задавать **cpp** **≠** **bpp** так, чтобы моменты срабатывания таймеров как можно реже пересекались |
| cfg | Конфигурация. Определяет поведение узла при старте и в процессе работы.<br>Битовая маска:<br>**Бит 0** – синхронизировать время после установления связи (используется системное время);<br>**Бит 1** – послать команду общего опроса после установления связи;<br>**Бит 2** – использовать глобальное время (UTC) в метках времени;<br>**Бит 3** – принудительно считать временные метки действительными;<br>**Бит 4** – блокировать команду синхронизации времени;<br>**Бит 5** – включать метку времени при отправке данных с причиной передачи: циклические;<br>**Бит 6** – включать метку времени при отправке данных с причиной передачи: фоновое сканирование;<br>**Бит 7** – включать метку времени при отправке данных с причиной передачи: общий опрос;<br>**Бит 8** – использовать структурированный адрес, прибавление стандартного смещения (для ТИТ смещение – **0x2000**, для ТС смещение – **0x1000**);<br>**Бит 9** – отключить замещение старых данных новыми в очереди |
| ito | Таймаут выполнения команды информация о процессе в направлении управления **C** (см. [Приложение А),](#topic-108226) мс |
| sto | Таймаут выбора команды информация о процессе в направлении управления **C** (см. [Приложение А),](#topic-108226) мс |

**Выходы**

| Элемент | Описание |
| --- | --- |
| itr | Выход для подключения <b>*IECBufIn*</b> |
| st0 | Выход статуса.<br>Битовая маска:<br>**Бит 0** – есть связь;<br>**Бит 1** – выполнена команда синхронизации времени |
| st1 | Не используется |

![fb IEC104Server](https://docs.owen.ru/book_img/2148/134923.png)

*Блок IEC104Server*

Рассмотрим алгоритм работы блока <b>*IEC*</b><b>*104*</b><b>*Server*</b>.

В алгоритме работы протокола можно выделить четыре основные подпрограммы, первые две из которых реализуют работу с системным сокетом. Подпрограммы блока <b>*IEC*</b><b>*104*</b><b>*Server*</b> разделены на отдельные потоки (см. [рисунок](#topic-108202--fig2)).

В фоновом потоке вызывается подпрограмма обнаружения подключения. В первом потоке с приоритетом **rxtxprio** вызывается программа приема/передачи данных. Во втором потоке с приоритетом **evntsprio** вызываются подпрограммы обнаружения событий с периодом **tmp** и формирования пакетов.

При возникновении события на входе данные вместе с временной меткой (если она используется) передаются в очередь сообщений (длину очереди задает **qsz**). Для каждого входа выделяется отдельная позиция в очереди.

Из очереди сообщений формируется пакет для отправки. Однотипные данные из очереди упаковываются в один пакет до достижения максимальной длины пакета, определенной стандартом.

Затем сформированный пакет помещается в буфер для передачи.

При задании параметра «длина очереди» **qsz** следует учитывать количество передаваемых объектов информации и частоту их изменения.

Размеры входных и выходных буферов, соответственно, **rxbsz** и **txbsz** следует выбирать из тех же соображений.

Отследить переполнение очереди сообщений можно с помощью блока [IECInfo](#topic-108210).

<a id="topic-108202--fig2"></a>

![fb IEC104Server work](https://docs.owen.ru/book_img/2148/134942.png)

*Работа IEC104Server: разделение на потоки и последовательность вызова подпрограмм*

Пример работы с блоком приведен в [разделе](#topic-108212).

<a id="topic-108203"></a>

### Входной буфер (IECBufIn)

Блок <b>*IECBufIn*</b> используется совместно с блоками [IEC101uni](#topic-108200), [IEC104uni](#topic-108201) и [IEC104Server](#topic-108202) как входной буфер.

Данный блок можно размещать только в **Фоне**.

**Назначение входов и выходов IECBufIn**

**Входы**

| Элемент | Описание |
| --- | --- |
| itr | Вход для подключения к блоку протокола |
| ini | Вход данных для начальной инициализации выхода (циклический) |
| ctl | Не используется (циклический) |

**Входы (константные)**

| Элемент | Описание |
| --- | --- |
| tid | Тип ASDU (**Type ID**) для всех объектов информации в пределах буфера. Определяется протоколом. Допустимые значения на входе описаны в справке среды на библиотеку и в [Приложении А](#topic-108226) |
| adr | Адрес ASDU (общий адрес сектора) |
| itg | Не используется |
| dcl | Не используется |
| ioa | Адрес объекта информации в пределах сектора (циклический) |
| tp | Тип данных на выходах<sup>1)</sup> (циклический). Определяется средой **Полигон**. Допустимые значения на входе:<br>**DO** (Char), **uDO** (Unsigned Char) – символьный;<br>**IO** (Short), **uIO** (Unsigned Short) – 16-битное целое;<br>**LO** (Long), **uLO** (Unsigned Long), **LX** (int32_t), **uLX** (uint32_t) – 32-битное целое;<br>**AO** (Float) – число с плавающей запятой |
| flg | Не используется (циклический) |

**Выходы**

| Элемент | Описание |
| --- | --- |
| bi | Не используется |
| o | Выход данных (циклический) |
| qlf | Квалификатор (циклический). Выход имеет различные функции, в зависимости от типа объекта информации (см. [Приложение А):](#topic-108226)<br>1. Для типов <b>M\_\*</b> (кроме <b>M_IT\_\*</b>) – как выход значения квалификатора, определяется протоколом (битовая маска):<br>**Бит 0** – **OV**: переполнение (для **M_ME\_\*\_1**);<br>**Бит 4** – **BL**: блокировка (для **M\_\*\_\*\_1**);<br>**Бит 5** – **SB**: проведено замещение (для **M\_\*\_\*\_1**);<br>**Бит 6** – **NT**: неактуальное значение (для **M\_\*\_\*\_1**);<br>**Бит 7** – **IV**: недействительное значение (для **M\_\*\_\*\_1**)<br>2. Для типов <b>M_IT\_\*</b> – как выход вспомогательных полей данных<sup>2)</sup>, определяется протоколом (битовая маска):<br>**Биты 0…4** – **SQ**: номер передаваемой последовательности;<br>**Бит 5** – **CY**: произошло переполнение счетчика;<br>**Бит 6** – **CA**: счетчик установлен;<br>**Бит 7** – **IV**: показание счетчика недействительно |
| tm1 | Выход времени, младшее слово<sup>3)</sup> (циклический) |
| tm2 | Выход времени, старшее слово<sup>3)</sup> (циклический) |
| sts | Не используется (циклический) |

> [!NOTE]
> **Примечание.** <sup>1)</sup> Для типов ASDU <b>M_EP\_\*</b> (см. [Приложение А)](#topic-108226) следует использовать базовый тип **uLX** на входе **tp**, т.к. входные данные для данного ASDU структурированны. Для расшифровки структуры используется блок [IECEPFromInt](#topic-108205).
>
> <sup>2)</sup> Для расшифровки вспомогательных полей данных типов <b>M_IT\_\*</b> используется блок [IECITSQIn](#topic-108207).
>
> <sup>3)</sup> Для расшифровки данных о времени на выходах используется блок [IECTransTime](#topic-108209).

Блоки <b>*IECBufIn*</b> и [IECBufOut](#topic-108204) образуют словарь объектов информации, который участвует в обмене по протоколу. Словарь состоит из секторов и объектов внутри секторов.

Вход **adr** определяет общий адрес сектора, а вход **ioa** – адрес объекта информации внутри сектора. Сочетание **adr** и **ioa** должно быть уникальным для каждого объекта информации внутри станции.

Вход **tp** определяет тип данных на выходах блока. Желательно выбирать тип данных, соответствующий типу объекта информации. При несовпадении типов происходит явное преобразование типа, заданного **tp** к типу, определенному протоколом.

Например, для типов ASDU **C_BO\_\*\_1** и **M_BO\_\*\_1** следует установить тип входа **uLX** (uint32_t), т.к. для инкапсуляции передаваемых данных в протоколе используется структура данных типа uint32_t. Для типов ASDU **M_ME_NB_1**, **M_ME_TB_1** и **M_ME_TE_1** следует установить тип входа **I****O** (Short), т.к. для инкапсуляции используется структура данных типа int16_t.

![fb IECBuf In](https://docs.owen.ru/book_img/2148/134941.png)

*Блок IECBufIn*

Примеры работы с блоком приведены в [разделе](#topic-108212).

<a id="topic-108204"></a>

### Выходной буфер (IECBufOut)

Блок <b>*IECBuf*</b><b>*Out*</b> используется совместно с блоками [IEC101uni](#topic-108200), [IEC104uni](#topic-108201) и [IEC104Server](#topic-108202) как выходной буфер.

Данный блок можно размещать только в **Фоне**.

**Назначение входов и выходов IECBufOut**

**Входы (константные)**

| Элемент | Описание |
| --- | --- |
| tid | Тип ASDU (**Type ID**) для всех объектов информации в пределах буфера. Определяется протоколом. Допустимые значения на входе описаны в справке среды на библиотеку и в [Приложении А](#topic-108226) |
| adr | Адрес ASDU (общий адрес сектора) |
| itg | Группа опроса (в т.ч. опроса счетчиков). Определяется протоколом. Допустимые значения на входе (битовая маска):<br>**Бит 0** – посылать данные при общем запросе;<br>**Бит 1** – посылать данные при запросе группы 1;<br>**Бит 2** – посылать данные при запросе группы 2;<br>…<br>**Бит 16** – посылать данные при запросе группы 16 |
| dcl | Класс данных (только для <b>*IEC101uni*</b>). Определяется протоколом. Допустимые значения на входе:<br>**CLASS1** – класс 1;<br>**CLASS2** – класс 2 |
| trt | Определяет причину передачи (см. [Приложение А](#topic-108226)). Определяется протоколом. Допустимые значения на входе (битовая маска):<br>**Бит 0** – передавать данные при изменении (причина передачи **3**). Для типов ASDU **M_ME_xx_1** посредством входа **flg** есть возможность задать дополнительные условия передачи;<br>**Бит 1** – передавать данные циклически (причина передачи **1**) с периодом, указанным на входе **cpp** блока протокола;<br>**Бит 2** – передавать данные фоновым сканированием (причина передачи **2**) с периодом, указанным на входе **bpp** блока протокола;<br>**Бит 3** – отправить при активации **бита 0** на входе **ctl****:** команда для типов ASDU **C**<b>\_\*</b> (причины передачи **6**, **8**, **10**);<br>**Бит 4** – отправить при активации **бита 1** на входе **ctl** (причина передачи определяется **битом 6** на входе **flg**) |
| ioa | Адрес объекта информации в пределах сектора (циклический) |
| tp | Тип данных на выходах<sup>1)</sup> (циклический). Определяется средой **Полигон**. Допустимые значения на входе:<br>**DI** (Char), **uDI** (Unsigned Char) – символьный;<br>**II** (Short), **uII** (Unsigned Short) – 16-битное целое;<br>**LI** (Long), **uLI** (Unsigned Long), **LX** (int32_t), **uLX** (uint32_t) – 32-битное целое;<br>**A****I** (Float) – число с плавающей запятой |
| flg | Флаги (циклический). Для типов ASDU **M_ME_xx_1** задает условия передачи спонтанных сообщений (см. [Приложение А](#topic-108226)). Определяется протоколом. Допустимые значения на входе (битовая маска):<br>**Бит 0** – передавать данные, в случае, если текущее значение на входе **in** блока отличается от предыдущего более, чем на величину, определяемую входом **tsh** (**Threshold**) блока (мертвая зона);<br>Бит 1 – не используется;<br>**Бит 2** – передавать данные, в случае, если значение на входе **in** меньше величины, определяемой входом **llm** (**Low Limit**);<br>**Бит 3** – передавать данные, в случае, если значение на входе **in** больше величины, определяемой входом **hlm** (**High Limit**);<br>Для команд (тип ASDU **C**<b>\_\*</b>):<br>**Бит 4** – посылать команду при изменении значения на входе;<br>**Бит 5** – использовать предварительный выбор;<br>Для всех, кроме команд:<br>**Бит 6** – причина передачи в принудительном режиме, т.е. при активации бита на входе **ctl**: **0** – причина передачи **1** (циклически), **1** – причина передачи **2** (фоновое сканирование) |

**Входы**

| Элемент | Описание |
| --- | --- |
| in | Входы данных (циклический) |
| qlf | Квалификатор<sup>2)</sup> (циклический). Вход имеет различные функции, в зависимости от типа объекта информации (см. [Приложение А](#topic-108226)):<br>1. Для типов <b>M\_\*</b> (кроме <b>M_IT\_\*</b>) – как вход значения квалификатора, определяется протоколом (битовая маска):<br>**Бит 0** – **OV**: переполнение (для **M_ME\_\*\_1**);<br>**Бит 4** – **BL**: блокировка (для **M\_\*\_\*\_1**);<br>**Бит 5** – **SB**: проведено замещение (для **M\_\*\_\*\_1**);<br>**Бит 6** – **NT**: неактуальное значение (для **M\_\*\_\*\_1**);<br>**Бит 7** – **IV**: недействительное значение (для **M\_\*\_\*\_1**)<br>2. Для типов <b>M_IT\_\*</b> – как вход вспомогательных полей данных<sup>2)</sup>, определяется протоколом:<br>**Биты 0…4** – **SQ**: номер передаваемой последовательности;<br>**Бит 5** – **CY**: произошло переполнение счетчика;<br>**Бит 6** – **CA**: счетчик установлен;<br>**Бит 7** – **IV**: показание счетчика недействительно |
| tsh | Вход данных **Threshold** (циклический). Имеет значение только для типов ASDU **M_ME\_\*\_1** (см. [Приложение А](#topic-108226)) (мертвая зона) |
| smt | Не используется (циклический) |
| llm | Вход данных **Low Limit** (циклический). Имеет значение только для типов ASDU **M_ME\_\*\_1** (см. [Приложение А](#topic-108226)) |
| hlm | Вход данных **High** **Limit** (циклический). Имеет значение только для типов ASDU **M_ME\_\*\_1** (см. [Приложение А](#topic-108226)) |
| ctl | Управление (циклический).<br>Битовая маска:<br>**Бит 0** – выполнить команду (**бит 3** на входе **trt**);<br>**Бит 1** – отправить принудительно (**бит 4** на входе **trt**) |

**Выходы**

| Элемент | Описание |
| --- | --- |
| bo | Выход для подключения к блоку протокола |
| sts | Не используется (циклический) |

> [!NOTE]
> **Примечание.** <sup>1)</sup> Для типов ASDU <b>M_EP\_\*</b> (см. [Приложение А](#topic-108226))следует использовать базовый тип **uLX** на входе **tp**, т.к. входные данные для данного ASDU структурированы. Для формирования структуры используется блок [IECIntFromEP](#topic-108206).
>
> <sup>2)</sup> Для формирования вспомогательных полей данных типов <b>M_IT\_\*</b> используется блок [IECITSQOut](#topic-108208).

Блоки [IECBufIn](#topic-108203) и <b>*IECBuf*</b><b>*Out*</b> образуют словарь объектов информации, который участвует в обмене по протоколу. Словарь состоит из секторов и объектов внутри секторов.

Вход **adr** определяет общий адрес сектора, а вход **ioa** – адрес объекта информации внутри сектора. Сочетание **adr** и **ioa** должно быть уникальным для каждого объекта информации внутри станции.

Вход **tp** определяет тип данных на выходах блока. Желательно выбирать тип данных, соответствующий типу объекта информации. При несовпадении типов происходит явное преобразование типа, заданного **tp** к типу, определенному протоколом.

Например, для типов ASDU **C_BO\_\*\_1** и **M_BO\_\*\_1** следует установить тип входа **uLX** (uint32_t), т.к. для инкапсуляции передаваемых данных в протоколе используется структура данных типа uint32_t. Для типов ASDU **M_ME_NB_1**, **M_ME_TB_1** и **M_ME_TE_1** следует установить тип входа **I****I** (Short), т.к. для инкапсуляции используется структура данных типа int16_t.

![fb IECBuf Out](https://docs.owen.ru/book_img/2148/134940.png)

*Блок IECBufOut*

Примеры работы с блоком приведены в [разделе](#topic-108212) .

<a id="topic-108205"></a>

### Разбиение структуры типа ASDU M_EP\_\* (IECEPFromInt)

Блок <b>*IECEPFromInt*</b> предназначен для разбиения структурированных данных на выходе входного буфера c типом ASDU <b>M_EP\_\*</b> (см. [Приложение А](#topic-108226)) на отдельные поля данных. Базовый тип выхода буфера (определяется входом **tp** буфера [IECBufIn](#topic-108203)) должен быть **uLX**.

Данный блок можно размещать только в **Фоне**.

**Назначение входов и выходов IECEPFromInt**

**Входы**

| Элемент | Описание |
| --- | --- |
| struct | Вход для подключения к выходу данных **o** блока <b>*IECBufIn*</b> |

**Выходы**

| Элемент | Описание |
| --- | --- |
| state | Выход состояния, определяется протоколом |
| msec | Выход интервала времени, мс |

![fb IECEPFrom Int](https://docs.owen.ru/book_img/2148/134939.png)

*Блок IECEPFromInt*

Примеры работы с блоком приведены в [разделах](#topic-108214) [и](#topic-108220).

<a id="topic-108206"></a>

### Формирование структуры типа ASDU M_EP\_\* (IECIntFromEP)

Блок <b>*IECIntFromEP*</b> предназначен для объединения входных данных c типом ASDU <b>M_EP\_\*</b> (см. [Приложение А](#topic-108226)) в структурированное слово для использования в выходном буфере. Базовый тип входа буфера (определяется входом **tp** буфера [IECBufOut](#topic-108204)) должен быть **uLX**.

Данный блок можно размещать только в **Фоне**.

**Назначение входов и выходов IECIntFromEP**

**Входы**

| Элемент | Описание |
| --- | --- |
| state | Вход состояния, определяется протоколом |
| msec | Вход интервала времени, мс |
| cfg | Вход конфигурации (константный).<br>Битовая маска:<br>**Бит 0** – обновлять выход только при обновлении входа **state** (это может быть полезно при спорадическом типе передачи данных) |

**Выходы**

| Элемент | Описание |
| --- | --- |
| struct | Выход для подключения к входу данных **in** блока <b>*IECBuf*</b><b>*Out*</b> |

![fb IECInt From EP](https://docs.owen.ru/book_img/2148/134938.png)

*Блок IECIntFromEP*

Примеры работы с блоком приведены в [разделах](#topic-108215) [и](#topic-108220).

<a id="topic-108207"></a>

### Расшифровка описателя качества типа ASDU M_IT\_\* (IECITSQIn)

Блок <b>*IECITSQIn*</b> предназначен для разбиения вспомогательных структурированных данных на выходе входного буфера [IECBufIn](#topic-108203) c типом ASDU <b>M_IT\_\*</b> (см. [Приложение А](#topic-108226)) на отдельные поля.

Данный блок можно размещать только в **Фоне**.

**Назначение входов и выходов IECITSQIn**

**Входы**

| Элемент | Описание |
| --- | --- |
| in | Вход для подключения к выходу данных **qlf** блока <b>*IECBufIn*</b> |

**Выходы**

| Элемент | Описание |
| --- | --- |
| SQ | Номер передаваемой последовательности – передается в 5 младших битах |
| CY | **0** – за соответствующий период интегрирования не произошло переполнение счетчика;<br>**1** – за соответствующий период интегрирования произошло переполнение счетчика |
| CA | **0** – после последнего считывания счетчик не был установлен;<br>**1** – после последнего считывания счетчик был установлен |
| IV | **0** – показания счетчика действительны;<br>**1** – показания счетчика недействительны |

![fb IECITSQIn](https://docs.owen.ru/book_img/2148/134937.png)

*Блок IECITSQIn*

Примеры работы с блоком приведены в [разделах](#topic-108216) [и](#topic-108221).

<a id="topic-108208"></a>

### Формирование описателя качества типа ASDU M_IT\_\* (IECITSQOut)

Блок <b>*IECITSQOut*</b> предназначен для компоновки вспомогательных данных с типом ASDU <b>M_IT\_\*</b> (см. [Приложение А](#topic-108226)) и передачи на вход **qlf** выходного буфера [IECBufOut](#topic-108204).

Данный блок можно размещать только в **Фоне**.

**Назначение входов и выходов IECITSQOut**

**Входы**

| Элемент | Описание |
| --- | --- |
| SQ | Номер передаваемой последовательности – передается в 5 младших битах |
| CY | **0** – за соответствующий период интегрирования не произошло переполнение счетчика;<br>**1** – за соответствующий период интегрирования произошло переполнение счетчика |
| CA | **0** – после последнего считывания счетчик не был установлен;<br>**1** – после последнего считывания счетчик был установлен |
| IV | **0** – показания счетчика действительны;<br>**1** – показания счетчика недействительны |

**Выходы**

| Элемент | Описание |
| --- | --- |
| out | Выход для подключения к входу **qlf** блока <b>*IECBuf*</b><b>*Out*</b> |

![fb IECITSQOut](https://docs.owen.ru/book_img/2148/134936.png)

*Блок IECITSQOut*

Примеры работы с блоком приведены в [разделах](#topic-108216) [и](#topic-108221).

<a id="topic-108209"></a>

### Расшифровка временных меток (IECTransTime)

Блок <b>*IECTransTime*</b> предназначен для преобразования формата вывода временных меток входными буферами [IECBufIn](#topic-108203) в поля данных.

Данный блок можно размещать только в **Фоне**.

**Назначение входов и выходов IECTransTime**

**Входы**

| Элемент | Описание |
| --- | --- |
| tm1 | Вход для подключения к выходу **tm1** блока <b>*IECBufIn*</b> |
| tm2 | Вход для подключения к выходу **tm2** блока <b>*IECBufIn*</b> |

**Выходы**

| Элемент | Описание |
| --- | --- |
| msec | Выход времени, мс (Unix) |
| IV | Выход сигнализации недостоверного времени |
| str | Строковое представление времени (для отладки) |

![fb IECTrans Time](https://docs.owen.ru/book_img/2148/134935.png)

*Блок IECTransTime*

Примеры работы с блоком приведены в [разделе](#topic-108212).

<a id="topic-108210"></a>

### Получение отладочной информации (IECInfo)

Блок <b>*IECInfo*</b> предназначен для получения отладочной информации о работе протокола. Блок <b>*IECInfo*</b> совместим только с блоком [IEC104Server](#topic-108202).

Первая часть выходов блока позволяет отследить времена выполнения функций блока <b>*IEC*</b><b>*104*</b><b>*Server*</b>. Обозначения (см. [рисунок](#topic-108202--fig2)):

- **main** – поток 2;
- **evnts** – подпрограмма регистрации событий;
- **aux** – подпрограмма формирования буфера на передачу/расшифровки буфера на прием;
- **txrx** – поток 1.

Вторая часть выходов позволяет отследить используемый размер очереди сообщений, переполнение очереди и др. Параметры размера очередей и буферов приводятся в байтах.

> [!NOTE]
> **Примечание.** Блок <b>*IECInfo*</b> считывает значения **msgQ**\* только после того, как завершается подпрограмма формирования пакетов из очереди. Таким образом, по этим значениям можно судить о количестве сообщений, которые не были помещены в буфер на отправку за данный цикл. Возможные причины: недостаточный размер буфера на передачу, нехватка производительности подсистемы сокетов и др.

Данный блок можно размещать только в **Фоне**.

**Назначение входов и выходов IECInfo**

**Входы**

| Элемент | Описание |
| --- | --- |
| itr | Вход для подключения к блоку <b>*IEC*</b><b>*104*</b><b>*Server*</b> |
| ctl | Не используется |
| tmout | Период вычисления времен исполнения, мс |
| rst | Сброс абсолютных значений |

**Выходы**

| Элемент | Описание |
| --- | --- |
| \*tmmin | Минимальное время исполнения |
| \*tmmax | Максимальное время исполнения |
| \*tmavrg | Среднее время исполнения |
| \*tmnum | Количество вызовов подпрограммы |
| \*tmabsmax | Максимальное время исполнения за все время работы <b>*IECInfo*</b> |

**Выходы (циклические)**

| Элемент | Описание |
| --- | --- |
| msgQmax | Максимальный используемый размер очереди сообщений |
| msgQavrg | Средний используемый размер очереди сообщений |
| msgQnum | Количество вызовов подпрограммы |
| msgQabsmax | Максимальный используемый размер очереди сообщений за все время работы <b>*IECInfo*</b> |
| msgQfull | Инкрементируется при переполнении очереди |
| rplQfull | Инкрементируется при переполнении очереди для отправки подтверждений |
| reachedK | Инкрементируется при достижении числа пакетов, отправленных без подтверждения, **K** |
| txbufmax | Максимальный размер буфера передачи |
| txbufavrg | Средний размер буфера передачи |
| txbufnum | Количество вызовов подпрограммы |
| txbufabsmax | Максимальный размер буфера передачи за все время работы <b>*IECInfo*</b> |
| txbufReachedLim | Инкрементируется при переполнении выходного буфера |

![fb IECInfo](https://docs.owen.ru/book_img/2148/134934.png)

*Блок IECInfo*

<a id="topic-108211"></a>

## Примеры настройки обмена по протоколу МЭК 60870-5-104

<a id="topic-108212"></a>

### Настройка обмена в режиме сервера по протоколу 5-104

В данном примере ПЛК210 будет выступать в роли контролируемой станции (сервера).

Пример доступен для скачивания по [ссылке](https://owen.ru/product/polygon/documentation). Пароль для доступа к отладчику – **1**.

Для настройки обмена в режиме сервера по протоколу 5-104 следует:

1. Добавить на любую страницу места работы <b>*Фон*</b> блок [IEC104Server](#topic-108202).

2. На вход **lip** подать IP-адрес контроллера в виде SQL-запроса. Запрос IP-адреса (prop_ip):

   ```
   "<sql>SELECT value FROM blocks_prop WHERE indx=:module AND type="prop_ip"</sql>"
   ```

3. Добавить коннектор для выходного буфера [IECBufOut](#topic-108204).

4. Установить период для отправки данных с причиной **1** (циклический) равным 5 секундам – **cpp** **= 5000**.

Другие параметры блока перечислены на рисунке ниже.

![Настр IEC104Server](https://docs.owen.ru/book_img/2148/134933.png)

*Настройка IEC104Server*

<a id="topic-108213"></a>

#### Передача информации о процессе в направлении контроля (M)

В этом подразделе приведены примеры обмена данными в направлении контроля. Такому обмену в ASDU присваивается метка **M** (см. [Приложение А](#topic-108226)).

Например, необходимо отправить от сервера клиенту объект информации с типом **M_SP_NA_1** – одноэлементный объект информации с описателем качества.

Для настройки передачи информации о процессе в направлении контроля (M) следует:

1. Добавить на любую страницу места работы <b>*Фон*</b> выходной буфер [IECBufOut](#topic-108204).

   > **Примечание.** В данном примере настраивается передача данных в прямом направлении – от сервера к клиенту. Аналогично настраивается обмен в обратном направлении – от клиента к серверу.

2. Установить **tid** **=** **M****\_****SP****\_****NA****\_1**, адрес ASDU **adr** **= 3**, адрес объекта информации **ioa** **= 1**.

   Тип данных **tp** установим равным **DI**, так как у **M****\_****SP****\_****NA****\_1** в младшем разряде передается **1 бит** ТС.

3. Условия передачи данных **trt** установить равным **0****x****03**: **бит 0** – спорадическая передача (причина передачи **3**), **бит 1** – циклическая передача с периодом **cpp** **= 5000** мс (причина передачи **1**) (см. [Приложение Б).](#topic-108227)

   На вход **qlf** заведем выход с блока <b>*ToReg*</b><b>*8*</b> из библиотеки <b>*paCore*</b> – формирователь битовой маски описателя качества.

   ![Настройка IECBuf Out. M SP NA 1](https://docs.owen.ru/book_img/2148/134962.png)

   *Настройка IECBufOut. M_SP_NA_1*

4. В данном примере в качестве клиента используется [Multi-Protocol MasterOPC](https://owen.ru/product/multi_protocol_masteropc_server). Можно также запустить в качестве клиента проект, рассмотренный в [разделе](#topic-108212), на виртуальном контроллере с помощью панели отладки.

5. Настройка клиента в Multi-Protocol MasterOPC показана на рисунках ниже.

   ![Настройки Multi-Protocol Master OPC 1](https://docs.owen.ru/book_img/2148/134961.png)

   *Настройки Multi-Protocol MasterOPC*

   ![Настройки Multi-Protocol Master OPC 2](https://docs.owen.ru/book_img/2148/134960.png)

   *Настройки канала Multi-Protocol MasterOPC*

6. Запустить программы на ПЛК и OPC-сервере. Корректный обмен изображен на рисунках ниже.

   ![Настройки Multi-Protocol Master OPC 3](https://docs.owen.ru/book_img/2148/134959.png)

   *Корректный обмен. Сервер*

   ![Настройки Multi-Protocol Master OPC 4](https://docs.owen.ru/book_img/2148/134958.png)

   *Корректный обмен. Клиент*

Другой пример – отправка объекта информации с типом M_ME_TF_1 (ТИТ с описателем качества и меткой времени). Следует выполнить действия:

1. Добавить выходной буфер <b>*IECBufOut*</b>.

2. Установить **tid** **=** **M****\_****ME****\_TF_1**, адрес ASDU **adr** **= 3**, адрес объекта информации **ioa** **= 2**.

   Тип данных **tp** установить равным **AI**, так как **M****\_****ME****\_****TF****\_1** – величина с плавающей запятой.

3. Условия передачи данных **trt** установить равным **0****x****11**: **бит 0** – спорадическая передача (причина передачи **3**), **бит 4** – принудительная отправка при активации **бита 1** на входе **ctl**, причина отправки описывается **6 битом** на входе **flg** – при установке **0** используется циклическая передача (причина передачи **1**).

4. Принудительная передача активируется **битом 1** входа **ctl** – заведем на него выход блока <b>*ToReg*</b><b>*8*</b> из библиотеки <b>*paCore*</b> для удобства.

   На вход **qlf** заведем выход с блока <b>*ToReg*</b><b>*8*</b> из библиотеки <b>*paCore*</b> – формирователь битовой маски описателя качества. Здесь в младшем бите добавляется еще один атрибут **OV** – переполнение.

5. На входе **flg** активировать **бит 0** – учет мертвой зоны на входе **tsh**. Установим **tsh** **= 5**.

6. Установить также нижний и верхний пределы равными, соответственно, **llm** **= 50** и **hlm** **= 200**.

   ![Настройка IECBuf Out](https://docs.owen.ru/book_img/2148/134957.png)

   *Настройка IECBufOut. M_ME_TF_1*

7. Добавить коннектор для подключения выходного буфера <b>*IECBuf*</b><b>*Out*</b> у блока <b>*IEC*</b><b>*104*</b><b>*Server*</b>.

8. Подключить <b>*IECBufOut*</b> к коннектору блока <b>*IEC*</b><b>*104*</b><b>*Server*</b>.

9. Настроить прием ТИТ в клиенте:

   ![Настройки OPC-сервера протокола 5-104](https://docs.owen.ru/book_img/2148/134956.png)

   *Настройки OPC-сервера протокола 5-104*

10. Запустить программы на ПЛК и OPC-сервер. Корректный обмен отображен на рисунках ниже.

    ![Настройки OPC-сервера протокола 5-104 2](https://docs.owen.ru/book_img/2148/134955.png)

    *Корректный обмен. Сервер*

    ![Настройки OPC-сервера протокола 5-104 3](https://docs.owen.ru/book_img/2148/134954.png)

    *Корректный обмен. Клиент*

11. Если после этого передать на вход значение **70** – значение клиенту не передастся, так как не была преодолена мертвая зона **tsh** **= 5**.

    ![Настройки OPC-сервера протокола 5-104 4](https://docs.owen.ru/book_img/2148/134953.png)

    *Влияние параметра tsh. Сервер*

    ![Настройки OPC-сервера протокола 5-104 5](https://docs.owen.ru/book_img/2148/134972.png)

    *Влияние параметра tsh. Клиент*

    Для принудительной отправки следует установить **бит 1** на входе **ctl**.

    ![Настройки OPC-сервера протокола 5-104 6](https://docs.owen.ru/book_img/2148/134971.png)

    *Принудительная отправка. Сервер*

    ![Настройки OPC-сервера протокола 5-104 7](https://docs.owen.ru/book_img/2148/134970.png)

    *Принудительная отправка. Клиент*

    Значение передалось клиенту, но без метки времени, что видно в логе клиента (**M****\_****ME****\_****NC****\_1** – без метки времени), так как стандарт предписывает не передавать метку времени при циклической передаче.

    ![Настройки OPC-сервера протокола 5-104 8](https://docs.owen.ru/book_img/2148/134969.png)

    *Лог клиента*

12. Для того, чтобы метка времени передавалась при циклической передаче следует установить **бит 5** в параметре **cfg** блока <b>*IEC*</b><b>*104*</b><b>*Server*</b> – передавать метку времени при отправке данных с причиной передачи: циклические.

    ![Настройки OPC-сервера протокола 5-104 9](https://docs.owen.ru/book_img/2148/134968.png)

    *Передача метки времени при циклической передаче*

    Теперь при принудительной отправке метка времени также будет передаваться (**M****\_****ME****\_****TF****\_1** – с меткой времени).

    ![Настройки OPC-сервера протокола 5-104 10](https://docs.owen.ru/book_img/2148/134967.png)

    *Лог клиента*

13. Для учета параметров выходного буфера верхний и нижний порог – **llm** и **hlm**, следует установить **бит 2** и **бит 3** на входе **flg**.

    ![Настройки OPC-сервера протокола 5-104 11](https://docs.owen.ru/book_img/2148/134966.png)

    *Учет нижнего и верхнего порогов*

Теперь при выходе значения за установленный входами **llm** и **hlm** диапазон оно будет передаваться без учета мертвой зоны, установленной на входе **tsh**.

![Настройки OPC-сервера протокола 5-104 12](https://docs.owen.ru/book_img/2148/134965.png)

*– Передача при превышении hlm<b>. Сервер</b>*

![Настройки OPC-сервера протокола 5-104 13](https://docs.owen.ru/book_img/2148/134964.png)

*Передача при превышении hlm<b>. Клиент</b>*

![Настройки OPC-сервера протокола 5-104 14](https://docs.owen.ru/book_img/2148/134963.png)

*Передача при превышении hlm. Сервер*

![Настройки OPC-сервера протокола 5-104 15](https://docs.owen.ru/book_img/2148/134982.png)

*Передача при превышении hlm. Клиент*

<a id="topic-108214"></a>

#### Прием информации о процессе в направлении управления (C)

Следующий пример – обмен данными в направлении управления (метка **C** – см.[Приложение А](#topic-108226)).

Рассмотрим прием объекта информации с типом **C****\_****SC****\_****NA****\_1** – однопозиционная команда ТУ.

1. Добавить на любую страницу места работы <b>*Фон*</b> входной буфер [IECBufIn](#topic-108203).

2. Установить **tid** **=** **C****\_****SC****\_****NA****\_1**, адрес ASDU **adr** **= 3**, адрес объекта информации **ioa** **= 3**.

   Тип данных **tp** установим равным **DO**, так как **C****\_****SC****\_****NA****\_1** передает значение «включить/выключить» в младшем бите.

   ![Настройка IECBuf In 1](https://docs.owen.ru/book_img/2148/134981.png)

   *Настройка IECBufIn. C_SC_NA_1*

3. Подключить <b>*IECBufIn*</b> к коннектору блока <b>*IEC*</b><b>*104*</b><b>*Server*</b>.

4. Настроить команду в [Multi-Protocol MasterOPC](https://owen.ru/product/multi_protocol_masteropc_server). Можно также запустить в качестве клиента проект, рассмотренный в [разделе](#topic-108217), на виртуальном контроллере с помощью панели отладки.

   ![Настройка IECBuf In 2](https://docs.owen.ru/book_img/2148/134980.png)

   *Настройки команды Multi-Protocol MasterOPC*

5. Запустить программы на ПЛК и OPC-сервере. Корректный обмен изображен на рисунках ниже.

   ![Настройка IECBuf In 3](https://docs.owen.ru/book_img/2148/134979.png)

   *Корректный обмен. Клиент*

   ![Настройка IECBuf In 4](https://docs.owen.ru/book_img/2148/134978.png)

   *Корректный обмен. Сервер*

Для приема объекта информации с типом **C_SE_TC_1** (команда уставки с меткой времени) следует:

1. Рассмотреть прием объекта информации с типом **C****\_****SE****\_****TC****\_1** – команда уставки с меткой времени.

2. Добавить входной буфер <b>*IECBufIn*</b>.

3. Установить **tid** **=** **C****\_****SE****\_****TC****\_1**, адрес ASDU **adr** **= 3**, адрес объекта информации **ioa** **= 4**.

   Тип данных **tp** установим равным **AO**, так как **C****\_****SE****\_****TC****\_1** имеет формат с плавающей запятой.

4. Для расшифровки метки времени соединить выходы **tm****1** и **tm****2** с входами блока [IECTransTime](#topic-108209).

   ![Настройка IECBuf In 5](https://docs.owen.ru/book_img/2148/134977.png)

   *Настройка IECBufIn. C_SE_TC_1*

5. Подключить <b>*IECBufIn*</b> к коннектору блока <b>*IEC*</b><b>*104*</b><b>*Server*</b>.

6. Настроить команду в Multi-Protocol MasterOPC:

   ![Настройка IECBuf In 6](https://docs.owen.ru/book_img/2148/134976.png)

   *Настройки команды Multi-Protocol MasterOPC*

7. Запустить программы на ПЛК и OPC-сервере. Корректный обмен показан на рисунках ниже.

   ![Настройка IECBuf In 7](https://docs.owen.ru/book_img/2148/134975.png)

   *Корректный обмен. Клиент*

   ![Настройка IECBuf In 8](https://docs.owen.ru/book_img/2148/134974.png)

   *Корректный обмен. Сервер*

<a id="topic-108215"></a>

#### Передача упакованных данных (M_EP\_\*)

Особенность типа информации **M_EP_TE_1** (упакованное сообщение с меткой времени **CP56Время2a**) состоит в том, что в сообщении передается структура, состоящая из битовой маски и интервала времени.

Для передачи объекта информации с типом **M_EP_TE_1** следует:

1. Добавить на любую страницу места работы <b>*Фон*</b> выходной буфер [IECBufOut](#topic-108204).

2. Установить **tid** **=** **M****\_EP_TE_1**, адрес ASDU **adr** **= 3**, адрес объекта информации **ioa** **= 5**.

3. Тип данных **tp** установить равным **uLX**, т.к. входные данные для данного типа ASDU структурированы.

   Условия передачи данных **trt** установить равным **0****x****01**: **бит 0** – спорадическая передача (причина передачи **3**) (см. [Приложение Б](#topic-108227)).

4. Для формирования структуры завести на вход **in** выход **struct** блока [IECIntFromEP](#topic-108206). Установка **бита 0** на входе **cfg** этого блока определяет, что спонтанная передача происходит только при изменении значения на входе **state**.

5. Для формирования информационного байта на вход <b>*IECIntFromEP*</b> завести выход блока <b>*ToReg*</b><b>*8*</b> из библиотеки <b>*paCore*</b>.

   На вход **qlf** также завести выход с блока <b>*ToReg*</b><b>*8*</b> – формирование битовой маски описателя качества. Здесь добавляется атрибут **EI** – действительность интервала длительности.

   ![Настройка IECBuf Out. M EP TE 1](https://docs.owen.ru/book_img/2148/134973.png)

   *Настройка IECBufOut. M<b>\_</b>EP<b>\_</b>TE<b>\_1</b>*

6. Добавить коннектор для подключения выходного буфера <b>*IECBuf*</b><b>*Out*</b> у блока <b>*IEC*</b><b>*104*</b><b>*Server*</b>.

7. Подключить <b>*IECBuf*</b><b>*Out*</b> к коннектору блока <b>*IEC*</b><b>*104*</b><b>*Server*</b>.

   В качестве клиента настроить виртуальный контроллер **Полигон**. Можно также запустить в качестве клиента проект, рассмотренный в [разделе](#topic-108217), на виртуальном контроллере с помощью панели отладки.

8. Для расшифровки структуры использовать блок [IECEPFromInt](#topic-108205).

   ![Настройки клиента ПА](https://docs.owen.ru/book_img/2148/134992.png)

   *Настройки клиента ПА*

9. Запустить программы на ПЛК и виртуальном контроллере. Корректный обмен изображен на рисунках ниже.

   ![Корректный обмен. Сервер](https://docs.owen.ru/book_img/2148/134991.png)

   *Корректный обмен. Сервер*

   ![Корректный обмен. Клиент](https://docs.owen.ru/book_img/2148/134990.png)

   *Корректный обмен. Клиент*

<a id="topic-108216"></a>

#### Передача интегральных сумм (M_IT\_\*)

Особенность типа информации **M_IT_TB_1** (интегральная сумма с меткой времени **CP56Время2a**) состоит в том, что в сообщении передается знаковое целое (в 4-х байтах).

Для передачи объекта информации с типом **M_IT_TB_1** следует:

1. Добавить на любую страницу места работы <b>*Фон*</b> выходной буфер [IECBufOut](#topic-108204).

2. Установить **tid** **=** **M****\_IT_TB_1**, адрес ASDU **adr** **= 3**, адрес объекта информации **ioa** **= 6**.

3. Тип данных **tp** установить равным **LX**.

   Условия передачи данных **trt** установить равным **0****x****01**: **бит 0** – спорадическая передача (причина передачи **3**) (см. [Приложение Б).](#topic-108227)

4. Для формирования структуры соединить связью вход **qlf** и выход **out** блока [IECITSQOut](#topic-108208).

   ![Настройка IECBuf Out 1](https://docs.owen.ru/book_img/2148/134989.png)

   *Настройка IECBufOut. M<b>\_</b>IT<b>\_</b>TB<b>\_1</b>*

5. Добавить коннектор для подключения выходного буфера <b>*IECBuf*</b><b>*Out*</b> у блока <b>*IEC*</b><b>*104*</b><b>*Server*</b>.

6. Подключить <b>*IECBuf*</b><b>*Out*</b> к коннектору блока <b>*IEC*</b><b>*104*</b><b>*Server*</b>.

7. В качестве клиента настроить виртуальный контроллер **Полигон**. Можно также запустить в качестве клиента проект, рассмотренный в [разделе](#topic-108217), на виртуальном контроллере с помощью панели отладки.

8. Для расшифровки структуры используется блок [IECITSQIn](#topic-108207).

   ![Настройка IECBuf Out 2](https://docs.owen.ru/book_img/2148/134988.png)

   *Настройки клиента ПА*

9. Запустить программы на ПЛК и виртуальном контроллере. Корректный обмен показан на рисунках ниже.

   ![Настройка IECBuf Out 3](https://docs.owen.ru/book_img/2148/134987.png)

   *Корректный обмен. Сервер*

   ![Настройка IECBuf Out 4](https://docs.owen.ru/book_img/2148/134986.png)

   *Корректный обмен. Клиент*

<a id="topic-108217"></a>

### Настройка обмена в режиме клиента протокола 5-104

В данном примере ПЛК210 будет выступать в роли контролирующей станции (клиента).

Пример доступен для скачивания по [ссылке](https://owen.ru/product/polygon/documentation). Пароль для доступа к отладчику – **1**.

Для настройки обмена с ПЛК в режиме клиента следует:

1. Добавить на любую страницу места работы <b>*Фон*</b> блок [IEC104uni](#topic-108201).

2. Соединить его с блоком <b>*TcpIpClA*</b> из библиотеки <b>*paCore*</b>.

3. На вход **lip** подать IP-адрес контроллера в виде SQL-запроса. Запрос IP-адреса (prop_ip):

   ```
   "<sql>SELECT value FROM blocks_prop WHERE indx=:module AND type="prop_ip"</sql>"
   ```

4. На вход **ip** подать IP адрес подчиненного контроллера в виде SQL-запроса к свойству модуля <b>*Пользовательское свойство 00*</b>. Запрос IP-адреса (prop_0):

   ```
   "<sql>SELECT value FROM blocks_prop WHERE indx=:module AND type="prop_0"</sql>"
   ```

5. На входе **prm** задать **IEC****\_****MASTER**.

   ![Настройка IEC104uni](https://docs.owen.ru/book_img/2148/134985.png)

   *Настройка IEC104uni*

<a id="topic-108218"></a>

#### Прием информации о процессе в направлении контроля (M)

В этом подразделе показан обмен данными в направлении контроля (метка **M** – см. [Приложение А](#topic-108226)).

Рассмотрим прием объекта информации с типом **M****\_****SP****\_****NA****\_1** – одноэлементный объект информации с описателем качества.

Для приема объекта информации с типом **M_SP_NA_1** (одноэлементный объект информации с описателем качества) следует:

1. Добавить на любую страницу места работы <b>*Фон*</b> входной буфер [IECBufIn](#topic-108203).

   > **Примечание.** В данном примере настраивается передача данных в прямом направлении – от сервера к клиенту. Аналогично настраивается обмен в обратном направлении – от клиента к серверу.

2. Установить **tid** **=** **M****\_****SP****\_****NA****\_1**, адрес ASDU **adr** **= 3**, адрес объекта информации **ioa** **= 1**.

   Тип данных **tp** установить равным **DO**, так как у **M****\_****SP****\_****NA****\_1** в младшем разряде передается **1 бит** ТС.

3. Для расшифровки описателя качества соединить связью выход **qlf** и вход блока <b>*FromReg8*</b> из библиотеки <b>*paCore*</b>.

   ![Настройка IECBuf In. M SP NA 1 01](https://docs.owen.ru/book_img/2148/134984.png)

   *Настройка IECBufIn. M_SP_NA_1*

4. Подключить <b>*IECBufIn*</b> к коннектору блока <b>*IEC*</b><b>*104*</b><b>*uni*</b>.

   В качестве сервера использовать [MasterSCADA 4D](https://owen.ru/product/masterscada_4d). Можно также запустить в качестве сервера проект, рассмотренный в [разделе](#topic-108212), на виртуальном контроллере с помощью панели отладки.

5. Настройка сервера АРМ в MasterSCADA 4D:

   ![Настройка IECBuf In. M SP NA 1 02](https://docs.owen.ru/book_img/2148/134983.png)

   *Настройки сервера МЭК 104 АРМ*

6. Добавить <b>*Канал*</b> во <b>*Внешние каналы*</b> и привязать к нему параметр.

   ![Настройка IECBuf In. M SP NA 1 03](https://docs.owen.ru/book_img/2148/135012.png)

   *Настройки канала АРМ*

7. Настройки канала АРМ:

   ![Настройка IECBuf In. M SP NA 1 04](https://docs.owen.ru/book_img/2148/135011.png)

   *Настройки канала АРМ*

8. Запустить программы на ПЛК и АРМ. Корректный обмен показан на рисунках ниже.

   ![Настройка IECBuf In. M SP NA 1 05](https://docs.owen.ru/book_img/2148/135010.png)

   *Корректный обмен. Сервер*

   ![Настройка IECBuf In. M SP NA 1 06](https://docs.owen.ru/book_img/2148/135009.png)

   *Корректный обмен. Клиент*

Рассмотрим прием объекта информации с типом **M****\_****ME****\_****TF****\_1** – ТИ с описателем качества и меткой времени.

Для приема объекта информации с типом **M_ME_TF_1** (ТИТ с описателем качества и меткой времени) следует выполнить действия:

1. Добавить выходной буфер <b>*IECBufIn*</b>.

2. Установить **tid** **=** **M****\_****ME****\_TF_1**, адрес ASDU **adr** **= 3**, адрес объекта информации **ioa** **= 2**.

   Тип данных **tp** установить равным **AO**, так как **M****\_****ME****\_****TF****\_1** – величина с плавающей запятой.

3. Для расшифровки описателя качества соединить связью выход **qlf** со входом блока <b>*FromReg*</b><b>*8*</b> из библиотеки <b>*paCore*</b>. Здесь в младшем бите добавляется еще один атрибут **OV** – переполнение.

4. Для расшифровки метки времени соединим выходы **tm****1** и **tm****2** с входами блока [IECTransTime](#topic-108209).

   ![Настройка IECBuf In. M SP NA 1 07](https://docs.owen.ru/book_img/2148/135008.png)

   *Настройка IECBufIn. M_ME_TF_1*

5. Подключить <b>*IECBufOut*</b> к коннектору блока <b>*IEC*</b><b>*104*</b><b>*Server*</b>.

   Настройка канала АРМ в MasterSCADA 4D:

   ![Настройка IECBuf In. M SP NA 1 08](https://docs.owen.ru/book_img/2148/135007.png)

   *Настройки канала АРМ*

   ![Настройка IECBuf In. M SP NA 1 09](https://docs.owen.ru/book_img/2148/135006.png)

   *Настройки канала АРМ*

6. Запустить программы на ПЛК и АРМ. Корректный обмен изображен на рисунках ниже.

   ![Настройка IECBuf In. M SP NA 1 10](https://docs.owen.ru/book_img/2148/135005.png)

   *Корректный обмен. Сервер*

   ![Настройка IECBuf In. M SP NA 1 11](https://docs.owen.ru/book_img/2148/135004.png)

   *Корректный обмен. Клиент*

<a id="topic-108219"></a>

#### Передача информации о процессе в направлении управления (C)

Для отправки объекта информации с типом C_SC_NA_1 (однопозиционная команда ТУ) в направлении управления (см. [Приложение А](#topic-108226)). следует:

1. Добавить на любую страницу места работы <b>*Фон*</b> выходной буфер [IECBufOut](#topic-108204).

2. Установить **tid** **=** **C****\_****SC****\_****NA****\_1**, адрес ASDU **adr** **= 3**, адрес объекта информации **ioa** **= 3**.

   Установить тип данных **tp** = **DI**, так как **C****\_****SC****\_****NA****\_1** передает значение «включить/выключить» в младшем бите.

3. Установить условия передачи данных **trt** = **0****x****08**: **бит 3** – команда (причины передачи **6**, **8**, **10**) (см. [Приложение Б](#topic-108227)).

   Передача команды активируется битом **0** входа **ctl**. Для удобства нужно связать вход **ctl** и выход блока **ToReg8** из библиотеки **paCore**.

   ![Настройка IECBuf Out. C SC NA 1 01](https://docs.owen.ru/book_img/2148/135003.png)

   *Настройка IECBufOut. C_SC_NA_1*

4. Добавить коннектор для подключения выходного буфера <b>*IECBuf*</b><b>*Out*</b> у блока <b>*IEC*</b><b>*104*</b><b>*uni*</b>.

5. Подключить <b>*IECBuf*</b><b>*Out*</b> к коннектору блока <b>*IEC*</b><b>*104*</b><b>*uni*</b>.

   В качестве сервера использовать [MasterSCADA 4D](https://owen.ru/product/masterscada_4d). Можно также запустить в качестве сервера проект, рассмотренный в [разделе](#topic-108217), на виртуальном контроллере с помощью панели отладки.

6. Настройки канала АРМ:

   ![Настройка IECBuf Out. C SC NA 1 02](https://docs.owen.ru/book_img/2148/135022.png)

   *Настройки канала АРМ*

   ![Настройка IECBuf Out. C SC NA 1 03](https://docs.owen.ru/book_img/2148/135021.png)

   *Настройки канала АРМ*

7. Запустить программы на ПЛК и АРМ. Корректный обмен отображен на рисунках ниже.

   ![Настройка IECBuf Out. C SC NA 1 04](https://docs.owen.ru/book_img/2148/135020.png)

   *Корректный обмен. Сервер*

   ![Настройка IECBuf Out. C SC NA 1 05](https://docs.owen.ru/book_img/2148/135019.png)

   *Корректный обмен. Клиент*

Для отправки объекта информации с типом **C_SE_TC_1** (команда уставки с меткой времени) следует:

1. Добавить выходной буфер <b>*IECBufOut*</b>.

2. Задать **tid** **=** **C****\_****SE****\_****TC****\_1**, адрес ASDU **adr** **= 3**, адрес объекта информации **ioa** **= 4**.

   Установить тип данных **tp** = **AI**, так как **C****\_****SE****\_****TC****\_1** имеет формат с плавающей запятой.

3. На входе **flg** установить **4 бит** – посылать команду при изменении значения на входе. При такой настройке для отправки команды не нужно устанавливать бит на входе **ctl**.

   ![Настройка IECBuf Out. C SC NA 1 06](https://docs.owen.ru/book_img/2148/135018.png)

   *Настройка IECBufIn. C_SE_TC_1*

4. Добавить коннектор для подключения выходного буфера <b>*IECBuf*</b><b>*Out*</b> у блока <b>*IEC*</b><b>*104*</b><b>*uni*</b>.

5. Подключить <b>*IECBuf*</b><b>*Out*</b> к коннектору блока <b>*IEC*</b><b>*104*</b><b>*uni*</b>.

   Настройка канала АРМ в MasterSCADA 4D:

   ![Настройка IECBuf Out. C SC NA 1 07](https://docs.owen.ru/book_img/2148/135017.png)

   *Настройки канала АРМ*

   ![Настройка IECBuf Out. C SC NA 1 08](https://docs.owen.ru/book_img/2148/135016.png)

   *Настройки канала АРМ*

6. Запустить программы на ПЛК и АРМ. Корректный обмен изображен на рисунках ниже.

   ![Настройка IECBuf Out. C SC NA 1 09](https://docs.owen.ru/book_img/2148/135015.png)

   *Корректный обмен. Сервер*

   ![Настройка IECBuf Out. C SC NA 1 10](https://docs.owen.ru/book_img/2148/135014.png)

   *Корректный обмен. Клиент*

<a id="topic-108220"></a>

#### Прием упакованных данных (M_EP\_\*)

В этом подразделе показан прием объекта информации с типом **M****\_****EP****\_****TE****\_1** – упакованное сообщение с меткой времени **СР56Время2а**. Особенность данного типа состоит в том, что в сообщении передается структура, состоящая из битовой маски и интервала времени.

Для приема объекта информации с типом **M_EP_TE_1** следует выполнить действия:

1. Добавить на любую страницу места работы <b>*Фон*</b> выходной буфер [IECBufIn](#topic-108203).

2. Задать **tid** **=** **M****\_EP_TE_1**, адрес ASDU **adr** **= 3**, адрес объекта информации **ioa** **= 5**.

   Установить тип данных **tp** = **uLX**, т.к. входные данные для данного типа ASDU структурированы.

3. Для расшифровки структуры на выходе **o** использовать блок [IECEPFromInt](#topic-108205). Для удобства подключим к нему блок <b>*ToReg*</b><b>*8*</b> из библиотеки <b>*paCore*</b>.

4. Для расшифровки описателя качества с выхода **qlf** подсоединим его также к входу блока <b>*FromReg*</b><b>*8*</b>. Здесь добавляется атрибут **EI** – действительность интервала длительности.

5. Для расшифровки метки времени выход **qlf** и вход блока **FromReg8**. [IECTransTime](#topic-108209).

   ![Настройка IECBuf In. M EP TE 1](https://docs.owen.ru/book_img/2148/135013.png)

   *Настройка IECBufIn. M_EP_TE_1*

6. Подключить <b>*IECBuf*</b><b>*In*</b> к коннектору блока <b>*IEC*</b><b>*104*</b><b>*uni*</b>.

   В качестве сервера настроим виртуальный контроллер Полигон. Можно также запустить в качестве клиента проект, рассмотренный в [разделе](#topic-108217), на виртуальном контроллере с помощью панели отладки.

7. Для формирования структуры использовать блок [IECIntFromEP](#topic-108206).

   ![Настройки сервера ПА 2](https://docs.owen.ru/book_img/2148/135032.png)

   *Настройки сервера ПА*

8. Запустить программы на ПЛК и виртуальном контроллере. Корректный обмен показан на рисунках ниже.

   ![Корректный обмен. Сервер 2](https://docs.owen.ru/book_img/2148/135031.png)

   *Корректный обмен. Сервер*

   ![Корректный обмен. Клиент 2](https://docs.owen.ru/book_img/2148/135030.png)

   *Корректный обмен. Клиент*

<a id="topic-108221"></a>

#### Прием интегральных сумм (M_IT\_\*)

Здесь показан прием объекта информации с типом **M****\_****IT****\_****TB****\_1** – интегральная сумма с меткой времени **CP****56Время2****a**. Особенность данного типа состоит в том, что в сообщении передается знаковое целое (в 4-х байтах).

Для приема объекта информации с типом **M_IT_TB_1** следует:

1. Добавить на любую страницу места работы <b>*Фон*</b> выходной буфер [IECBufIn](#topic-108203).

2. Задать **tid** **=** **M****\_IT_TB_1**, адрес ASDU **adr** **= 3**, адрес объекта информации **ioa** **= 6**.

   Установить тип данных **tp** = **LX**.

3. Для расшифровки структуры на выходе **qlf** использовать блок [IECITSQIn](#topic-108207).

   Для расшифровки метки времени соединить выходы **tm****1** и **tm****2** с входами блока [IECTransTime](#topic-108209).

   ![Настройка IECBuf In. M IT TB 1](https://docs.owen.ru/book_img/2148/135029.png)

   *Настройка IECBufIn. M_IT_TB_1*

4. Подключить <b>*IECBuf*</b><b>*Out*</b> к коннектору блока <b>*IEC*</b><b>*104*</b><b>*Server*</b>.

   В качестве сервера настроить виртуальный контроллер **Полигон**. Можно также запустить в качестве сервера проект, рассмотренный в [разделе](#topic-108212), на виртуальном контроллере с помощью панели отладки.

5. Для формирования структуры использовать блок [IECITSQOut](#topic-108208).

   ![Настройки сервера ПА 3](https://docs.owen.ru/book_img/2148/135028.png)

   *Настройки сервера ПА*

6. Запустим программы на ПЛК и виртуальном контроллере. Корректный обмен показан на рисунках ниже.

   ![Корректный обмен. Сервер 3](https://docs.owen.ru/book_img/2148/135027.png)

   *Корректный обмен. Сервер*

   ![Корректный обмен. Клиент 3](https://docs.owen.ru/book_img/2148/135026.png)

   *Корректный обмен. Клиент*

<a id="topic-108222"></a>

## Примеры настройки обмена по протоколу МЭК 60870-5-101

<a id="topic-108223"></a>

### Настройка обмена в режиме сервера протокола 5-101

Здесь и далее в примерах настраивается обмен по протоколу **5-101**.

В данном примере ПЛК210 будет выступать в роли контролируемой станции (сервера).

Пример доступен для скачивания по [ссылке](https://owen.ru/product/polygon/documentation). Пароль для доступа к отладчику – **1**.

Для настройки обмена данными с ПЛК в режиме сервера следует:

1. Добавить на любую страницу места работы <b>*Фон*</b> блок [IEC101uni](#topic-108200).

2. Соединить вход блока **cnc** и аналогичный выход блока работы с COM-портом. Для контроллеров ОВЕН блоки работы с COM-портами <b>*210-*</b><b>*RS*</b><b>*485*</b> и <b>*210-*</b><b>*RS*</b><b>*232*</b> находятся в библиотеке <b>*paOwenIO*</b>.

3. На входе **prm** зададать режим **IEC****\_****SLAVE**.

4. Добавить коннектор для выходного буфера [IECBufOut](#topic-108204).

   ![Настройка IEC101uni в режиме IEC SLAVE 01](https://docs.owen.ru/book_img/2148/135025.png)

   *Настройка IEC101uni в режиме IEC_SLAVE*

   > **Примечание.** Прием и передача ASDU для протокола **5-101** аналогичны рассмотренным в [разделах](#topic-108212) [и](#topic-108217). Поддерживаемые типы ASDU приведены в [Приложении А](#topic-108226) и в справке среды программирования.

   ![Настройка IEC101uni в режиме IEC SLAVE 02](https://docs.owen.ru/book_img/2148/135024.png)

   *Корректный обмен*

<a id="topic-108224"></a>

### Настройка обмена в режиме клиента протокола 5-101

В данном примере ПЛК210 будет выступать в роли контролирующей станции (клиента).

Пример доступен для скачивания по [ссылке](https://owen.ru/product/polygon/documentation). Пароль для доступа к отладчику – **1**.

Для настройки обмена данными с ПЛК в режиме клиента следует:

1. Добавить на любую страницу места работы <b>*Фон*</b> блок [IEC101uni](#topic-108200).

2. Соединить вход блока **cnc** и аналогичный выход блока работы с COM-портом. Для контроллеров ОВЕН блоки работы с COM-портами <b>*210-*</b><b>*RS*</b><b>*485*</b> и <b>*210-*</b><b>*RS*</b><b>*232*</b> находятся в библиотеке <b>*paOwenIO*</b>.

3. На входе **prm** задать режим **IEC****\_****MASTER**.

4. Добавить коннектор для выходного буфера [IECBufOut](#topic-108204).

   ![Настройка IEC101uni в режиме IEC MASTER 01](https://docs.owen.ru/book_img/2148/135023.png)

   *Настройка IEC101uni в режиме IEC_MASTER*

   > **Примечание.** Прием и передача ASDU для протокола **5-101** аналогичны рассмотренным в [разделах](#topic-108212) [и](#topic-108217). Поддерживаемые типы ASDU приведены в [Приложении А](#topic-108226) и в справке среды программирования.

   ![Настройка IEC101uni в режиме IEC MASTER 02](https://docs.owen.ru/book_img/2148/135042.png)

   *Корректный обмен*

<a id="topic-108225"></a>

## Отладка и диагностика обмена

Для отладки и диагностики обмена по протоколам МЭК 60870 в среде реализован вывод диагностических сообщений.

Конфигурация типов выводимых сообщений в лог протокола и место вывода определяется входом **dbg** блоков протоколов [IEC101uni](#topic-108200), [IEC104uni](#topic-108201), [IEC104Server](#topic-108202).

Если задать **0** на данном входе, в консоль выводятся только сообщения с **типом 0** (фатальная ошибка, статусная информация и т.п.).

> [!NOTE]
> **Примечание.** Сообщения с **типом 0** выводятся всегда, независимо от установленного значения на входе **dbg**.

> [!NOTE]
> **Примечание.** Так как формирование лога диагностических сообщений значительно нагружает процессор ПЛК, при неиспользовании диагностических сообщений рекомендуется устанавливать **dbg = 0**.

![Вывод сообщений при dbg = 0](https://docs.owen.ru/book_img/2148/135041.png)

<i>Вывод сообщений при dbg **= 0**</i>

Вывод сообщений осуществляется двумя различными способами. Способ вывода задается соответствующим битом на входе **dbg** (см. **биты 8** и **9**):

- Вывод в консоль – при запуске проекта в консоли;
- Вывод через блок <b>*RamLog*</b> из библиотеки <b>*paCore*</b> (см. справку среды).

Первый способ удобен при тестировании и отладке программы, когда есть возможность запустить ее через консоль.

![Вывод сообщений в консоль при dbg = 0x1C7](https://docs.owen.ru/book_img/2148/135040.png)

*Вывод сообщений в консоль при dbg = 0x1C7*

Второй способ позволяет записывать лог из оперативной памяти ПЛК в файл на диске контроллера.

Пример настройки записи лога через <b>*RamLog*</b> в файл на USB-накопителе:

![Настройка вывода лога через Ram Log](https://docs.owen.ru/book_img/2148/135039.png)

*Настройка вывода лога через RamLog*

![Вывод сообщений в файл при dbg = 0x2C7](https://docs.owen.ru/book_img/2148/135038.png)

*Вывод сообщений в файл при dbg = 0x2C7*

Для отслеживания времен выполнения подпрограмм, размера очереди сообщений, переполнения очереди и др. можно использовать блок <b>*IECInfo*</b> (описание выходов см. в [разделе](#topic-108210)).

> [!NOTE]
> **Примечание.** Блок <b>*IECInfo*</b> совместим только с блоком протокола <b>*IEC*</b><b>*104*</b><b>*Server*</b>.

![Работа блока IECInfo](https://docs.owen.ru/book_img/2148/135037.png)

*Работа блока IECInfo*

<a id="topic-108226"></a>

## Описание типов информации ASDU 

**Описание типов информации ASDU**

**Информация о процессе в направлении контроля (M)**

| Код | Вид информации | Метка | Реализация в paIEC104 |
| --- | --- | --- | --- |
| 1 | Одноэлементная | M_SP_NA_1 | Да |
| 2 | Одноэлементная с временной меткой | M_SP_TA_1 | Да<br>(только 5-101) |
| 3 | Двухэлементная | M_DP_NA_1 | Да |
| 4 | Двухэлементная с временной меткой | M_DP_TA_1 | Да<br>(только 5-101) |
| 5 | Информация о положении отпаек | M_ST_NA_1 | Нет |
| 6 | Информация о положении отпаек с временной меткой | M_ST_TA_1 | Нет |
| 7 | Строка из 32 битов | M_BO_NA_1 | Да |
| 8 | Строка из 32 битов с временной меткой | M_BO_TA_1 | Да<br>(только 5-101) |
| 9 | Измерение | M_ME_NA_1 | Нет |
| 10 | Измерение с временной меткой | M_ME_TA_1 | Нет |
| 11 | Измерение, масштабируемое | M_ME_NВ_1 | Да |
| 12 | Измерение, масштабируемое, с временной меткой | M_ME_TВ_1 | Да<br>(только 5-101) |
| 13 | Измерение, короткий формат с плавающей запятой | M_ME_NС_1 | Да |
| 14 | Измерение, короткий формат с плавающей запятой, с временной меткой | M_ME_TС_1 | Да<br>(только 5-101) |
| 15 | Интегральная сумма (нарастающий итог) | M_IT_NA_1 | Да |
| 16 | Нарастающий итог с временной меткой | M_IT_ТA_1 | Да<br>(только 5-101) |
| 17 | Информация о релейной защите с временной меткой | M_ЕP_TA_1 | Да<br>(только 5-101) |
| 18 | Упакованная информация о срабатывании ПОЗ с временной меткой | M_ЕP_TВ_1 | Да<br>(только 5-101) |
| 19 | Упакованная информация о срабатывании ВЦЗ с временной меткой | M_ЕP_TС_1 | Да<br>(только 5-101) |
| 20 | Упакованная одноэлементная информация с определением изменения состояния | M_PS_NA_1 | Нет |
| 21 | Значение измеряемой величины, нормализованное, без описателя качества | M_ME_ND_1 | Нет |
| 22…29 | Резерв для дальнейших совместимых определений | - | - |
| 30 | Одноэлементная информация с меткой времени **СР56Время2а**<sup>1)</sup> | M_SP_TB_1 | Да |
| 31 | Двухэлементная информация с меткой времени **СР56Время2а** | M_DP_TB_1 | Да |
| 32 | Информация о положении отпаек с меткой времени **СР56Время2а** | M_ST_TB_1 | Нет |
| 33 | Строка из 32 бит с меткой времени **СР56Время2а** | M_BO_TB_1 | Да |
| 34 | Значение измеряемой величины, нормализованное, с меткой времени **СР56Время2а** | M_ME_TD_1 | Нет |
| 35 | Значение измеряемой величины, масштабированное, с меткой времени **СР56Время2а** | M_ME_TE_1 | Да |
| 36 | Значение измеряемой величины, короткий формат с плавающей запятой с меткой времени **СР56Время2а** | M_ME_TF_1 | Да |
| 37 | Интегральная сумма с меткой времени **СР56Время2а** | M_IT_TB_1 | Да |
| 38 | Информация о работе релейной защиты с меткой времени **СР56Время2а** | M_EP_TD_1 | Да |
| 39 | Упакованная информация о срабатывании пусковых органов защиты с меткой времени **СР56Время2а** | M_EP_TE_1 | Да |
| 40 | Упакованная информация о срабатывании выходных цепей защиты с меткой времени **СР56Время2а** | M_EP_TF_1 | Да |
| 41…44 | Резерв для дальнейших совместимых определений | - | - |

**Информация о процессе в направлении управления (C)**

| Код | Вид информации | Метка | Реализация в paIEC104 |
| --- | --- | --- | --- |
| 45 | **CON**<sup>2)</sup> Команда однопозиционная | C_SC_NA_1 | Да |
| 46 | **CON** Команда двухпозиционная | C_DC_NA_1 | Да |
| 47 | **CON** Команда пошагового регулирования | C_RC_NA_1 | Нет |
| 48 | **CON** Команда уставки, нормализованное значение | C_SE_NA_1 | Нет |
| 49 | **CON** Команда уставки, масштабируемое значение | C_SE_NВ_1 | Да |
| 50 | **CON** Команда уставки, короткое число с плавающей запятой | C_SE_NС_1 | Да |
| 51 | **CON** Строка из 32 битов | C_BO_NA_1 | Да |
| 52…57 | Резерв для дальнейших совместимых определений | - | - |
| 58 | Однопозиционная команда с меткой времени **СР56Время2а** | C_SC_TA_1 | Да<br>(только 5-104) |
| 59 | Двухпозиционная команда с меткой времени **СР56Время2а** | C_DC_TA_1 | Да<br>(только 5-104) |
| 60 | Команда пошагового регулирования с меткой времени **СР56Время2а** | C_RC_TA_1 | Нет |
| 61 | Команда уставки, нормализованное значение с меткой времени **СР56Время2а** | C_SE_TA_1 | Нет |
| 62 | Команда уставки, масштабированное значение с меткой времени **СР56Время2а** | C_SE_TB_1 | Да<br>(только 5-104) |
| 63 | Команда уставки, короткий формат с плавающей запятой с меткой времени **СР56Время2а** | C_SE_TC_1 | Да<br>(только 5-104) |
| 64 | Строка из 32 бит с меткой времени **СР56Время2а** | C_BO_TA_1 | Да<br>(только 5-104) |
| 65…69 | Резерв для дальнейших совместимых определений | - | - |

**Системная информация в направлении контроля (M)**

| Код | Вид информации | Метка | Реализация в paIEC104 |
| --- | --- | --- | --- |
| 70 | Конец инициализации | M_EI_NA_1 | Да |
| 71…99 | Резерв для дальнейших совместимых определений | - | - |

**Системная информация в направлении управления (C)**

| Код | Вид информации | Метка | Реализация в paIEC104 |
| --- | --- | --- | --- |
| 100 | **CON** Команда опроса | C_IC_NA_1 | Да |
| 101 | **CON** Команда опроса счетчика | C_CI_NA_1 | Да |
| 102 | **CON** Команда считывания | C_RD_NA_1 | Да |
| 103 | **CON** Команда синхронизации часов | C_CS_NA_1 | Да |
| 104 | **CON** Команда тестирования | C_TS_NA_1 | Нет |
| 105 | **CON** Команда возврата процесса в исходное состояние | C_RP_NA_1 | Нет |
| 106 | **CON** Команда передачи задержки | C_CD_NA_1 | Нет |
| 107 | Команда тестирования с меткой времени **СР56Время2а** | C_TS_TA_1 | Нет |
| 108…109 | Резерв для дальнейших совместимых определений | - | - |

**Параметры в направлении управления (P)**

| Код | Вид информации | Метка | Реализация в paIEC104 |
| --- | --- | --- | --- |
| 110 | **CON** Параметр измеряемой величины, нормализованное значение | Р_МЕ_NA_1 | Нет |
| 111 | **CON** Параметр измеряемой величины, масштабируемое значение | Р_МЕ_NB_1 | Нет |
| 112 | **CON** Параметр измеряемой величины, короткое число с плавающей запятой | Р_МЕ_NC_1 | Нет |
| 113 | **CON** Параметр активации | Р_AC_NC_1 | Нет |
| 114…119 | Резерв для дальнейших совместимых определений | - | - |

**Передача файлов (F)**

| Код | Вид информации | Метка | Реализация в paIEC104 |
| --- | --- | --- | --- |
| 120 | Файл готов | F_FR_NA_1 | Нет |
| 121 | Секция готова | F_SR_NA_1 | Нет |
| 122 | Вызов директории, выбор файла, вызов файла, секции | F_SC_NA_1 | Нет |
| 123 | Последняя секция, последний сегмент | F_LS_NA_1 | Нет |
| 124 | Подтверждение файла, подтверждение секции | F_AF_NA_1 | Нет |
| 125 | Сегмент | F_SG_NA_1 | Нет |
| 126 | Директория | F_DR_TA_1 | Нет |
| 127 | Резерв для дальнейших совместимых определений | - | - |

> [!NOTE]
> **Примечание.** <sup>1)</sup> ASDU с метками времени **СР56Время2а** используются, если пункт управления не может добавить время от часов до лет однозначно к получаемым ASDU с метками от миллисекунд до минут. Это может случиться при использовании сетей с неопределенными задержками или когда возникает временный сбой в сети
>
> <sup>2)</sup> ASDU с меткой **CON**, передаваемые в направлении управления, подтверждаются прикладным уровнем и могут возвращаться в направлении контроля при различных причинах передачи. Эти отраженные ASDU используются для положительного/отрицательного квитирования (проверки)

Более подробно типы описаны в ГОСТ Р МЭК 60870-5 «Устройства и системы телемеханики. Часть 5. Протоколы передачи» ([раздел 101](https://meganorm.ru/Data2/1/4293850/4293850742.pdf), [раздел 104](https://meganorm.ru/Data/58/5809.pdf)).

<a id="topic-108227"></a>

## Причины передачи (COT)

**Причины передачи (COT)**

| Код | Описание |
| --- | --- |
| 0 | Не используется |
| 1 | Периодическая передача |
| 2 | Фоновое сканирование (**Background Scan**) |
| 3 | Спорадическая передача при возникновении события (**Spontaneous**) |
| 4 | Сообщение об инициализации (**Initialized**) |
| 5 | Запрос или запрашиваемые данные (**Request** **Or** **Requested**) |
| 6 | Активация (**Activation**) |
| 7 | Подтверждение активации (**Activation** **Confirm**) |
| 8 | Деактивация (**De****a****ctivation**) |
| 9 | Подтверждение деактивации (**De****a****ctivation Confirm**) |
| 10 | Завершение активации (**Activation** **Termination**) |
| 11 | Обратная информация, вызванная удаленной командой (**Return Information Caused By A Remote Command**) |
| 12 | Обратная информация, вызванная местной командой (**Return Information Caused By A Local Command**) |
| 13 | Передача файлов (**File Transfer**) |
| 14…19 | Резерв |
| 20 | Общий опрос (**Interrogated By Station Interrogation**) |
| 21…36 | Опрос группы 1…16 (**Interrogated By Group 1…16 Interrogation**) |
| 37 | Общий опрос счетчиков |
| 38…41 | Запрос счетчиков группы 1…4 |
| 42…43 | Резерв |
| 44 | Неизвестный тип идентификатора |
| 45 | Неизвестная причина передачи |
| 46 | Неизвестный общий адрес станции |
| 47 | Неизвестный адрес объекта информации |

 
