Библиотека paIEC104 содержит функциональные блоки для реализации обмена по протоколам МЭК 60870-5-101 и МЭК 60870-5-104.
В структуру библиотеки входят блоки IEC101uni и IEC104uni, с помощью которых настраивается обмен по протоколам 5-101 (режим клиент) и 5-104 (режим сервер).. Для работы с этими блоками требуется подключить блоки работы с системными интерфейсами –210-RS485/210-RS485 из библиотеки paOwenIO иTcpIpClA из библиотеки paCore.

Для настройки сервера по протоколу 5-104 рекомендуется использовать более новый блок IEC104Server. Для его работы не требуется отдельный блок для работы с системным сокетом.
Блоки IECBufIn и IECBufOut реализуют входной и выходной буфер данных протокола, соответственно.
Остальные блоки библиотеки являются вспомогательными.
Блок IECInfo используется для отладочных целей.
Для добавления библиотеки paIEC104 в проект следует:
Перейти в меню Окна/Проекты. В появившемся окне отобразится текущий проект и добавленные библиотеки.
Добавление библиотеки paIEC104 в проект Нажать кнопку Открыть и перейти в папку с файлами библиотеки, которую необходимо добавить. Затем в выпадающем списке выбрать тип файла Библиотека Полигон 2 (*.ll2).
Добавление библиотеки paIEC104 в проект В окне появится файл библиотеки с расширением .ll2. Следует выбрать его и нажать Открыть.
Добавление библиотеки paIEC104 в проект
Добавленная библиотека отобразится в окне Проекты.
Реализация протокола МЭК 60870-5-101 (IEC101uni)
Блок IEC101uni реализует протокол стандарта МЭК 60870-5-101 и определяет функции контролирующей (клиента) и контролируемой станции (сервера).
Совместно с IEC101uni используются специальные буфера – IECBufIn для получаемых данных/команд, IECBufOut для отправляемых данных/команд. С помощью данных буферов создается база объектов информации, участвующих в обмене по указанному протоколу.
Так как работа блока занимает значительное время, данный блок следует размещать только в Фоне.
Назначение входов и выходов IEC101uni
Элемент | Описание |
---|---|
Входы | |
cnc | Связь с блоком последовательного интерфейса 210-RS485/210-RS232 из библиотеки paOwenIO |
enbl | Режим работы блока: 0 – блок отключен; 1 – блок в работе |
ctl | Инициация команды управления. Битовая маска: Бит 1 – инициировать команду общего опроса; Бит 7 – отсылать диагностические сообщения (бит 12 на входе cfg должен быть установлен до компиляции проекта) |
tm1 | Не используется |
tm2 | Не используется |
dbg | Конфигурация отладки. Битовая маска: Бит 0…7 – битовая маска, которая определяет, какие типы сообщений выводить: бит 0 – тип 1, ..., бит 7 – тип 8 (высший уровень); Бит 8 – выводить в консоль; Бит 9 – выводить через блок RamLog из библиотеки paCore |
bo | Входы для подключения IECBufOut (циклический) |
Входы (константные) | |
tmp | Период вызова главной функции блока, мс |
prm | Тип канального уровня: IEC_MASTER – инициирует соединение; IEC_SLAVE – ожидает соединение |
ltp | Режим канального уровня: IEC_BALANCED – балансный; IEC_UNBALANCED – небалансный |
oa | Не используется |
lka | Адрес станции в сети, если используется (Link Address) |
las | Длина поля адреса станции. Определяется протоколом. Допустимые значения на входе: LINK_ADDR_NO – адрес станции не используется; LINK_ADDR_1 – 1 байт; LINK_ADDR_2 – 2 байта |
aas | Длина поля общего адреса ASDU. Определяется протоколом. Допустимые значения на входе: ASDU_ADDR_1 – 1 байт; ASDU_ADDR_2 – 2 байта |
cts | Длина поля причины передачи (COT). Определяется протоколом. Допустимые значения на входе: COT_1 – 1 байт; COT_2 – 2 байта |
iaa | Длина адреса объекта информации. Определяется протоколом. Допустимые значения на входе: IOA_1 – 1 байт; IOA_2 – 2 байта; IOA_3 – 3 байта |
c1s | Глубина очереди сообщений класса 1 |
c2s | Глубина очереди сообщений класса 2 |
ofp | Если в течение этого времени (в мс) нет обмена, то по интерфейсу на выход sts бит 0 блока выдается значение 0 – нет связи |
frg | Максимальное межсимвольное расстояние при приеме кадра. Если это время (в мс) истекло – кадр считается недействительным |
cpp | Период отправки с причиной передачи циклический, мс. Необходимость передачи данных с этой причиной задается для каждого выходного буфера. Рекомендуется задавать cpp ≠ bpp так, чтобы моменты срабатывания таймеров как можно реже пересекались |
bpp | Период отправки сообщений с причиной передачи «фоновое сканирование», мс. Необходимость передачи данных с этой причиной задается для каждого выходного буфера. Рекомендуется задавать cpp ≠ bpp так, чтобы моменты срабатывания таймеров как можно реже пересекались |
cfg | Конфигурация. Определяет поведение узла при старте и в процессе работы. Битовая маска: Бит 0 – синхронизировать время после установления связи (используется системное время); Бит 1 – послать команду общего опроса после установления связи; Бит 4 – блокировать команду синхронизации времени; Бит 5 – включать метку времени при отправке данных с причиной передачи: циклические; Бит 6 – включать метку времени при отправке данных с причиной передачи: фоновое сканирование; Бит 8 – использовать структурированный адрес, прибавление стандартного смещения (для ТИТ смещение – 0x2000, для ТС смещение – 0x1000); Бит 12 – подключить протокол отправки диагностических сообщений |
ito | Таймаут выполнения команды информация о процессе в направлении управления C (см. Приложение А), мс |
sto | Таймаут выбора команды информация о процессе в направлении управления C (см. Приложение А), мс |
Выходы | |
itr | Выход для подключения IECBufIn |
st1 | Выход статуса. Битовая маска: Бит 0 – есть связь; Бит 1 – выполнена команда синхронизации времени; Бит 2 – первичный канальный уровень активен; Бит 3 – вторичный канальный уровень активен |
st2 | Не используется |

