Библиотека paIEC104

Библиотека 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 в проект следует:

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

    Graphic
    Добавление библиотеки paIEC104 в проект
  2. Нажать кнопку Открыть и перейти в папку с файлами библиотеки, которую необходимо добавить. Затем в выпадающем списке выбрать тип файла Библиотека Полигон 2 (*.ll2).

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

    Graphic
    Добавление библиотеки 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

Период отправки с причиной передачи циклический, мс. Необходимость передачи данных с этой причиной задается для каждого выходного буфера. Рекомендуется задавать cppbpp так, чтобы моменты срабатывания таймеров как можно реже пересекались

bpp

Период отправки сообщений с причиной передачи «фоновое сканирование», мс. Необходимость передачи данных с этой причиной задается для каждого выходного буфера. Рекомендуется задавать cppbpp так, чтобы моменты срабатывания таймеров как можно реже пересекались

cfg

Конфигурация. Определяет поведение узла при старте и в процессе работы.

Битовая маска:

Бит 0 – синхронизировать время после установления связи (используется системное время);

Бит 1 – послать команду общего опроса после установления связи;

Бит 4 – блокировать команду синхронизации времени;

Бит 5 – включать метку времени при отправке данных с причиной передачи: циклические;

Бит 6 – включать метку времени при отправке данных с причиной передачи: фоновое сканирование;

Бит 8 – использовать структурированный адрес, прибавление стандартного смещения (для ТИТ смещение – 0x2000, для ТС смещение – 0x1000);

Бит 12 – подключить протокол отправки диагностических сообщений

ito

Таймаут выполнения команды информация о процессе в направлении управления C (см. Приложение А), мс

sto

Таймаут выбора команды информация о процессе в направлении управления C (см. Приложение А), мс

Выходы

itr

Выход для подключения IECBufIn

st1

Выход статуса.

Битовая маска:

Бит 0 – есть связь;

Бит 1 – выполнена команда синхронизации времени;

Бит 2 – первичный канальный уровень активен;

Бит 3 – вторичный канальный уровень активен

st2

Не используется

Graphic
Блок IEC101uni

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

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

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

Примечание

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

Примечание

В данном документе рассматривается обновленный блок IEC104uni (ревизия 2, версия библиотеки paIEC104902 и выше).

Совместно с 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

Период отправки с причиной передачи «циклический», мс. Необходимость передачи данных с этой причиной задается для каждого выходного буфера. Рекомендуется задавать cppbpp так, чтобы моменты срабатывания таймеров как можно реже пересекались

bpp

Период отправки сообщений с причиной передачи «фоновое сканирование», мс. Необходимость передачи данных с этой причиной задается для каждого выходного буфера. Рекомендуется задавать cppbpp так, чтобы моменты срабатывания таймеров как можно реже пересекались

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

Не используется

Graphic
Блок IEC104uni

Рассмотрим алгоритм работы связки блоков TcpIpClA и IEC104uni (см. рисунок).

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

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

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

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

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

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

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

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

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

Реализация протокола МЭК 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

Период отправки с причиной передачи циклический, мс. Необходимость передачи данных с этой причиной задается для каждого выходного буфера. Рекомендуется задавать cppbpp так, чтобы моменты срабатывания таймеров как можно реже пересекались

bpp

Период отправки сообщений с причиной передачи фоновое сканирование, мс. Необходимость передачи данных с этой причиной задается для каждого выходного буфера. Рекомендуется задавать cppbpp так, чтобы моменты срабатывания таймеров как можно реже пересекались

cfg

Конфигурация. Определяет поведение узла при старте и в процессе работы.

Битовая маска:

Бит 0 – синхронизировать время после установления связи (используется системное время);

Бит 1 – послать команду общего опроса после установления связи;

Бит 2 – использовать глобальное время (UTC) в метках времени;

Бит 3 – принудительно считать временные метки действительными;

Бит 4 – блокировать команду синхронизации времени;

Бит 5 – включать метку времени при отправке данных с причиной передачи: циклические;

Бит 6 – включать метку времени при отправке данных с причиной передачи: фоновое сканирование;

Бит 7 – включать метку времени при отправке данных с причиной передачи: общий опрос;

Бит 8 – использовать структурированный адрес, прибавление стандартного смещения (для ТИТ смещение – 0x2000, для ТС смещение – 0x1000);

Бит 9 – отключить замещение старых данных новыми в очереди

ito

Таймаут выполнения команды информация о процессе в направлении управления C (см. Приложение А), мс

sto

Таймаут выбора команды информация о процессе в направлении управления C (см. Приложение А), мс

Выходы

itr

Выход для подключения IECBufIn

