Обмен по IEC 60870-101

В качестве шаблонов каналов для обмена с устройствами по стандарту IEC 60870-101 используются шаблоны UniversalPLC_type3 (группа Источники/Приемники.Пользовательские_драйверы.TYPE12).

Для чтения создаются: 1 служебный канал, 1 канал запроса данных и необходимое количество каналов INPUT приема данных.

Для записи создаются: 1 служебный канал и необходимое количество каналов OUTPUT записи данных.

Конфигурация служебного канала:

   Параметр1 – номер RS;

Если в узле существует указанный COM-порт с назначением IEC 60870-101, инициализируется обмен по RS, в противном случае – по TCP/IP (подтип и дополнение к подтипу канала – соответственно 109.6 и 108.6).

   Параметр2 – номер устройства. При записи в прибор с 2-байтовым номером второй байт передается нулевым;

   Параметр3 = Параметр4 = 0;

   Параметр5 – таймаут (в секундах) посылки команды reset_link (значение таймаута записывается в атрибут 92, I2 канала);

При старте обмена выполняется цепочка действий link_status – ответ – reset_linklink_status – ответ, и с заданным таймаутом сравнивается временной интервал между ответами прибора.

   Дополнительно – для обмена по RS:

IEC;

Для обмена по TCP/IP (если задан только IP-адрес, используется порт 2404):

IEC; IP=<IP-адрес>:<порт>;

Строка Дополнительно может также использоваться для задания следующих параметров:

IEC; ASDU=<1 или 2>; COT=<1 или 2>;IOA=<1, 2 или 3>; IP=<IP-адрес>:<порт>;

где

   ASDU – размер (число байт) общего адреса ASDU (значение по умолчанию – 1). При записи в прибор с ASDU = 2 второй байт передается нулевым;

   COT – размер (число байт) причины передачи (значение по умолчанию – 1). При записи в прибор с COT = 2 второй байт передается нулевым;

   IOA – размер (число байт) адреса объекта информации (значение по умолчанию – 2). При записи в прибор с IOA = 3 третий байт передается нулевым.

Атрибут 0, R служебного канала может принимать следующие значения:

   0 – обмена не было;

   1 – команда link_status прошла, данных класса 1 нет;

   2 – команда link_status прошла, данные класса 1 есть;

   3 – формируется команда reset_link.

Конфигурация канала запроса данных:

   Параметр1 и Параметр2 – такие же, как в служебном канале;

   Параметр3 – 0xF1 для запроса данных класса 1 или 0xF2 для запроса данных класса 2. Канал с Параметр3=0xF2 запрашивает данные со своим периодом. Канал с Параметр3=0xF1 со своим периодом проверяет сообщения устройства; если устройство сообщает, что данных нет, они не запрашиваются, в противном случае канал запрашивает данные быстро, игнорируя заданный период пересчета;

   Дополнительно – для обмена по RS и TCP/IP:

IEC;

В атрибут 0, R канала запроса данных записывается значение младшего полубайта управляющего слова устройства (например, 9 означает отсутствие данных).

Конфигурация канала приема (записи) данных:

   Параметр1 и Параметр2 – такие же, как в служебном канале;

   Параметр3 – идентификатор типа данных (IDT);

   Параметр 4 – в канале записи (OUTPUT) младший полубайт этого атрибута должен содержать причину передачи, а биты 6 и 7 должны задавать общий адрес ASDU.

Если значение младшего полубайта не задано (нулевое), МРВ подставляет следующие значения:

   6 – для всех IDT, кроме 102;

   5 – для IDT=102.

Задание общего адреса ASDU:

   биты 6 и 7 не установлены – общий адрес ASDU равен 0;

   установлен бит 6 (0x40) – общий адрес ASDU равен адресу устройства;

   установлен бит 7 (0x80) – общий адрес ASDU равен адресу, указанному в последней посылке устройства;

   установлены биты 6 и 7 (0xC0) – общий адрес ASDU равен 0xFF;

   Параметр5 – адрес объекта информации (IOA);

   Дополнительно – для обмена по RS и TCP/IP:

IEC;

Строка Дополнительно может также использоваться для задания параметров IDT и IOA в десятичном формате (Параметр3 и Параметр5 имеют более низкий приоритет):

IEC; IDT=<число DEC>; IOA=<число DEC>;

Все ответы, полученные от устройства, распределяются по трем спискам:

   список 1 – ответы приоритета A1; список 1 обрабатывается 1 раз за цикл пересчета;

Все IDT имеют буквенные обозначения, два последних символа которых определяют приоритет: A1 – высший приоритет, далее A2 и т.д.

   список 2 – ответы на запросы чтения (кроме ответов приоритета A1); список 2 обрабатывается 1 раз за секунду или реже в потоке ACTION;

   список 3 – ответы на запросы записи (кроме ответов приоритета A1); список 3 обрабатывается 1 раз за секунду или реже в потоке ACTION.

Чтение

При чтении поддерживаются стандартные идентификаторы типов данных без времени, а также со временем Cp24time2a и Cp56time2a (типы 1-40).

Значения, полученные с помощью канала запроса данных, записываются в атрибуты 2, In каналов приема данных, а если запрошены и метки времени, то они записывается в атрибуты 45, T (без миллисекунд, миллисекунды записываются в атрибуты 88, ms).

В профайлере: если в канале запроса данных установлен флаг Отладка (49, DBG), то при записи данных в каналы приема в протокол профайлера (файл <имя файла prj>_<порядковый номер узла>.txt) записываются следующие строки:

ADDR=<адрес устройства> COT=<причина передачи> IOA=<адрес объекта информации> VAL=<полученное значение> QV=<байт описателя> [<полученная метка времени>] IDT=<идентификатор типа данных>

Поиск каналов приема: МРВ последовательно анализирует все каналы узла и ищет канал, в котором адрес устройства, IDT и IOA совпадают с аналогичными параметрами в ответе устройства. При поиске следующие IDT считаются идентичными:

   1, 2, 30

   3, 4, 31

   5, 6, 32

   7, 8, 33

   9, 10, 34

   11, 12, 35

   13, 14, 36

   15, 16, 37

Шаблон канала запроса может быть привязан к каналу CALL.ChGroupReq:

   для незарезервированных IDT: если IOA в ответе устройства больше, чем IOA в канале, но меньше, чем IOA в канале плюс число аргументов канала, то полученное значение записывается в соответствующий аргумент (номер аргумента равен разности принятого IOA и IOA в канале). Если к такому аргументу привязан канал (ch), и принимается значение с меткой времени, то значение записывается в ch.In, а метка времени – в ch.T;

   для зарезервированных IDT: IOA в канале должно быть равно принятому IOA. В зависимости от типа данных аргумента, из полученных данных в него записывается:

   SINT, USINT – 1 байт;

   INT, UINT – 2 байта;

   DINT, UDINT – 4 байта (long);

   REAL, LREAL – 4 байта (float);

   TIME, DATE, TIME_OF_DAY, DATE_AND_TIME – 4 байта (дата и время).

Шаблон канала запроса может быть привязан к каналу CALL.TVC, в котором Параметр=0 и IOA совпадает с принятым IOA. В этом случае принятые значения и их метки времени последовательно записываются соответственно в arg2k и arg2k+1 (k=1,2…). Если метки времени не запрашивались, в arg2k+1 записывается текущее время. Аргументы arg0 и arg1 вычисляются в канале автоматически.

Запись

При установке какого-либо параметра (передается значение (9,Q)) поддерживаются следующие идентификаторы типов данных (время передается в формате Cp56time2a):

   113, 47, 46, 45 – 1 байт;

   111, 110, 49, 48 – 2 байта;

   112, 50 – FLOAT (4 байта);

   51 – LONG (4 байта);

   58, 59, 60 – 1 байт + время;

   61, 62 – 2 байта + время;

   63 – FLOAT + время;

   64 – LONG + время.

Общее управление:

   100 – управляющая команда опроса, QOI=(9,Q) (адрес объекта информации должен быть 0);

   101 – команда опроса счетчиков, QCC=(9,Q) (адрес объекта информации должен быть 0);

   102 – команда чтения (адрес объекта информации используется, передача данных одной переменной);

   103 – синхронизация времени устройства (время посылается в формате Cp56time2a);

   104 – тестовая команда (посылается 0x55AA, устройство сообщает, что обмен прошел успешно и возвращает 0x55AA, либо сообщает, что переменная не существует (ошибочный IOA));

   105 – установка процесса в исходное состояние, QRP=(9,Q) (адрес объекта информации должен быть 0);

   106 – задержка опроса, 2 байта (посылается (9, Q) как число миллисекунд).

Диагностика

Канал INPUT, в котором заданы порт и номер устройства, а в строке Дополнительно указано служебное слово "ERROR;" (после "IEC;"), содержит следующую информацию:

   2, In – счетчик ошибок;

   95, C2 – код ошибки от устройства;

   96, C3 – число неудачных попыток соединения с устройством;

   97, C4 – код ОС ошибки IP (без 10000);

   98, C5 – число секунд, прошедшее с последнего удачного обмена с устройством (<=255).

В (2, In) аналогичного канала OUTPUT можно подавать следующие команды:

   1 – обнулить счетчик ошибок в аналогичном канале INPUT;

   2 – активировать обмен с устройством (если в узле сконфигурированы каналы обмена с устройством, с ним устанавливается соединение);

   3 и 7 – разорвать соединение и деактивировать обмен с устройством (после этой команды обмен с устройством автоматически не восстанавливается);

   16-19 – разорвать соединение с устройством без деактивации обмена (если впоследствии соответствующие каналы найдутся, соединение будет установлено):

   16 – разорвать соединение;

   17 – разорвать соединение и инвертировать биты байта XXX.xxx.xxx.xxx IP-адреса;

   18 – разорвать соединение и инвертировать младший бит байта xxx.xxx.XXX.xxx IP-адреса;

   19 – разорвать соединение и инвертировать 2 младших бита в байтах xxx.xxx.XXX.XXX IP-адреса.

После успешного выполнения команды значение канала OUTPUT обнуляется.

Важнейшие ошибки, на которые указывает возвращаемый код причины передачи (DEC):

   44 – неизвестный IDT;

   45 – неизвестный код причины передачи;

   46 – неизвестный общий адрес ASDU;

   47 – неизвестный IOA.

В случае получения такого кода причины передачи, а также в случае, когда код содержит установленный бит 0x40, в канале устанавливается признак недостоверности.

Приняв запрос, устройство сначала анализирует его формат и контрольную сумму и посылает соответствующее сообщение (уведомление 1), а затем анализирует возможность выполнения запроса (например, наличие запрашиваемой переменной) и посылает уведомление 2. Уведомление 1 генерируется практически сразу, уведомление 2 – несколько позже. Если уведомление 1 или уведомление 2 содержит информацию об ошибке, в канале записи/чтения данных устанавливается признак программной недостоверности. При получении уведомления 2 значение канала OUTPUT с IDT=100-105 обнуляется.