Примеры работы с блоком приведены в разделе.
Реализация протокола МЭК 60870-5-104 (IEC104uni)
Блок IEC104uni реализует протокол стандарта МЭК 60870-5-104 и определяет функции контролирующей (клиента) и контролируемой станции (сервера).

Для настройки сервера по протоколу 5-104 рекомендуется использовать более новый блок IEC104Server. Для него не требуется отдельный блок для работы с системным сокетом.

В данном документе рассматривается обновленный блок IEC104uni (ревизия 2, версия библиотеки paIEC104 – 902 и выше).
Совместно с IEC104uni используются специальные буфера – IECBufIn для получаемых данных/команд, IECBufOut для отправляемых данных/команд. С помощью данных буферов создается база объектов информации, участвующих в обмене по указанному протоколу.
Данный блок следует размещать только в Фоне, потому что работа блока занимает значительное время.
Назначение входов и выходов IEC104uni
Элемент | Описание |
---|---|
Входы | |
cnc | Связь с блоком TcpIpClA (для IEC_MASTER) или TcpIpSrA (для IEC_SLAVE) из библиотеки paCore |
enbl | Режим работы блока: 0 – блок отключен; 1 – блок в работе; 2 – блок в работе, нет отправки данных (может использоваться для резерва) |
ctl | Инициация команды управления. Битовая маска: Бит 1 – инициировать команду общего опроса; Бит 2 – инициировать команду общего опроса счетчиков; Бит 4 – не используется; Бит 5 – не используется; Бит 6 – не используется; Бит 7 – не используется |
tm1 | Не используется |
tm2 | Не используется |
dbg | Конфигурация отладки. Битовая маска: Бит 0…7 – битовая маска, которая определяет, какие типы сообщений выводить: бит 0 – тип 1, ..., бит 7 – тип 8 (высший уровень); Бит 8 – выводить в консоль; Бит 9 – выводить через блок RamLog из библиотеки paCore; Бит 10 – выводить через протокол отправки диагностических сообщений (для разработчиков); Бит 11 – выводить в консоль данные таймеров времени выполнения алгоритма и периода вызова алгоритма |
bo | Входы для подключения IECBufOut (циклический) |
Входы (константные) | |
tmp | Период вызова главной функции блока, мс (см. рисунок) |
prm | Тип канального уровня: IEC_MASTER – инициирует соединение; IEC_SLAVE – ожидает соединение |
oa | Не используется |
w | Число пакетов, после получения последовательности которых узел обязан передать подтверждение о приеме (см. t2): w < k, рекомендуется w = 2/3k |
k | Число пакетов, которое может отправить узел без подтверждения. Если k пакетов отправлено без подтверждения, то передача останавливается до получения подтверждения (см. t1): w < k, рекомендуется w = 2/3k |
t1 | Таймаут при посылке кадров, мс. Если через время t1 не было получено подтверждение – соединение закрывается: t2 < t1 |
t2 | Таймаут для подтверждения, если число принятых пакетов w не достигнуто, мс: t2 < t1 |
t3 | Таймаут для посылки блоков тестирования при долгом простое, мс. С периодом t3 передается тестовый пакет для проверки канала, если ответа на тестовый пакет не последует – соединение закрывается |
qsz | Длина очереди сообщений |
cpp | Период отправки с причиной передачи «циклический», мс. Необходимость передачи данных с этой причиной задается для каждого выходного буфера. Рекомендуется задавать cpp ≠ bpp так, чтобы моменты срабатывания таймеров как можно реже пересекались |
bpp | Период отправки сообщений с причиной передачи «фоновое сканирование», мс. Необходимость передачи данных с этой причиной задается для каждого выходного буфера. Рекомендуется задавать cpp ≠ bpp так, чтобы моменты срабатывания таймеров как можно реже пересекались |
cfg | Конфигурация. Определяет поведение узла при старте и в процессе работы. Битовая маска: Бит 0 – синхронизировать время после установления связи (используется системное время); Бит 1 – послать команду общего опроса после установления связи; Бит 2 – использовать глобальное время (UTC) в метках времени; Бит 3 – принудительно считать временные метки действительными; Бит 4 – блокировать команду синхронизации времени; Бит 5 – включать метку времени при отправке данных с причиной передачи: циклические; Бит 6 – включать метку времени при отправке данных с причиной передачи: фоновое сканирование; Бит 7 – включать метку времени при отправке данных с причиной передачи: общий опрос; Бит 8 – использовать структурированный адрес, прибавление стандартного смещения (для ТИТ смещение – 0x2000, для ТС смещение – 0x1000); Бит 9 – отключить замещение старых данных новыми в очереди; Бит 12 – не используется; Биты 16, 17, 18 и 19 – 4-х битовое число. В режиме контролируемой станции (IEC_SLAVE), определяет максимальное количество одновременно подключаемых контролирующих станций |
ito | Таймаут выполнения команды информация о процессе в направлении управления C (см. Приложение А), мс |
sto | Таймаут выбора команды информация о процессе в направлении управления C (см. Приложение А), мс |
bufsz | Размер буферов приема и передачи, байт |
Выходы | |
itr | Выход для подключения IECBufIn |
st0 | Выход статуса. Битовая маска: Бит 0 – есть связь; Бит 1 – выполнена команда синхронизации времени |
st1 | Не используется |

