ГОСТ Р 59979-2022. Национальный стандарт Российской Федерации. Единая энергетическая система и изолированно работающие энергосистемы. Релейная защита и автоматика. Автоматическое противоаварийное управление режимами энергосистем. Устройства локальной автоматики предотвращения нарушения устойчивости. Нормы и требования
Приложение В
(обязательное)
СТЕК ПРОТОКОЛОВ КОМПЛЕКСА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
ПРОГРАММНО-ТЕХНИЧЕСКОГО КОМПЛЕКСА ВЕРХНЕГО УРОВНЯ
ЦЕНТРАЛИЗОВАННОЙ СИСТЕМЫ ПРОТИВОАВАРИЙНОЙ АВТОМАТИКИ
В.1 Схема организации информационного взаимодействия ПТК ВУ с универсальными устройствами ЛАПНУ
В.1.1 Для ПТК ВУ информационное взаимодействие с универсальными устройствами ЛАПНУ (устройствами ЛАПНУ) заключается в обмене информацией с соответствующим КС устройств ЛАПНУ или без КС напрямую с устройствами ЛАПНУ.
КС предназначен для согласования протоколов обмена данными ПТК ВУ и устройствами ЛАПНУ.
В.1.2 Организация информационного обмена между КС и КМ устройства ЛАПНУ реализуется разработчиком конкретного устройства ЛАПНУ.
В.1.3 Для каждого устройства ЛАПНУ на сервере ПТК ВУ должен присутствовать отдельный экземпляр КС.
В.1.4 Информационное взаимодействие ПТК ВУ с КС должно предусматривать обмен данными по инициативе ПТК ВУ и (или) по инициативе устройств ЛАПНУ.
На рисунке В.1 изображена схема информационного обмена между ПТК ВУ и устройством ЛАПНУ с использованием КС (для примера показано взаимодействие между КС и КМ по специальному протоколу PCP поверх UDP) с использованием специализированных протоколов связи (SLICP, TMDEP), а также пунктирной линией показана возможность взаимодействия между ПТК ВУ ЦСПА и устройством ЛАПНУ по стандартному протоколу МЭК-104 поверх TCP/IP напрямую без КС, если в ПТК ВУ ЦСПА и устройстве ЛАПНУ используется для обмена прикладной протокол МЭК-104.
Рисунок В.1 - Схема информационного взаимодействия
между ПТК ВУ ЦСПА и устройством ЛАПНУ
В.2 Протоколы комплекса
В.2.1 Основными протоколами комплекса программного обеспечения ПТК ВУ ЦСПА являются TCP/IP и специализированные протоколы SLICP и ALOP, TMDEP, описание которых приведены ниже, или стандартный протокол МЭК-104. Реализацию информационного обмена по протоколу МЭК-104 необходимо выполнять в соответствии с ГОСТ Р МЭК 60870-5-104.
В.2.2 Описание протокола ALOP:
а) признак начала пакета - последовательность символов ~$begin$~.
Примечание - Наличие поля обязательно;
б) код сервиса назначения - код сервиса, для обработки которым предназначены данные в пакете.
Примечание - Наличие поля обязательно;
в) код отправителя - код комплекса программного обеспечения, осуществляющего передачу пакета.
Примечание - Наличие поля обязательно;
г) код передаваемого данного/данных - код данного/массива данных, содержащегося в пакете. При передаче запроса это поле ДОЛЖНО СОДЕРЖАТЬ последовательность WAQ_пробел_номер (Waiting for Answer Query). При передаче данных по запросу это поле ДОЛЖНО СОДЕРЖАТЬ последовательность AOQ_пробел_номер (Answer On Query). Номер присваивается клиентской стороной и служит исключительно для нумерации запросов в рамках сессии обмена данными.
Примечание - Наличие поля обязательно;
д) за какую дату - к какой дате относится данное/массив в пакете;
е) формат даты: ДД.ММ.ГГГГ.
Примечание - Может быть пустым - указывается NULL (строка символов);
ж) за какое время/интервал - к какому интервалу времени относится данное/массив в пакете;
и) формат времени: ЧЧ:ММ:СС;
к) формат интервала: число.
Примечание - Может быть пустым - указывается NULL (строка символов);
л) данное/массив данных - данное или массив данных. Формат данных или запросов внутри этого поля определяется конкретной подсистемой оперативно-информационного комплекса и является произвольным (за исключением наличия ключевых слов, используемых в ALOP).
Примечание - Наличие поля обязательно;
м) номер фрейма в сеансе передачи пакета - массив данных может быть разделен на несколько частей и передаваться в нескольких пакетах. Для обеспечения правильной последовательности чтения данных необходимо каждый пакет снабжать порядковым номером, начинающимся с 1 в формате N/M, где N - порядковый номер фрейма, M - всего фреймов. Если же передача производится одним пакетом, то это поле должно содержать 0;
н) признак конца передачи - последовательность символов ~$end$~.
Примечание - Наличие поля обязательно.
Разделителем полей является последовательность символов ~$~
Пакет может содержать произвольное количество последовательностей символов CRLF (0x0d 0x0a).
Зарезервированные ключевые слова ALOP приведены в таблице В.1.
Таблица В.1
Зарезервированные ключевые слова ALOP
Слово | Назначение |
~$begin$~ | Признак начала пакета ALOP |
~$end$~ | Признак конца пакета ALOP |
~$~ | Разделитель полей пакета ALOP |
В.2.2.1 Примеры пакетов
Пример 1
~$begin$~
~$~service_01~$~kio3_01~$~ti512~$~18.07.1999~$~12:00:00
~$~456.4~$~0~$~
~$end$~
Данный пакет содержит информацию об измерении, которое предназначено для обработки модулем service_01, получено от отправителя с кодом kio_01, измерение с кодом ti512 на 12 ч 00 мин 00 с 18.07.1999, значение измерения 456.4, передача произведена в один пакет (признак 0).
Пример 2
~$begin$~
~$~service_02~$~kio_02~$~dg100~$~18.07.1999~$~NULL~$~
:232345:655567:23498.7:458721.54:0:0:0:1254:0:
~$~1/2~$~
~$end$~
~$begin$~
~$~service_02~$~kio_02~$~dg100~$~18.07.1999~$~NULL~$~
:13345:55675:3498.27:46721.5:45667:21111:0:1254.7:0:
~$~2/2~$~
~$end$~
Данный пакет содержит массив данных, которые предназначены для обработки модулем service_02, получены от отправителя с кодом kio_02, массив данных с кодом dg100 за 18.07.1999, номер интервала отсутствует (NULL).
Итоговый массив:
:232345:655567:23498.7:458721.54:0:0:0:1254:0:
:13345:55675:3498.27:46721.5:45667:21111:0:1254.7:0:,
передача произведена в два пакета (признак 1, 2).
Рассмотрим пакет, содержащий запрос на передачу данных в примере 2:
~$begin$~
~$~service_02~$~kio_02~$~WAQ1~$~18.07.1999~$~NULL
~$~: sut_01: sut_02: sut_03:
~$~0~$~
~$end$~
Поле N 4 содержит "WAQ1", что обозначает "Сервис kio_02 запрашивает (номер запроса 1) у сервиса service_02 данные (поле N 7): sut_01: sut_02: sut_03: за 18.07.1999".
Ответный пакет может иметь вид:
~$begin$~
~$~kio3_02~$~service_02~$~AOQ1~$~18.07.1999~$~NULL
~$~: sut_01=4587: sut_02=87445.5: sut_03=45884.64:
~$~0~$~
~$end$~
Поле N 4 содержит "AOQ1", что обозначает "Сервис service_02 отвечает на запрос номер 1 сервису kio_02 данными (поле N 7): sut_01=4587: sut_02=87445.5: sut_03=45884.64: за 18.07.1999".
Ответственность за нумерацию запросов лежит на клиентской стороне (посылающей запрос) и предназначена только для определения последовательности запросов-ответов в сессии обмена данными.
В.2.3 Описание протокола SLICP
В.2.3.1 SLICP [Session Layer Information Complex Protocol (v 1.0)] - протокол уровня приложения, регламентирующий ведение сессии обмена данными.
В.2.3.2 Командный процессор.
Командный процессор на стороне сервера должен подчиняться следующим правилам:
а) все сообщения сервера начинаются с маркера начала ~$SAB$~ и заканчиваются маркером конца ~$SAE$~. Если в ответе содержится дополнительная информация (кроме самого сообщения - например, набор строк on-line помощи), то ее ограничители никак не регламентируются;
б) последней строкой всегда должна быть комбинация ~$SAB$~_SERVER_MESSAGE_~$SAE$~CRLF;
в) при установлении соединения должно посылаться сообщение, начинающееся с кода 100;
г) при получении от клиента сообщения должен выполняться синтаксический анализ;
д) если сообщение содержит одну из регламентированных команд, выполняется ее предписание. Результат всегда сообщается клиенту в формате КОД_ПРОБЕЛ_ТЕКСТ;
е) если сообщение содержит признак начала передачи пакета ALOP, то сервер выполняет накопление в буфере принимаемых данных до обнаружения признака конца пакета ALOP;
ж) при получении от клиента команды QUIT производится закрытие сессии с освобождением всех задействованных ресурсов операционной системы, передача клиенту сообщения, начинающегося с кода 299, и разрыв соединения с клиентом;
и) поток данных между клиентом и сервером не должен содержать зарезервированных слов, за исключением их прямого назначения.
Команды SLICP приведены в таблице В.2.
Таблица В.2
Команды
Команда | Значение |
HELP | Запрос подсказки по командам сервера |
NOOP | Просьба подтвердить готовность к приему пакетов |
QUIT | Просьба завершить сессию |
Любая команда должна завершаться последовательностью символов CRLF (0x0d 0x0a).
В.2.3.3 Коды ответов
Коды ответов приведены в таблице В.3.
Таблица В.3
Коды ответов
Код | Значение |
Коды успешного выполнения | |
100 | Соединение установлено, сессия открыта |
210 | Ответ на команду NOOP - подтверждение готовности к приему пакетов |
299 | Сессия успешно завершена. Соединение сейчас будет разорвано |
320 | Пакет успешно обработан |
321 | Команда успешно выполнена |
322 | Ответ сформирован и передан |
Коды ошибок | |
520 | Неизвестная команда |
553 | Ошибочное количество байтов в пакете ALOP. Возможна потеря при передаче |
555 | Ошибка синтаксического анализа |
556 | Нет признака начала пакета ALOP |
557 | Нет признака конца пакета ALOP |
558 | Нет имени сервиса - обработчика пакета ALOP |
559 | Нет имени отправителя пакета ALOP |
560 | Нет кода данных пакета ALOP |
561 | Ошибочный формат даты данных пакета ALOP |
562 | Ошибка в формате времени или интервала времени данных пакета ALOP |
563 | Нет данных |
564 | Ошибочное значение в поле "фрейм/всего фреймов" пакета ALOP |
565 | Неправильное количество полей пакета ALOP |
566 | Сервис назначения пакета ALOP на данном узле не зарегистрирован |
567 | Сервис назначения пакета ALOP на данном узле не настроен на прием |
568 | Сервис назначения на данном узле не соответствует указанному в пакете ALOP (ошибка маршрутизации. Для устранения необходимо анализировать таблицы маршрутизации на BROKER'ах) |
573 | Синтаксическая ошибка или ошибочное значение в пакете ALOP |
575 | Синтаксическая ошибка или ошибочное значение в поле пакета ALOP |
580 | Недостаточно прав для выполнения операции |
600 | Ошибка при инициализации сокета (в транзитной сессии) |
610 | Ошибка сокета (в транзитной сессии) |
620 | Перегрузка сервиса. Сервис не может обслужить соединение по причине достижения порога максимальной загруженности другими соединениями |
710 | Нет связи между КС и устройством ЛАПНУ |
711 | Ошибка связи с 1 устройством (контроллером) ЛАПНУ |
712 | Ошибка связи со 2 устройством (контроллером) ЛАПНУ |
713 | ... |
714 | ... |
... резерв... | ... |
719 | ... |
720 | КС. ТУВ не принят. Некорректное содержимое ТУВ |
721 | Прием ТУВ заблокирован в течение тайм-аута после срабатывания ПО |
722 | Отказ ЛАПНУ, выполнение команд ПТК ВУ ЦСПА невозможно |
723 | Неизвестная ошибка при обработке ЛАПНУ команды ПТК ВУ ЦСПА |
725 | Невозможно передать ТУВ на устройство ЛАПНУ по причине превышения таймаута ожидания ответа от ЛАПНУ |
730 | Все доступные соединения между КС и ЛАПНУ заняты |
Зарезервированные ключевые слова SLICP+ALOP приведены в таблице В.4.
Таблица В.4
Зарезервированные ключевые слова SLICP+ALOP
Слово | Значение |
~$begin$~ | Признак начала пакета ALOP |
~$end$~ | Признак конца пакета ALOP |
~$~ | Разделитель полей пакета ALOP |
~$SAB$~ | Маркер начала сообщения сервера (Server Answer Begin) |
~$SAE$~ | Маркер конца сообщения сервера (Server Answer End) |
В.2.3.4 Сессия связи с использованием протокола SLICP
Сессия связи должна состоять из этапов, приведенных в таблице В.5.
Таблица В.5
Сессия связи и ее этапы
Сторона | Данные | Описание |
Клиент | Устанавливает соединение с определенным портом (например, 5280) сервера XXX.XXX.XXX.XXX | - |
Сервер | ~$SAB$~100 OK~$SAE$~CRLF <*> | Сессия открыта. Готов обслуживать запросы |
Клиент | ~$begin$~CRLF ~$~service_02~$~kio3_02~$~dg100~$~18.07.1999~$~NULL~$~CRLF :232345:655567:23498.7:458721.54:0:0:0:1254:0: CRLF ~$~0~$~CRLF ~$end$~CRLF | Передача запроса в формате ALOP |
Сервер | ~$SAB$~320 OK~$SAE$~CRLF | Запрос успешно обработан |
Клиент | ~$begin$~CRLF ~$~service_02~$~kio3_02~$~WAQ 1~$~18.07.1999~$~NULL~$~CRLF : sut_01: sut_02: sut_03: CRLF ~$~0~$~CRLF ~$end$~CRLF | Передача запроса N 1 в формате ALOP с ожиданием ответа |
Сервер | ~$begin$~CRLF ~$~kio3_02~$~service_02~$~AOQ 1~$~18.07.1999~$~NULL~$~CRLF : sut_01=12854: sut_02=2564.54: sut_03=44741.9: CRLF -$~0~$~CRLF ~$end$~CRLF ~$SAB$~322 OK~$SAE$~CRLF | Ответ на запрос N 1 передан |
Клиент | QuitCRLF | Завершить сессию |
Сервер | ~$SAB$~299 OK~$SAE$~CRLF | Сессия закрыта |
Сервер | Разрывает соединение | - |
<*> CRLF - возврат каретки. |
Сервер всегда отвечает кодом сообщения (три символа, каждый из которых лежит в диапазоне от нуля до девяти), отделенным справа минимум одним пробелом от текста сообщения.
Наличие каких-либо дополнительных символов слева от кода сообщения не допускается.
В.2.4 Описание протокола TMDEP
В.2.4.1 TMDEP [Telemetry Data Exchange Protocol (v 1.0)] - протокол обмена данными с удаленным устройством ЛАПНУ. Реализует сессию обмена сообщениями по технологии "клиент/сервер" через устанавливаемое TCP-соединение (TCP/IP - интерфейс сокетов).
В.2.4.1.1 Командный процессор
Командный процессор на стороне сервера должен подчиняться следующим правилам, представленным в описании протокола SLICP.
Команды протокола приведены в таблице Б.6.
Таблица В.6
Команды
Общие | |
SLICP-совместимые | Набор команд, стандартный для всех SLICP-совместимых модулей |
Каждый ответ заканчивается стандартным SLICP-блоком:
~$SAB$~_SERVER_MESSAGE_~$SAE$~CRLF
Любая команда должна завершаться последовательностью символов CRLF (0x0d 0x0a).
В.2.4.1.2 Коды ответов
Коды ответов должны соответствовать кодам, представленным в описании протокола SLICP.
В.2.4.1.3 Сессия
Реализация сессии должна соответствовать регламенту, представленному в описании протокола SLICP.
В.2.4.1.4 Вызов функций приема/передачи данных
Функции приема/передачи данных необходимо инкапсулировать в поле ДАННЫЕ пакета ALOP. Ответ также инкапсулируется в поле ДАННЫЕ пакета ALOP.
При передаче чисел с дробной частью в качестве разделителя целой и дробной части применяется ТОЧКА.
В.2.4.2 Типы пакетов информационного обмена
В.2.4.2.1 В рамках протокола TMDEP может производиться обмен пакетами в формате ALOP. Содержание информационной части пакетов может представлять собой несколько разновидностей:
а) данные;
б) команды.
В.2.4.2.2 Данными являются:
- ТУВ (таблица управляющих воздействий);
- протокол срабатываний устройства ЛАПНУ, передаваемый от ЛАПНУ (через КС) шлюзу ММО;
- протокол передачи ТУВ (передается шлюзу ММО) от КС к устройству ЛАПНУ;
- диагностические данные о состоянии КС;
- диагностические данные о состоянии устройства ЛАПНУ;
- диагностические данные о состоянии каналов связи;
- информация о режиме работы устройства ЛАПНУ;
- режимные параметры.
В.2.4.2.3 Командами являются:
- инициализация устройства ЛАПНУ (запрос на передачу ТУВ);
- запрос информации от шлюза ММО к устройству ЛАПНУ:
- о состоянии устройства ЛАПНУ;
- о состоянии каналов связи;
- о режиме работы устройства ЛАПНУ;
- запрос УВ из ТУВ ЛАПНУ/ТУВ ЦСПА;
- запрос режимных параметров;
- синхронизация времени.
В.2.4.2.4 Дублированные устройства нумеруют, начиная с 0.
В.2.4.3 Передача команд
В.2.4.3.1 Регистрация Login
Login (UserName, Password, NeedStat).
Идентифицироваться в БД ПТК верхнего уровня ЦСПА.
Параметры:
а) UserName - зарегистрированное название комплекса программного обеспечения, для взаимодействия с которым производится идентификация;
б) Password - пароль (в хешированном виде);
в) NeedStat - зарезервировано на будущее.
Ответ:
'OK'
Если регистрация не прошла, то ответ 'NO RIGHTS'.
Пример
Клиент:
~$BEGIN$~
~$~ODUURL_CFRAS_RT01~$~UJNAJA_KS_01~$~WAQ 1~$~NULL~$~NULL~$~
~$~Login(srv1, srv1pass, 0)~$~0~$~
~$END$~
Модуль:
~$BEGIN$~
~$~UJNAJA_KS_01~$~ODUURL_CFRAS_RT01~$~AOQ 1~$~NULL~$~NULL
~$~
OK
~$~0~$~
~$END$~
~$SAB$~322 OK~$SAE$~
В.2.4.3.2 Запрос состояния дублированных устройств ЛАПНУ (опция)
Запрос состояния устройства 1 (У1) и устройства 2 (У2) ЛАПНУ по двум каналам ММО.
Запрос от шлюза ММО к КС.
Формат вызова:
GetCurMode_KPU
Ответ - структура:
4 байта (значения 1 или 0 - раб/не раб.): Канал1_У1 Канал2_У1 Канал1_У2 Канал2_У2
#9
1 байт (1 - АЗД, 0 - автономный)
#9
64 байта (битовая маска): сигнальная индикация. 64-й байт "Работа/Резерв" (1/0).
#9
1 байт (0 - "Не расчет", 1 - "Расчет"). ЛАПНУ не смогла сформировать ТУВ в автономном режиме работы (причиной могут быть: нерасчетные сечения, неизвестная схема сети, потеря связи с ССПИ и т.п.).
#9
2 байта (1 - рестарт, 0 - нормальная работа): У1 У2
#9
2 байта (1 - контроллер ЛАПНУ в работе, 0 - в отказе): У1 У2
#9
2 байта (1 - выходные цепи включены, 0 - отключены): У1 У2
#9
2 байта (1 - входные цепи включены, 0 - отключены): У1 У2
#9
2 байта (1 - нет сигнализации о неисправности в контроллере ЛАПНУ, 0 - в контроллере ЛАПНУ сформирована сигнализация о неисправности): У1 У2
#9
2 байта (1 - нет разночтений, 0 - есть разночтения): У1 У2
#9
2 байта (1 - наличие нерасчетных сечений, 0 - нерасчетных сечений нет)
#9
ДДММГГГГЧЧММССТТ (для У1)
#9
ДДММГГГГЧЧММССТТ (для У2)
#9
Примечание - Выражение "-1" обозначает неопределенное (недостоверное) значение.
Пример
Клиент:
~$BEGIN$~
~$~UJNAJA_KS_01~$~ODUURL_CFRAS_RT01~$~WAQ 1~$~NULL~$~NULL~$~
GetCurMode_KPU
~$~0~$~
~$END$~
Модуль:
~$BEGIN$~
~$~ODUURL_CFRAS_RT01~$~UJNAJA_KS_01~$~AOQ 1~$~NULL~$~NULL~$~
1111 #9 1 #9 0000000...1 #9 1 #9 00 #9 11 #9 11 #9 11 #9 11 #9 11 #9 00 #9 1411200515454500 #9 1411200515454600 #9
~$~0~$~
~$END$~
~$SAB$~322 OK~$SAE$~
В.2.4.3.3 Передача нового времени для устройства ЛАПНУ
Данные от шлюза ММО для КС.
Формат вызова:
SetCurTime(Npk, TIME)
Npk - номер дублированного устройства ЛАПНУ.
TIME - изменение времени для устройства ЛАПНУ, с.
Данное изменение определяется на основании нескольких запросов GetCurTime, в результате которых определяется время задержки пакетов в сети передачи данных и реальное расхождение во времени на каждом из дублированных устройств ЛАПНУ и сервере ЦСПА.
Пример
Клиент:
~$BEGIN$~
~$~UJNAJA_KS_01~$~ODUURL_CFRAS_RT01~$~WAQ 1~$~NULL~$~NULL~$~
SetCurTime(1, +4)
~$~0~$~
~$END$~
Модуль:
~$BEGIN$~
~$~ODUURL_CFRAS_RT01~$~UJNAJA_KS_01~$~AOQ 1~$~NULL~$~NULL~$~
OK
~$~0~$~
~$END$~
~$SAB$~322 OK~$SAE$~
Примечание - +4 представляет "прибавить на У1 4 секунды".
В.2.4.3.4 Передача команды на переключение устройства ЛАПНУ в автономный режим
Команда от шлюза ММО для КС.
Формат вызова (LM-Local Mode):
SwitchToLM(Author)
Author - 0: диспетчер, 1: ЦСПА.
Пример
Клиент:
~$BEGIN$~
~$~UJNAJA_KS_01~$~ODUURL_CFRAS_RT01~$~WAQ 1~$~NULL~$~NULL~$~
SwitchToLM(0)
~$~0~$~
~$END$~
Модуль:
~$BEGIN$~
~$~ODUURL_CFRAS_RT01~$~UJNAJA_KS_01~$~AOQ 1~$~NULL~$~NULL~$~
OK
~$~0~$~
~$END$~
~$SAB$~322 OK~$SAE$~
В.2.4.3.5 Запрос ТУВ из устройств ЛАПНУ
Запрос данных от шлюза ММО для КС.
Формат вызова:
GetTUV(Mode)
Mode: 0 - запрос ТУВ ЛАПНУ
1 - запрос ТУВ ЦСПА
Ответ - структура:
N_ПОр_1 #9 N_ПОр_2 #9 Состояние #9 НБ #9 Устойчивость #9 ОГ #9 ОН #9 УЗС #9
Значение_УВ_1 #9 ... #9 Значение_УВ_64 #9 ДДММГГГГЧЧММССТТ #9 #13#10,
где N_Пор - номер пускового органа. Для простых пусковых органов ПО_2 должно быть 0.
Состояние - включено/отключено (0/1);
НБ - значение небаланса.
Устойчивость - 0 или 1. По данному ПОр обеспечивается необходимый объем управления по всем сечениям.
ОГ - отключаемая генерация (целое).
ОН - отключаемая нагрузка (целое).
УЗС - увеличение нагрузки станции.
Значение_УВ_N - значение 0 или 1 УВ. Передаются всегда все 64.
ДДММГГГГЧЧММССТТ - день, месяц, год, час, мин, с - точное время последнего обновления УВ по данному ПОр, ТТ - значение в мс ("??", если значение не известно);
#9 - символ ASCII [TAB];
#13#10 - символы ASCII [CRLF].
Пример
Клиент:
~$BEGIN$~
~$~UJNAJA_KS_01~$~ODUURL_CFRAS_RT01~$~WAQ 1~$~NULL~$~NULL~$~
GetTUV
~$~0~$~
~$END$~
Модуль:
~$BEGIN$~
~$~ODUURL_CFRAS_RT01~$~UJNAJA_KS_01~$~AOQ 1~$~NULL~$~NULL~$~
1 #9 0 #9 1 #9 0 #9 1 #9 200 #9 300 #9 1 #9...#9 1 #9 14112005122020?? #9
2 #9 0 #9 0 #9 0 #9 1 #9 250 #9 100 #9 1 #9...#9 0 #9 14112005122020?? #9
3 #9 0 #9 1 #9 0 #9 0 #9 400 #9 500 #9 0 #9...#9 1 #9 14112005122020?? #9
~$~0~$~
~$END$~
~$SAB$~322 OK~$SAE$~
В.2.4.3.6 Запрос режимных параметров
Запрос данных от шлюза ММО для КС.
Формат вызова:
GetMP(N_PK),
где N_PK - номер дублированного устройства ЛАПНУ.
Ответ - структура:
ПК #9 СИ1...СИ64 #9 Р1...Р64 #9 Сечение1 #9 ... #9 Сечение16 #9
ДДММГГГГЧЧММССТТ #9 #13#10,
где ПК - номер устройства;
С - сигнальная индикация (может быть 0 или 1). Для каждого полукомплекта свой набор;
Р - ремонты (может быть 0 или 1), для обоих полукомплектов - одинаково;
Сечение - номер ступени (значения от 0 до 63), если больше или равно 64, то ремонтная схема в сечении нерасчетная. Для обоих полукомплектов - одинаково;
ДДММГГГГЧЧММССТТ - день, месяц, год, час, мин, с - точное время последнего обновления УВ по данному ПОр, ТТ - значение в мс ("??", если значение не известно);
#9 - символ ASCII [TAB];
#13#10 - символы ASCII [CRLF];
Пример
Клиент:
~$BEGIN$~
~$~UJNAJA_KS_01~$~ODUURL_CFRAS_RT01~$~WAQ 1~$~NULL~$~NULL~$~
GetMP(0)
~$~0~$~
~$END$~
Модуль:
~$BEGIN$~
~$~ODUURL_CFRAS_RT01~$~UJNAJA_KS_01~$~AOQ 1~$~NULL~$~NULL~$~
0 #9 0... 1 #9 1...0 #9 10 #9 10 #9 ... #9 2 #9 14112005141122?? #9
~$~0~$~
~$END$~
~$SAB$~322 OK~$SAE$~
В.2.4.3.7 Запрос текущего времени на устройстве ЛАПНУ
Запрос данных от шлюза ММО для КС.
Формат вызова:
GetCurTime(Npk, CPATIME)
Npk - номер устройства ЛАПНУ.
CPATIME - дата/время на сервере ЦСПА в текстовом формате: ДДММГГГГЧЧММСС.
Ответ:
Npk - номер устройства ЛАПНУ.
CPATIME - дата/время, полученные с сервера ЦСПА в текстовом формате: ДДММГГГГЧЧММСС. Завершается символом #9 (TAB).
KPUTIME - дата/время на устройстве ЛАПНУ в текстовом формате: ДДММГГГГЧЧММСС. Завершается символом #9 (TAB).
Пример
Клиент:
~$BEGIN$~
~$~UJNAJA_KS_01~$~ODUURL_CFRAS_RT01~$~WAQ 1~$~NULL~$~NULL~$~
GetCurTime(1, 08062005101512)
~$~0~$~
~$END$~
Модуль:
~$BEGIN$~
~$~ODUURL_CFRAS_RT01~$~UJNAJA_KS_01~$~AOQ 1~$~NULL~$~NULL~$~
1 #9 08062005101512 #9 08062005101525 #9
~$~0~$~
~$END$~
~$SAB$~322 OK~$SAE$~
В.2.4.3.8 Запрос ТУВ на ЛАПНУ (опция)
Запрос ТУВ от внешнего клиента для шлюза КС.
Формат вызова:
ExecGetTUV(KPU_ID, Mode)
KPU_ID - идентификатор устройства ЛАПНУ в базе данных (БД) ПТК ВУ ЦСПА.
MODE - 0: ТУВ ЛАПНУ, 1: ТУВ ЦСПА.
Ответ:
Идентификатор записанной в БД ТУВ ЦСПА.
Пример
Клиент:
~$BEGIN$~
~$~ODUURL_CFRAS_RT01~$~ODUURL_CONSOLE~$~WAQ 1~$~NULL~$~
NULL~$~
ExecGetTUV(1,1)
~$~0~$~
~$END$~
Модуль:
~$BEGIN$~
~$~ODUURL_CONSOLE~$~ODUURL_CFRAS_RT01~$~AOQ1~$~NULL~$~
NULL~$~
234
~$~0~$~
~$END$~
~$SAB$~322 OK~$SAE$~
В.2.4.3.9 Передача команды на переключение ЛПНУ в режим АЗД
Команда от шлюза КС для КС.
Формат вызова (SM - Slave Mode):
SwitchToSM(Author)
Author 0: диспетчер, 1: ЦСПА.
Пример
Клиент:
~$BEGIN$~
~$~UJNAJA_KS_01~$~ODUURL_CFRAS_RT01~$~WAQ 1~$~NULL~$~NULL~$~
SwitchToSM(0)~$~0~$~
~$END$~
Модуль:
~$BEGIN$~
~$~ODUURL_CFRAS_RT01~$~UJNAJA_KS_01~$~AOQ 1~$~NULL~$~NULL~$~
OK
~$~0~$~
~$END$~
~$SAB$~322 OK~$SAE$~
В.2.4.4 Передача данных
В.2.4.4.1 Передача ТУВ после расчетного цикла
Данные от шлюза ММО для КС.
Формат вызова:
NewTUV(Struct)
Struct структура:
Код #9 N_ПОр_1 #9 N_ПОр_2 #9 Состояние #9 НБ #9 Значение_УВ_1 #9 ... #9
Значение_УВ_64 #9 ДДММГГГГЧЧММССТТ #9 #13#10,
где М - количество простых пусковых органов, которые составляют сложный пусковой орган;
N - количество ступеней УВ на низовом устройстве;
Код - код (количество обработанных аварий от данного устройства ЛАПНУ). Устройство ЛАПНУ принимает ТУВ и запоминает данный код. При срабатывании УВ (ПОр) ЛАПНУ передает через КС шлюзу КС протокол срабатывания. Сервер ЦСПА должен при получении данного протокола остановить текущий расчетный цикл и произвести расчет заново. После чего увеличить на 1 (или более) код. Новые ТУВ передаются с новым кодом. Если ЛАПНУ получает ТУВ со старым кодом, то это считается приемом ошибочной ТУВ;
N_ПОр - номер пускового органа. Состоит из одного или нескольких чисел ПО_1 ... ПО_М. Для простых пусковых органов все значения, кроме первого, должны быть 0. Количество ПО в строке УВ настраивается опционально для каждого контроллера;
Состояние - включено/отключено (0/1);
НБ - значение небаланса;
Значение_УВ_N - значение 0 или 1 УВ. Передаются всегда все 64;
#9 - символ ASCII [TAB];
#13#10 - символы ASCII [CRLF];
ДДММГГГГЧЧММССТТ - день, месяц, год, час, мин, с - точное время последнего обновления УВ по данному ПОр, ТТ - значение в мс ("??", если значение не известно).
Пример
Клиент:
~$BEGIN$~
~$~UJNAJA_KS_01~$~ODUURL_CFRAS_RT01~$~WAQ 1~$~NULL~$~NULL~$~
NewTUV(
888 #9 1 #9 0 #9 1 #9 0 #9 0 #9 1 #9... .#9 0 #9n120120041231007?? #9 #13#10
....................
888 #9 64 #9 21 #9 1 #9 0 #9 0 #9 1 #9... .#9 0 #9 12012004123100?? #9 #13#10)
~$~0~$~
~$END$~
Модуль:
~$BEGIN$~
~$~ODUURL_CFRAS_RT01~$~UJNAJA_KS_01~$~AOQ1~$~NULL~$~NULL~$~
OK
~$~0~$~
~$END$~
~$SAB$~322 OK~$SAE$~
В.2.4.4.2 Передача протокола срабатываний ПОр
По этой команде ЦСПА увеличивает на 1 код ТУВ (количество обработанных аварий).
Данные от КС для шлюза ММО.
Формат вызова:
EmergencyPO(Struct)
Struct - структура:
ПК#9Ф1#9 Ф2#9 Ф2#9ПО_1#9 ... #9ПО_64#9О_ПО_1#9 ...
#9О_ПО_64#9ДДММГГГГЧЧММССТТ#9,
где ПК - номер устройства, с которого получено уведомление (0 - первый, 1 - второй);
Ф1 - если 1, то воздействия были выданы, если 0, то воздействия не были выданы;
Ф2 - если 1, то признак "ТУВ не готов", если 0, то "ТУВ готов";
Ф3 - если 1, то ТУВ ЦСПА, если 0, то ТУВ ЛАПНУ;
ПО - пришедшие аварийные сигналы, как номера ПО (64 шт. 1 или 0);
О_ПО - пришедшие отключенные аварийные сигналы, как номера ПО (значение 1 или 0; количество ПО может быть любым);
ДДММГГГГЧЧММССТТ - (день, месяц, год, час, мин, с - точное время).
Пример
Клиент:
~$BEGIN$~
~$~ODUURL_CFRAS_RT01~$~UJNAJA_KS_01~$~WAQ1~$~NULL~$~NULL~~
EmergencyPO(0 #9 0 #9 0 #9 1 #9 1 #9 0 #9 ... 0 #9 0207200412451100 #9)
~$~0~$~
~$END$~
Модуль:
~$BEGIN$~
~$~UJNAJA_KS_01~$~ODUURL_CFRAS_RT01~$~AOQ 1~$~NULL~$~NULL~$~
OK
~$~0~$~
~$END$~
~$SAB$~322 OK~$SAE$~
В.2.4.4.3 Передача расширенного протокола срабатываний ПОр (опция)
Данные от КС для шлюза ММО.
Формат вызова:
EmergencyPO_Ext(Struct)
Struct структура:
MP#9#13#10
ПК#9Р1...Р64#9Сечение1#9...#9Сечение16#9ДДММГГГГЧЧММССТТ#9#13#10
POE#9#13#10
ПК_1#9Ф1#9#13#10
Ф2#9ПО_1#9ПО_2#9УВ_1...УВ_64#9ДДММГГГГЧЧММССТТ#9#13#10
...............
Ф2#9ПО_1#9ПО_2#9УВ_1...УВ_64#9 ДДММГГГГЧЧММССТТ#9#13#10,
где MP - Префикс, означающий начало блока РЕЖИМНЫХ параметров;
ПК - номер устройства (0 - первый, 1 - второй), с которого получена режимная информация;
Р - ремонты (может быть 0 или 1). Для обоих устройств - одинаково;
Сечение - номер ступени (значения от 0 до 15), если больше или равно 64 - ремонтная схема в сечении нерасчетная. Для обоих устройств - одинаково;
ДДММГГГГЧЧММССТТ - день, месяц, год, час, мин, с - точное время последнего обновления УВ по данному ПОр, ТТ - значение в мс или??;
POE - Префикс, означающий начало блока РАСШИРЕННОГО протокола;
ПК - номер устройства, с которого получено уведомление (0 - первый, 1 - второй);
Ф1 - если 1, то воздействия были выданы, если 0, то воздействия не были выданы;
Ф2 - признак, из какого ТУВ выдано воздействие (0 - из ТУВ ЛАПНУ, 1 - из ТУВ ЦСПА);
ПО - пришедшие аварийные сигналы, как номера ПОр;
УВ - выданные управляющие воздействия;
ДДММГГГГЧЧММССТТ - (день, месяц, год, час, мин, с - точное время).
Пример
Клиент:
~$BEGIN$~
~$~ODUURL_CFRAS_RT01~$~UJNAJA_KS_01~$~WAQ1~$~NULL~$~NULL~$~
EmergencyPO_Ext(MP #9 #13 #10
1 #9 1...0 #9 10 #9 ... #9 3 #9 14112005141122?? #9 #13 #10
POE #9 #13#10
1 #9 1 #9 #13 #10
1 #9 1 #9 0 #9 0001000...0 #9 0207200412451100 #9 #13 #10
0 #9 12 #9 14 #9 0100010...0 #9 0207200412451200 #9 #13 #10)
~$~0~$~
~$END$~
Модуль:
~$BEGIN$~
~$~UJNAJA_KS_01~$~ODUURL_CFRAS_RT01~$~AOQ 1~$~NULL~$~NULL~$-
OK
~$~0~$~
~$END$~
~$SAB$~322 OK~$SAE$~
В.2.4.4.4 Передача срабатываний УВ
Данные от КС для шлюза ММО.
Формат вызова:
EmergencyUV(Struct)
Struct структура:
ПК#9ФЛАГ#9УВ_1#9 ... #9 УВ_N #9 ДДММГГГГЧЧММССТТ #9,
где ПК - номер устройства, с которого получено уведомление (0 - первый, 1 - второй);
ФЛАГ - если 1, то воздействия были выданы, если 0, то воздействия не были выданы;
ДДММГГГГЧЧММССТТ - (день, месяц, год, час, мин, с - точное время).
Пример
Клиент:
~$BEGIN$~
~$~ODUURL_CFRAS_RT01~$~UJNAJA_KS_01~$~WAQ 1~$~NULL~$~NULL~$~
EmergencyUV(0 #9 0 #9 1 #9 0 #9 0 #9 0 #9 0 #9 0 #9 0 #9 1 #9 0 #9 0207200412451100 #9)
~$~0~$~
~$END$~
Модуль:
~$BEGIN$~
~$~UJNAJA_KS_01~$~ODUURL_CFRAS_RT01~$~AOQ 1~$~NULL~$~NULL~$~
OK
~$~0~$~
~$END$~
~$SAB$~322 OK~$SAE$~
В.2.4.4.5 Передача информации о состоянии устройств ЛАПНУ
Данные от КС для шлюза ММО.
Формат вызова:
CurMode_KPU(Struct)
Struct структура:
4 байта (значения 1 или 0 - работа/не работа): Канал1_У1 Канал2_У1 Канал1_У2 Канал2_У2
#9
1 байт (1 - АЗД, 0 - автономный)
#9
64 байта: резерв
#9
1 байт (0 - "Не расчет", 1 - "Расчет")
#9
2 байта (1 - рестарт, 0 - нормальная работа): У1 У2
#9
2 байта (1 - У в работе, 0 - отказ У): У1 У2
#9
2 байта (1 - выходные цепи включены, 0 - отключены): У1 У2
#9
2 байта (1 - входные цепи включены, 0 - отключены): У1 У2
#9
2 байта (1 - нет неисправностей, 0 - есть неисправности): У1 У2
#9
2 байта (1 - нет разночтений, 0 - есть разночтения): У1 У2
#9
2 байт (1 - наличие нерасчетных сечений, 0 - нерасчетных сечений нет)
#9
ДДММГГГГЧЧММССТТ (для У1)
#9
ДДММГГГГЧЧММССТТ (для У2)
#9
Примечание - Выражение "-1" обозначает неопределенное (недостоверное) значение.
Пример
Клиент:
~$BEGIN$~
~$~ODUURL_CFRAS_RT01~$~UJNAJA_KS_01~$~WAQ 1~$~NULL~$~NULL~$~
CurMode_KPU(1111 #9 1 #90000000...1 #9 1 #9 00 #9 11 #9 11 #9 11 #9 11 #9 11 #9 00 #9
1411200515454500 #9 1411200515454600 #9)
~$~0~$~
~$END$~
Модуль:
~$BEGIN$~~$~UJNAJA_KS_01~$~ODUURL_CFRAS_RT01~$~AOQ1~$~
NULL~$~NULL~$~OK
~$~0~$~
~$END$~
~$SAB$~322 OK~$SAE$~
В.2.4.4.6 Передача режимных параметров
Передача данных от КС для шлюза ММО. Осуществляется периодически (настраиваемый параметр) и по факту изменения режимных параметров.
Формат вызова:
MP(Struct)
Struct структура:
ПК #9 СИ1...СИ64 #9 Р1...Р64 #9 Сечение1 #9... #9 Сечение16 #9
ДДММГГГГЧЧММССТТ #9,
где ПК - номер устройства;
СИ - сигнальная индикация (может быть 0 или 1). Для каждого полукомплекта - свой набор.
Р - ремонты (может быть 0 или 1). Для обоих полукомплектов - одинаково.
Сечение - номер ступени (значения от 0 до 15), если больше или равно 64 - ремонтная схема в сечении нерасчетная. Для обоих полукомплектов - одинаково;
#9 - символ ASCII [TAB];
#13#10 - символы ASCII [CRLF];
ДДММГГГГЧЧММССТТ - день, месяц, год, час, мин, с - точное время последнего обновления УВ по данному ПОр, ТТ - значение в мс ("??", если значение не известно).
Пример
Клиент:
~$BEGIN$~
~$~ODUURL_CFRAS_RT01~$~UJNAJA_KS_01~$~AOQ 1~$~NULL~$~NULL~$~
MP(1 #9 0... 1 #9 1...0 #9 10 #9 ... #9 3 #9 14112005141122?? #9)
~$~0~$~
~$END$~
Модуль:
~$BEGIN$~
~$~UJNAJA_KS_01~$~ODUURL_CFRAS_RT01~$~WAQ 1~$~NULL~$~NULL~$~
OK
~$~0~$~
~$END$~
~$SAB$~322 OK~$SAE$~