st0

Выход статуса.

Битовая маска:

Бит 0 – есть связь;

Бит 1 – выполнена команда синхронизации времени

st1

Не используется

Graphic
Блок IEC104Server

Рассмотрим алгоритм работы блока IEC104Server.

В алгоритме работы протокола можно выделить четыре основные подпрограммы, первые две из которых реализуют работу с системным сокетом. Подпрограммы блока IEC104Server разделены на отдельные потоки (см. рисунок).

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

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

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

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

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

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

Отследить переполнение очереди сообщений можно с помощью блока IECInfo.

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

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

Входной буфер (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

Квалификатор (циклический). Выход имеет различные функции, в зависимости от типа объекта информации (см. Приложение А):

  1. Для типов M_* (кроме M_IT_*) – как выход значения квалификатора, определяется протоколом (битовая маска):

    Бит 0OV: переполнение (для M_ME_*_1);

    Бит 4BL: блокировка (для M_*_*_1);

    Бит 5SB: проведено замещение (для M_*_*_1);

    Бит 6NT: неактуальное значение (для M_*_*_1);

    Бит 7IV: недействительное значение (для M_*_*_1)

  2. Для типов M_IT_* – как выход вспомогательных полей данных2), определяется протоколом (битовая маска):

    Биты 0…4SQ: номер передаваемой последовательности;

    Бит 5CY: произошло переполнение счетчика;

    Бит 6CA: счетчик установлен;

    Бит 7IV: показание счетчика недействительно

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.

Graphic
Блок IECBufIn

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

Выходной буфер (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) (циклический). Вход имеет различные функции, в зависимости от типа объекта информации (см. Приложение А):

  1. Для типов M_* (кроме M_IT_*) – как вход значения квалификатора, определяется протоколом (битовая маска):

    Бит 0OV: переполнение (для M_ME_*_1);

    Бит 4BL: блокировка (для M_*_*_1);

    Бит 5SB: проведено замещение (для M_*_*_1);

    Бит 6NT: неактуальное значение (для M_*_*_1);

    Бит 7IV: недействительное значение (для M_*_*_1)

  2. Для типов M_IT_* – как вход вспомогательных полей данных2), определяется протоколом:

    Биты 0…4SQ: номер передаваемой последовательности;

    Бит 5CY: произошло переполнение счетчика;

    Бит 6CA: счетчик установлен;

    Бит 7IV: показание счетчика недействительно

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.

Graphic
Блок IECBufOut

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

Разбиение структуры типа ASDU M_EP_* (IECEPFromInt)

Блок IECEPFromInt предназначен для разбиения структурированных данных на выходе входного буфера c типом ASDU M_EP_* (см. Приложение А) на отдельные поля данных. Базовый тип выхода буфера (определяется входом tp буфера IECBufIn) должен быть uLX.

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

Назначение входов и выходов IECEPFromInt
ЭлементОписание
Входы

struct

Вход для подключения к выходу данных o блока IECBufIn

Выходы

state

Выход состояния, определяется протоколом

msec

Выход интервала времени, мс

Graphic
Блок IECEPFromInt

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

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

Блок IECIntFromEP предназначен для объединения входных данных c типом ASDU M_EP_* (см. Приложение А) в структурированное слово для использования в выходном буфере. Базовый тип входа буфера (определяется входом tp буфера IECBufOut) должен быть uLX.

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

Назначение входов и выходов IECIntFromEP
ЭлементОписание
Входы

state

Вход состояния, определяется протоколом

msec

Вход интервала времени, мс

cfg

Вход конфигурации (константный).

Битовая маска:

Бит 0 – обновлять выход только при обновлении входа state (это может быть полезно при спорадическом типе передачи данных)

Выходы

struct

Выход для подключения к входу данных in блока IECBufOut

Graphic
Блок IECIntFromEP

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

Расшифровка описателя качества типа 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 – показания счетчика недействительны

Graphic
Блок IECITSQIn

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

Формирование описателя качества типа 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

Graphic
Блок IECITSQOut

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

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

Блок IECTransTime предназначен для преобразования формата вывода временных меток входными буферами IECBufIn в поля данных.

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

Назначение входов и выходов IECTransTime
ЭлементОписание
Входы

tm1

Вход для подключения к выходу tm1 блока IECBufIn

tm2

Вход для подключения к выходу tm2 блока IECBufIn

Выходы

msec

Выход времени, мс (Unix)

IV

Выход сигнализации недостоверного времени

str

Строковое представление времени (для отладки)

Graphic
Блок IECTransTime

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

Получение отладочной информации (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

Инкрементируется при переполнении выходного буфера

Graphic
Блок IECInfo