Рассмотрим алгоритм работы связки блоков TcpIpClA и IEC104uni (см. рисунок).
В фоновом потоке последовательно вызываются главные функции блоков. В алгоритме работы протокола можно выделить четыре основные подпрограммы, первые две из которых реализуют работу с системным сокетом (блок TcpIpClA).
Период вызова главной функции блока IEC104uni (и соответствующих подпрограмм) определяется входом tmp. Задание tmp может быть полезно для разгрузки потока в пользу других алгоритмов. При отсутствии ограничений можно установить tmp = 1.
При возникновении события на входе данные вместе с временной меткой (если она используется) передаются в очередь сообщений (длину очереди задает параметр qsz). Для каждого входа выделяется отдельная позиция в очереди.
Из очереди сообщений формируется пакет для отправки. Однотипные данные из очереди упаковываются в один пакет до достижения максимальной длины пакета, определенной стандартом.
Затем сформированный пакет помещается в буфер для передачи.
При задании параметра «длина очереди» qsz следует учитывать количество передаваемых объектов информации и частоту их изменения.
Размеры входных и выходных буферов bufsz следует выбирать из тех же соображений.

Пример работы с блоком приведен в разделе.
Реализация протокола МЭК 60870-5-104. Сервер (IEC104Server)
Блок IEC104Server реализует протокол стандарта МЭК 60870-5-104 и определяет функцию контролируемой станции (сервера).

