В качестве шаблонов каналов для обмена с устройствами по стандарту 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_link – link_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 обнуляется.