Принципиальное отличие блока IEC104Server от IEC104uni состоит в том, что в IEC104Server уже включены подпрограммы работы с системными сокетами. Помимо этого, различные подпрограммы протокола выделены в отдельные потоки (см. рисунок). Таким образом, работа протокола независима от нагруженности фонового потока.
Совместно с IEC104Server используются специальные буфера – IECBufIn для получаемых данных/команд, IECBufOut для отправляемых данных/команд. С помощью данных буферов создается база объектов информации, участвующих в обмене по указанному протоколу.
Данный блок следует размещать только в Фоне, потому что работа блока занимает значительное время.
Назначение входов и выходов IEC104Server
Элемент | Описание |
---|---|
Входы | |
enbl | Режим работы блока: 0 – блок отключен; 1 – блок в работе; 2 – блок в работе, нет отправки данных (может использоваться для резерва) |
ctl | Инициация команды управления. Битовая маска: Бит 1 – инициировать команду общего опроса; Бит 2 – инициировать команду общего опроса счетчиков |
tm1 | Не используется |
tm2 | Не используется |
dbg | Конфигурация отладки. Битовая маска: Бит 0…7 – битовая маска, которая определяет, какие типы сообщений выводить: бит 0 – тип 1, ..., бит 7 – тип 8 (высший уровень); Бит 8 – выводить в консоль; Бит 9 – выводить через блок RamLog из библиотеки paCore; Бит 10 – выводить через протокол отправки диагностических сообщений (для разработчиков); Бит 11 – выводить в консоль данные таймеров времени выполнения алгоритма и периода вызова алгоритма |
bo | Входы для подключения IECBufOut (циклический) |
Входы (константные) | |
tmp | Период вызова подпрограммы обнаружения событий, мс (см. рисунок) |
lip | Локальный IP-адрес |
lprt | Локальный порт |
sdr | Сетевой стек, для ПЛК ОВЕН "/" |
evntsprio | Приоритет потока обработки событий (см. рисунок) |
rxtxprio | Приоритет потока приема/передачи (см. рисунок) |
slts | Ограничение количества одновременных подключений клиентами |
rxbsz | Размер буфера приема, байт |
txbsz | Размер буфера передачи, байт |
oa | Не используется |
w | Число пакетов, после получения последовательности которых, узел обязан передать подтверждение о приеме (см. t2): w < k, рекомендуется w = 2/3k |
k | Число пакетов, которое может отправить узел без подтверждения. Если k пакетов отправлено без подтверждения, то передача останавливается до получения подтверждения (см. t1): w < k, рекомендуется w = 2/3k |
t1 | Таймаут при посылке кадров, мс. Если через время t1 не было получено подтверждение – соединение закрывается: t2 < t1 |
t2 | Таймаут для подтверждения, если число принятых пакетов w не достигнуто, мс: t2 < t1 |
t3 | Таймаут для посылки блоков тестирования при долгом простое, мс. С периодом t3 передается тестовый пакет для проверки канала, если ответа на тестовый пакет не последует – соединение закрывается |
qsz | Длина очереди сообщений |
cpp | Период отправки с причиной передачи циклический, мс. Необходимость передачи данных с этой причиной задается для каждого выходного буфера. Рекомендуется задавать cpp ≠ bpp так, чтобы моменты срабатывания таймеров как можно реже пересекались |
bpp | Период отправки сообщений с причиной передачи фоновое сканирование, мс. Необходимость передачи данных с этой причиной задается для каждого выходного буфера. Рекомендуется задавать cpp ≠ bpp так, чтобы моменты срабатывания таймеров как можно реже пересекались |
cfg | Конфигурация. Определяет поведение узла при старте и в процессе работы. Битовая маска: Бит 0 – синхронизировать время после установления связи (используется системное время); Бит 1 – послать команду общего опроса после установления связи; Бит 2 – использовать глобальное время (UTC) в метках времени; Бит 3 – принудительно считать временные метки действительными; Бит 4 – блокировать команду синхронизации времени; Бит 5 – включать метку времени при отправке данных с причиной передачи: циклические; Бит 6 – включать метку времени при отправке данных с причиной передачи: фоновое сканирование; Бит 7 – включать метку времени при отправке данных с причиной передачи: общий опрос; Бит 8 – использовать структурированный адрес, прибавление стандартного смещения (для ТИТ смещение – 0x2000, для ТС смещение – 0x1000); Бит 9 – отключить замещение старых данных новыми в очереди |
ito | Таймаут выполнения команды информация о процессе в направлении управления C (см. Приложение А), мс |
sto | Таймаут выбора команды информация о процессе в направлении управления C (см. Приложение А), мс |
Выходы | |
itr | Выход для подключения IECBufIn |
st0 | Выход статуса. Битовая маска: Бит 0 – есть связь; Бит 1 – выполнена команда синхронизации времени |
st1 | Не используется |

Рассмотрим алгоритм работы блока IEC104Server.
В алгоритме работы протокола можно выделить четыре основные подпрограммы, первые две из которых реализуют работу с системным сокетом. Подпрограммы блока IEC104Server разделены на отдельные потоки (см. рисунок).
В фоновом потоке вызывается подпрограмма обнаружения подключения. В первом потоке с приоритетом rxtxprio вызывается программа приема/передачи данных. Во втором потоке с приоритетом evntsprio вызываются подпрограммы обнаружения событий с периодом tmp и формирования пакетов.
При возникновении события на входе данные вместе с временной меткой (если она используется) передаются в очередь сообщений (длину очереди задает qsz). Для каждого входа выделяется отдельная позиция в очереди.
Из очереди сообщений формируется пакет для отправки. Однотипные данные из очереди упаковываются в один пакет до достижения максимальной длины пакета, определенной стандартом.
Затем сформированный пакет помещается в буфер для передачи.
При задании параметра «длина очереди» qsz следует учитывать количество передаваемых объектов информации и частоту их изменения.
Размеры входных и выходных буферов, соответственно, rxbsz и txbsz следует выбирать из тех же соображений.
Отследить переполнение очереди сообщений можно с помощью блока IECInfo.

Пример работы с блоком приведен в разделе.
Входной буфер (IECBufIn)
Блок IECBufIn используется совместно с блоками IEC101uni, IEC104uni и IEC104Server как входной буфер.
Данный блок можно размещать только в Фоне.
Назначение входов и выходов IECBufIn
Элемент | Описание |
---|---|
Входы | |
itr | Вход для подключения к блоку протокола |
ini | Вход данных для начальной инициализации выхода (циклический) |
ctl | Не используется (циклический) |
Входы (константные) | |
tid | Тип ASDU (Type ID) для всех объектов информации в пределах буфера. Определяется протоколом. Допустимые значения на входе описаны в справке среды на библиотеку и в Приложении А |
adr | Адрес ASDU (общий адрес сектора) |
itg | Не используется |
dcl | Не используется |
ioa | Адрес объекта информации в пределах сектора (циклический) |
tp | Тип данных на выходах1) (циклический). Определяется средой Полигон. Допустимые значения на входе: DO (Char), uDO (Unsigned Char) – символьный; IO (Short), uIO (Unsigned Short) – 16-битное целое; LO (Long), uLO (Unsigned Long), LX (int32_t), uLX (uint32_t) – 32-битное целое; AO (Float) – число с плавающей запятой |
flg | Не используется (циклический) |
Выходы | |
bi | Не используется |
o | Выход данных (циклический) |
qlf | Квалификатор (циклический). Выход имеет различные функции, в зависимости от типа объекта информации (см. Приложение А):
|
tm1 | Выход времени, младшее слово3) (циклический) |
tm2 | Выход времени, старшее слово3) (циклический) |
sts | Не используется (циклический) |

1) Для типов ASDU M_EP_* (см. Приложение А) следует использовать базовый тип uLX на входе tp, т.к. входные данные для данного ASDU структурированны. Для расшифровки структуры используется блок IECEPFromInt.
2) Для расшифровки вспомогательных полей данных типов M_IT_* используется блок IECITSQIn.
3) Для расшифровки данных о времени на выходах используется блок IECTransTime.
Блоки IECBufIn и IECBufOut образуют словарь объектов информации, который участвует в обмене по протоколу. Словарь состоит из секторов и объектов внутри секторов.
Вход 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 следует установить тип входа IO (Short), т.к. для инкапсуляции используется структура данных типа int16_t.

Примеры работы с блоком приведены в разделе.
Выходной буфер (IECBufOut)
Блок IECBufOut используется совместно с блоками IEC101uni, IEC104uni и IEC104Server как выходной буфер.
Данный блок можно размещать только в Фоне.
Назначение входов и выходов IECBufOut
Элемент | Описание |
---|---|
Входы (константные) | |
tid | Тип ASDU (Type ID) для всех объектов информации в пределах буфера. Определяется протоколом. Допустимые значения на входе описаны в справке среды на библиотеку и в Приложении А |
adr | Адрес ASDU (общий адрес сектора) |
itg | Группа опроса (в т.ч. опроса счетчиков). Определяется протоколом. Допустимые значения на входе (битовая маска): Бит 0 – посылать данные при общем запросе; Бит 1 – посылать данные при запросе группы 1; Бит 2 – посылать данные при запросе группы 2; … Бит 16 – посылать данные при запросе группы 16 |
dcl | Класс данных (только для IEC101uni). Определяется протоколом. Допустимые значения на входе: CLASS1 – класс 1; CLASS2 – класс 2 |
trt | Определяет причину передачи (см. Приложение А). Определяется протоколом. Допустимые значения на входе (битовая маска): Бит 0 – передавать данные при изменении (причина передачи 3). Для типов ASDU M_ME_xx_1 посредством входа flg есть возможность задать дополнительные условия передачи; Бит 1 – передавать данные циклически (причина передачи 1) с периодом, указанным на входе cpp блока протокола; Бит 2 – передавать данные фоновым сканированием (причина передачи 2) с периодом, указанным на входе bpp блока протокола; Бит 3 – отправить при активации бита 0 на входе ctl: команда для типов ASDU C_* (причины передачи 6, 8, 10); Бит 4 – отправить при активации бита 1 на входе ctl (причина передачи определяется битом 6 на входе flg) |
ioa | Адрес объекта информации в пределах сектора (циклический) |
tp | Тип данных на выходах1) (циклический). Определяется средой Полигон. Допустимые значения на входе: DI (Char), uDI (Unsigned Char) – символьный; II (Short), uII (Unsigned Short) – 16-битное целое; LI (Long), uLI (Unsigned Long), LX (int32_t), uLX (uint32_t) – 32-битное целое; AI (Float) – число с плавающей запятой |
flg | Флаги (циклический). Для типов ASDU M_ME_xx_1 задает условия передачи спонтанных сообщений (см. Приложение А). Определяется протоколом. Допустимые значения на входе (битовая маска): Бит 0 – передавать данные, в случае, если текущее значение на входе in блока отличается от предыдущего более, чем на величину, определяемую входом tsh (Threshold) блока (мертвая зона); Бит 1 – не используется; Бит 2 – передавать данные, в случае, если значение на входе in меньше величины, определяемой входом llm (Low Limit); Бит 3 – передавать данные, в случае, если значение на входе in больше величины, определяемой входом hlm (High Limit); Для команд (тип ASDU C_*): Бит 4 – посылать команду при изменении значения на входе; Бит 5 – использовать предварительный выбор; Для всех, кроме команд: Бит 6 – причина передачи в принудительном режиме, т.е. при активации бита на входе ctl: 0 – причина передачи 1 (циклически), 1 – причина передачи 2 (фоновое сканирование) |
Входы | |
in | Входы данных (циклический) |
qlf | Квалификатор2) (циклический). Вход имеет различные функции, в зависимости от типа объекта информации (см. Приложение А):
|
tsh | Вход данных Threshold (циклический). Имеет значение только для типов ASDU M_ME_*_1 (см. Приложение А) (мертвая зона) |
smt | Не используется (циклический) |
llm | Вход данных Low Limit (циклический). Имеет значение только для типов ASDU M_ME_*_1 (см. Приложение А) |
hlm | Вход данных High Limit (циклический). Имеет значение только для типов ASDU M_ME_*_1 (см. Приложение А) |
ctl | Управление (циклический). Битовая маска: Бит 0 – выполнить команду (бит 3 на входе trt); Бит 1 – отправить принудительно (бит 4 на входе trt) |
Выходы | |
bo | Выход для подключения к блоку протокола |
sts | Не используется (циклический) |

1) Для типов ASDU M_EP_* (см. Приложение А)следует использовать базовый тип uLX на входе tp, т.к. входные данные для данного ASDU структурированы. Для формирования структуры используется блок IECIntFromEP.
2) Для формирования вспомогательных полей данных типов M_IT_* используется блок IECITSQOut.
Блоки IECBufIn и IECBufOut образуют словарь объектов информации, который участвует в обмене по протоколу. Словарь состоит из секторов и объектов внутри секторов.
Вход 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 следует установить тип входа II (Short), т.к. для инкапсуляции используется структура данных типа int16_t.

Примеры работы с блоком приведены в разделе .
Разбиение структуры типа ASDU M_EP_* (IECEPFromInt)
Блок IECEPFromInt предназначен для разбиения структурированных данных на выходе входного буфера c типом ASDU M_EP_* (см. Приложение А) на отдельные поля данных. Базовый тип выхода буфера (определяется входом tp буфера IECBufIn) должен быть uLX.
Данный блок можно размещать только в Фоне.
Назначение входов и выходов IECEPFromInt
Элемент | Описание |
---|---|
Входы | |
struct | Вход для подключения к выходу данных o блока IECBufIn |
Выходы | |
state | Выход состояния, определяется протоколом |
msec | Выход интервала времени, мс |

Формирование структуры типа ASDU M_EP_* (IECIntFromEP)
Блок IECIntFromEP предназначен для объединения входных данных c типом ASDU M_EP_* (см. Приложение А) в структурированное слово для использования в выходном буфере. Базовый тип входа буфера (определяется входом tp буфера IECBufOut) должен быть uLX.
Данный блок можно размещать только в Фоне.
Назначение входов и выходов IECIntFromEP
Элемент | Описание |
---|---|
Входы | |
state | Вход состояния, определяется протоколом |
msec | Вход интервала времени, мс |
cfg | Вход конфигурации (константный). Битовая маска: Бит 0 – обновлять выход только при обновлении входа state (это может быть полезно при спорадическом типе передачи данных) |
Выходы | |
struct | Выход для подключения к входу данных in блока IECBufOut |

Расшифровка описателя качества типа ASDU M_IT_* (IECITSQIn)
Блок IECITSQIn предназначен для разбиения вспомогательных структурированных данных на выходе входного буфера IECBufIn c типом ASDU M_IT_* (см. Приложение А) на отдельные поля.
Данный блок можно размещать только в Фоне.
Назначение входов и выходов IECITSQIn
Элемент | Описание |
---|---|
Входы | |
in | Вход для подключения к выходу данных qlf блока IECBufIn |
Выходы | |
SQ | Номер передаваемой последовательности – передается в 5 младших битах |
CY | 0 – за соответствующий период интегрирования не произошло переполнение счетчика; 1 – за соответствующий период интегрирования произошло переполнение счетчика |
CA | 0 – после последнего считывания счетчик не был установлен; 1 – после последнего считывания счетчик был установлен |
IV | 0 – показания счетчика действительны; 1 – показания счетчика недействительны |

Формирование описателя качества типа ASDU M_IT_* (IECITSQOut)
Блок IECITSQOut предназначен для компоновки вспомогательных данных с типом ASDU M_IT_* (см. Приложение А) и передачи на вход qlf выходного буфера IECBufOut.
Данный блок можно размещать только в Фоне.
Назначение входов и выходов IECITSQOut
Элемент | Описание |
---|---|
Входы | |
SQ | Номер передаваемой последовательности – передается в 5 младших битах |
CY | 0 – за соответствующий период интегрирования не произошло переполнение счетчика; 1 – за соответствующий период интегрирования произошло переполнение счетчика |
CA | 0 – после последнего считывания счетчик не был установлен; 1 – после последнего считывания счетчик был установлен |
IV | 0 – показания счетчика действительны; 1 – показания счетчика недействительны |
Выходы | |
out | Выход для подключения к входу qlf блока IECBufOut |

Расшифровка временных меток (IECTransTime)
Блок IECTransTime предназначен для преобразования формата вывода временных меток входными буферами IECBufIn в поля данных.
Данный блок можно размещать только в Фоне.
Назначение входов и выходов IECTransTime
Элемент | Описание |
---|---|
Входы | |
tm1 | Вход для подключения к выходу tm1 блока IECBufIn |
tm2 | Вход для подключения к выходу tm2 блока IECBufIn |
Выходы | |
msec | Выход времени, мс (Unix) |
IV | Выход сигнализации недостоверного времени |
str | Строковое представление времени (для отладки) |

Примеры работы с блоком приведены в разделе.
Получение отладочной информации (IECInfo)
Блок IECInfo предназначен для получения отладочной информации о работе протокола. Блок IECInfo совместим только с блоком IEC104Server.
Первая часть выходов блока позволяет отследить времена выполнения функций блока IEC104Server. Обозначения (см. рисунок):
- main – поток 2;
evnts – подпрограмма регистрации событий;
aux – подпрограмма формирования буфера на передачу/расшифровки буфера на прием;
txrx – поток 1.
Вторая часть выходов позволяет отследить используемый размер очереди сообщений, переполнение очереди и др. Параметры размера очередей и буферов приводятся в байтах.

Блок IECInfo считывает значения msgQ* только после того, как завершается подпрограмма формирования пакетов из очереди. Таким образом, по этим значениям можно судить о количестве сообщений, которые не были помещены в буфер на отправку за данный цикл. Возможные причины: недостаточный размер буфера на передачу, нехватка производительности подсистемы сокетов и др.
Данный блок можно размещать только в Фоне.
Назначение входов и выходов IECInfo
Элемент | Описание |
---|---|
Входы | |
itr | Вход для подключения к блоку IEC104Server |
ctl | Не используется |
tmout | Период вычисления времен исполнения, мс |
rst | Сброс абсолютных значений |
Выходы | |
*tmmin | Минимальное время исполнения |
*tmmax | Максимальное время исполнения |
*tmavrg | Среднее время исполнения |
*tmnum | Количество вызовов подпрограммы |
*tmabsmax | Максимальное время исполнения за все время работы IECInfo |
Выходы (циклические) | |
msgQmax | Максимальный используемый размер очереди сообщений |
msgQavrg | Средний используемый размер очереди сообщений |
msgQnum | Количество вызовов подпрограммы |
msgQabsmax | Максимальный используемый размер очереди сообщений за все время работы IECInfo |
msgQfull | Инкрементируется при переполнении очереди |
rplQfull | Инкрементируется при переполнении очереди для отправки подтверждений |
reachedK | Инкрементируется при достижении числа пакетов, отправленных без подтверждения, K |
txbufmax | Максимальный размер буфера передачи |
txbufavrg | Средний размер буфера передачи |
txbufnum | Количество вызовов подпрограммы |
txbufabsmax | Максимальный размер буфера передачи за все время работы IECInfo |
txbufReachedLim | Инкрементируется при переполнении выходного буфера |
