Project

General

Profile

Приложение 2: Протокол CCP версии 2.0

Общие сведения

Протокол CCP предназначается для обмена между сервером Caps-Clock и часовыми машинами. Он состоит из набора команд и ответов. Общая структура команды на имеет следующий вид:

ccp [r=RID_NUMBER]>

c>COMMAND_NAME

_[

[PARAMETER_VALUE]

_

]

/ccp>

, где:

* RID_NUMBER - идентификатор запроса.

* COMMAND_NAME - имя команды или ответа. Может быть:

* RESET

* GETVER

* VERSION

* START

* STOP

* GETID

* ID

* GETCONFIG

* CONFIG

* SAVECONFIG

* LOADCONFIG

* SETSTATE

* GETSTATE

* STATE

* SETDATA

* GETDATA

* DATA

* GETSTREAM

* STREAM

* CONNECTSTREAM

* DISCONNECTSTREAM

* ERROR

* NOTIFY

  • PARAMETER_NAME - имя параметра.
  • PARAMETER_VALUE - значение параметра.

Команда обязательно должна заключаться внутри тэгов , первый из которых может иметь необязательный параметр RID. Если он присутствует, то все ответы на данный запрос будут иметь этот указанный идентификатор READ_NUMBER. Первым внутри команды должен идти обязательный тэг , внутри которого содержится имя команды или запроса COMMAND_NAME. Далее могут следовать один или несколько необязательных параметров. Каждый параметр должен находиться внутри тэгов . Согласно данной версии протокола каждый параметр должен быть именованым, поэтому обязательно должно быть указано его имя PARAMETER_NAME. Зато значение параметра может быть опущено в случае, когда важен только сам факт наличия параметра. Значение PARAMETER_VALUE может быть как простым, так и составным, т.е. иметь внутри себя тэговую структуру.

Протокол может работать в одном из 2-х режимов, который задаётся при установке:

  • в режиме одноранговой сети (по умолчанию)
  • в режиме с фиксированным IP

В режиме одноранговой сети каждая часовая машина имеет в своём распоряжении только имя сервера Caps-Clock, с которым она должна работать, а сервер Caos-Clock имеет в своём распоряжении только список имён подключенных часовых машин и адрес порта протокола CCP. Если хотя бы с одной из часовых машин, включенных в список, нет соединения, сервер с заданным при установке интервалом, отправляет multicast-сообщение CCP GETID со своим именем, IP-адресом и номером порта CCP (формат и порядок передачи сообщений multicast см. в RFC3170. Часовые машины, не имеющие соединения с сервером, получают это сообщение, устанавливают соединение по указаннонму в сообщении IP:Port и передают сообщение CCP ID, в котором указывают своё имя. Если имя внесено в список сервера, то сервер помечает в таблице машину, как подключенную и отправляет в ответ CCP ERROR OK. Часовая машина перестаёт принимать сообщения multicast до момента потери соединения. Если сервер не находит имени в списке, он отправляет CCP ERROR NOTSUPPORTED и разрывает соединение, при этом часовая машина продолжает принимать сообщения multicast. Когда все машины из списка устанавливают соединение с сервером, сервер перестаёт посылать CCP GETID до момента потери одного или нескольких соединений.

{{Image("Multi.jpg","width=450px")}}

В режиме с фиксированным IP каждая часовая машина снабжается информацией об IP-адресе часового сервера и номере порта CCP. Ей также указывается интервал, с которым она пытается установить соединение по протоколу CCP. Сервер, так же как и в режиме одноранговой сети, имеет в своём распоряжении список имён подключенных часовых машин. В отличие от предыдущего режима, сервер не рассылает никаких сообщений. Часовая машина, в свою очередь, с заданным интервалом пытается установить соединение с сервером по указанному IP:Port. В случае успеха, она передаёт сообщение CCP ID, в котором указывают своё имя. Если имя внесено в список сервера, то сервер помечает в таблице машину, как подключенную и отправляет в ответ CCP ERROR OK. При потере соединения часовая машина снова воспризводит всю последовательность действий. Если сервер не находит имени в списке, он отправляет CCP ERROR NOTSUPPORTED и разрывает соединение, при этом часовая машина продолжает периодически попытки установки соединения.

{{Image("Uni.jpg","width=450px")}}

В общем случае выполнение команды CCP можно представить в следующем виде (за исключением последовательности команд GETID, ID):

{{Image("CCPcommon.jpg","width=300px")}}

Сначала сервер Caps-Clock формируют команду CCP и отсылает её часовой машине. Часовая машина получает команду и производит её разбор. В случае ошибки она отсылает серверу код ошибки и прекращает выполнение команды. В случае успешного разбора она выполняет команду и ответ CCP, который может содержать либо запрошенные данные, либо статус выполнения команды.

Команда RESET

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

Параметры:

Нет.

Синтаксис:

ccp [r=xxxxx]>

c>RST

/ccp>

Выполнение:

При получении команды RESET часовая машина производит следующие действия:

  • закрывает все открытые соединения кроме соединения с сервером
  • отправляет серверу статус завершения операции
  • если статус был "OK", закрывает соединение с сервером и выполняет перезапуск

Ответ:

ccp [r=xxxxx]>

c>ERR

_

XXXXXX

_

_

XXXXXXX

_

_[

XXXXXXXXXXX

]_

/ccp>

В ответ часовая машина отсылает сообщение ERR с ID компоненты, в котором содержится статус выполнения ER_ID (OK или код ошибки) и необязательное описание ошибки ER_DS.

Команды GETVER и VERSION

Команда предназначена для получения информации о том, какую версию протокола ССP поддерживает компонента.

Параметры:

Нет.

Синтаксис:

ccp [r=xxxxx]>

c>GVR

/ccp>

Выполнение:

При получении команды GVR часовая машина составляет ответ VRS с указанием номера поддерживаемого протокола CCP и отправляет его серверу.

Ответ:

ccp [r=xxxxx]>

c>VRS

_

XX

_

_

XX

_

/ccp>

В ответ часовая машина отсылает сообщение VRS с указанием старшего MJR и младшего MNR номера версии протокола ССP (т.е. MJR.MNR).

Команда START

Команда предназначена для старта предварительно остановленной компоненты.

Параметры:

Нет.

Синтаксис:

ccp [r=xxxxx]>

c>STR

/ccp>

Выполнение:

При получении команды START часовая машина начинает снова обрабатывать события.

Ответ:

ccp [r=xxxxx]>

c>ERR

_

XXXXXX

_

_

XXXXXXX

_

_[

XXXXXXXXXXX

]_

/ccp>

В ответ часовая машина отсылает сообщение ERR с ID компоненты, в котором содержится статус выполнения ER_ID (OK или код ошибки) и необязательное описание ошибки ER_DS.

Команда STOP

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

Параметры:

Нет.

Синтаксис:

ccp [r=xxxxx]>

c>STP

/ccp>

Выполнение:

При получении команды STOP часовая машина прекращает обработку всех событий, за исключением команд CCP RESET, GETVER, START, GETID, GETCONFIG, SAVECONFIG, LOADCONFIG, ERROR. При получении одной из этих команд, она обрабатывается и серверу посылается ответ. При получении любой другой команды отсылается ответ CCP ERROR STOPPED.

Ответ:

ccp [r=xxxxx]>

c>ERR

_

XXXXXX

_

_

XXXXXXX

_

_[

XXXXXXXXXXX

]_

/ccp>

В ответ часовая машина отсылает сообщение ERR с ID компоненты, в котором содержится статус выполнения ER_ID (OK или код ошибки) и необязательное описание ошибки ER_DS.

Команда GETID

Широковещательная (multicast) команда сервера Caps-Clock GETID предназначена для инициации установления соединения с часовыми машинами в режиме одноранговой сети.

Параметры:

Сервер передаёт через параметры информацию о конфигурации на нём протокола CCP:

  • ID - идентификатор сервера в сети Caps-Clock
  • IP - IP-адрес сервера
  • PORT - номер порта протокола Caps-Clock

Синтаксис:

ccp [r=xxxxx]>

c>GID

_

XXXXXX

_

_

XXX.XXX.XXX.XXX

_

_

XXXX

_

/ccp>

Выполнение:

При получении команды GETID часовая машина пытается установить соединение по указанному адресу. Если соединение установлено, она формирует и отправляет серверу команду CCP ID.

Ответ:

ccp [r=xxxxx]>

c>ID

_

XXXXXX

_

/ccp>

В ответ часовая машина отсылает сообщение ID со своим идентификатором в сети Caps-Clock.

Команда ID

Команда ID предназначена для установления соединения с сервером Caps-Clock.

Параметры:

Часовая машина передаёт серверу свой идентификатор в сети Caps-Clock через параметр:

  • ID - идентификатор часовой машины в сети Caps-Clock

Синтаксис:

ccp [r=xxxxx]>

c>ID

_

XXXXXX

_

/ccp>

Выполнение:

Команда формируется и отсылается часовой машиной на сервер в ответ на широковещательное сообщение GETID, либо на срабатываение таймера по интервалу PING. При получении команды ID сервер проверяет наличие в своём списке машины с таким ID. Если эта машина внесена в список, то ставит пометку об установлении соединения с этой машиной, а машине отправляет CCP ERROR OK. Если машина не внесена в список, то он отправляет CCP ERROR NOTSUPPORTED и разрывает соединение.

Ответ:

<ccp [r=xxxxx]>

c>ERR

_

XXXXXX

_

_

XXXXXXX

_

_[

XXXXXXXXXXX

]_

/ccp>

Команда GETCONFIG

Команда предназначена для получения от часовой машины текущей конфигурации контролов и обработчиков сигналов.

Параметры:

Для определения типа списка используются 3 параметра:

  • TYPE - тип получаемого списка
  • LEVEL - уровень детализации
  • [NAME] - имя конфигурации.

TYPE определяет, список каких именно компонент должен быть составлен. Он может быть:

  • CONTROL_TYPE - для получения списка контролов
  • SIGNAL_TYPE – для получения списка обработчиков событий

LEVEL определяет уровень детализации списка. Он может быть:

  • CURRENT - для получения текущей конфигурации контролов
  • LIST - для получения списка имеющихся конфигураций данного типа
  • CONFIG - для получения конфигурации с указанным именем

NAME задаёт имя конфигурации, которая запрашивается, если LEVEL=CONFIG. В остальных случаях этот параметр не используется и может быть опущен.

Синтаксис:

ccp [r=xxxxx]>

c>GCF

_

XXXXX

_

_

XXXXXX

_

_[

XXXXXX

]_

/ccp>

Выполнение:

При получении команды GETCONFIG часовая машина производит следующие действия: определяет вид таблицы, откуда нужно брать информацию в соответствии с TYPE и LEVEL, выбирает оттуда элементы и заносит их в выходной список. После этого список кодируется в формате CCP и отправляется серверу. Если используется LEVEL=CONFIG, то конфигурация считывается с локального диска и отправляется серверу, как есть.

Ответ:

ccp [r=xxxxx]>

c>CFG

_

XXXXXX

_

_

XXXXXXX

_

_

XXXXXXX

_

_[

_

/p>]

/ccp>

В ответ часовая машина отсылает сообщение CCP CONFIG с ID компоненты и указанием типа списка TYP и самим списком LST, содержащим сам список.

Команда SAVECONFIG

Команда предназначена для сохранения текущей конфигурации органов управления или обработчиков событий на локальном диске часовой машины.

Параметры:

Для сохранения конфигурации используются два параметра:

  • TYPE - тип конфигурации
  • NAME - имя конфигурации

TYPE определяет, конфигурация каких именно компонент должна быть сохранена. Он может быть:

  • CONTROL_TYPE - для сохранения конфигурации контролов
  • SIGNAL_TYPE – для сохранения конфигурации обработчиков событий

NAME определяет имя, под которым будет сохранена текущая конфигурация. Это имя не является именем файла, а является записанным внутри файла именем конфигурации. Это даёт возможность использовать различные варианты хранения конфигураций, независимо от версии протокола.

Синтаксис:

ccp [r=xxxxx]>

c>SCF

_

XXXXX

_

_

XXXXXXXXXXXX

_

/ccp>

Выполнение:

При получении команды SAVECONFIG часовая машина производит следующие действия: определяет вид таблицы, откуда нужно брать информацию в соответствии с TYPE, проверяет на наличие конфигурации с таким именем. Если такая конфигурация уже есть, то она удаляется. После этого создаётся новая конфигурация с указанным именем, в которую заносится текущая конфигурация заданного типа в формате CML.

Ответ:

ccp [r=xxxxx]>

c>ERR

_

XXXXXX

_

_

XXXXXXX

_

_[

XXXXXXXXXXX

]_

/ccp>

В ответ часовая машина отсылает сообщение CCP ERROR со своим ID и статусом выполнения операции.

Команда LOADCONFIG

Команда предназначена для загрузки конфигурации органов управления или обработчиков событий с локального диска часовой машины.

Параметры:

Для поиска конфигурации используются два параметра:

  • TYPE - тип конфигурации
  • NAME - имя конфигурации

TYPE определяет, конфигурация каких именно компонент должна быть загружена. Он может быть:

  • CONTROL_TYPE - для загрузки конфигурации контролов
  • SIGNAL_TYPE – для загрузки конфигурации обработчиков событий

NAME определяет имя загружаемой конфигурация. Это имя не является именем файла, а является записанным внутри файла именем конфигурации. Это даёт возможность использовать различные варианты хранения конфигураций, независимо от версии протокола.

Синтаксис:

ccp [r=xxxxx]>

c>LCF

_

XXXXX

_

_

XXXXXXXXXXXX

_

/ccp>

Выполнение:

При получении команды LOADCONFIG часовая машина производит следующие действия: определяет вид таблицы, куда нужно грузить информацию в соответствии с TYPE, проверяет на наличие конфигурации с таким именем. Если такой конфигурации нет, то серверу возвращается CCP ERROR NOTFOUND. Если конфигурация найдена, то производится её загрузка и делается запись на диске об имени текущей конфигурации.

Ответ:

ccp [r=xxxxx]>

c>ERR

_

XXXXXX

_

_

XXXXXXX

_

_[

XXXXXXXXXXX

]_

/ccp>

В ответ часовая машина отсылает сообщение CCP ERROR со своим ID и статусом выполнения операции.

Команды управления параметрами контролов

К командам управления параметрами контролов относятся 3 команды: SETDATA, GETDATA и DATA. Они позволяют изменить парметры контролов. Пара GETDATA и DATA позволяет серверу получить текущее значение параметров контрола, SETDATA - установить текущее значение контрола.

Выполнение:

Для получения текущих параметров контрола сервер посылает часовой машине CCP GETDATA с идентификатором контрола и списком запрашиваемых параметров. Часовая машина находит контрол с указанным CID, получает от него текущие значения указанных в списке параметров, формирует CCP DATA и возвращает его серверу. Для установки каких-либо параметров контрола сервер формирует CCP SETDATA с идентификатором CID и списком изменяемых параметров, после чего отправляет эту команду на часовую машину. Машина производит обработку команды и меняет соответствующие параметры указанного органа отображения. Статуc выполнения операции возвращается в CCP ERROR.

Синтаксис команды GETDATA:

ccp [r=xxxxx]>

c>GDT

_

XXXXXX

_

_[

]_

_[

]_

/ccp>

Синтаксис команды DATA:

ccp [r=xxxxx]>

c>DAT

_

XXXXXX

_

_[

XXXXX

]_

_[

XXXXX

]_

/ccp>

Синтаксис команды SETDATA:

ccp [r=xxxxx]>

c>SDT

_

XXXXXX

_

_

XXXXX

_

_[

XXXXX

]_

/ccp>

Команды управления состоянием контролов

К командам управления состоянием контролов относятся 3 команды: SETSTATE, GETSTATE и STATE. Они могут применятся к контролам, которые поддерживают описание состояний (например, транспаранты), т.е. переход контрола из одного состояние в другое вызывает изменение сразу нескольких параметров, заранее заданных в конфигурации.

Выполнение:

Для получения текущего состояния контрола сервер посылает часовой машине CCP GETSTATE с идентификатором контрола. Часовая машина находит контрол с указанным CID, получает его текущее состояние, формирует CCP STATE и возвращает его серверу. Для установки контрола в какое-то состояние сервер формирует CCP SETSTATR с идентификатором CID и идентификатором состояния, после чего отправляет эту команду на часовую машину. Машина производит обработку команды и меняет состояние указанного органа отображения. Статуc выполнения операции возвращается в CCP ERROR.

Синтаксис команды GETSTATE:

ccp [r=xxxxx]>

c>GST

_

XXXXXX

_

/ccp>

Синтаксис команды STATE:

ccp [r=xxxxx]>

c>STT

_

XXXXXX

_

_

XXXXX

_

/ccp>

Синтаксис команды SETSTATE:

ccp [r=xxxxx]>

c>SST

_

XXXXXX

_

_

XXXXX

_

/ccp>

Команды управления потоками данных

К этой группе относятся 4 команды: GETSTREAM, STREAM, CONNECTSTREAM и DISCONNECTSTREAM. Они могут применяться к контролам, поддерживающим отображение поточных данных, и используются для установления конфигурации потока и управления.

Выполнение:

Для установления поточного соединения сервер Caps-Clock посылает часовой машине команду CCP GETSREAM с идентификатором поточного контрола. Часовая машина принимает команду и проверяет, поддерживает ли данный контрол отображение поточных данных. Если такой режим работы не поддерживается, то серверу возвращается CCP ERROR NOTSUPPORTED. Если поддерживается, то серверу возвращается CCP STREAM, где указывается IP часовой машины, номер порта поточных данных для указанного контрола, список обработчиков потока, каждый из которых содержит ID обработчика и формат передаваемого блока данных в потоке. Сервер выбирает нужный ему формат и для конфигурации нужного формата потока отсылает CPP CONNECTSTREAM с идентификатором контрола и вбранного обработчика. При получении такой команды часовая машина устанавливает соответствующий обработчик потока и возвращает серверу CCP ERROR со статусом выполнения команды. После этого сервер или приложение создают соединение напрямую с указанным адресом IP:Port и начинают передачу потоковых данных. Для завершения работы сервер присылает CCP DISCONNECTSTREAM с CID контрола. Часовая машина отключает обработку потока на этом порту и возвращает статус выполнения команды в CCP ERROR.

Синтаксис команды GETSTREAM:

ccp [r=xxxxx]>

c>GSM

_

XXXXXX

_

/ccp>

Синтаксис команды STREAM:

ccp [r=xxxxx]>

c>STM

_

XXXXXX

_

_

XXX.XXX.XXX.XXX

_

_

XXXXX

_

p nm=HNDLR>

hid>XXXXXX

blklen>XXXXX

fields>

fldlen>XXXXX

[XXXXXXX]

/fields>

/p>

_[

_

/p>]

/ccp>

Синтаксис команды CONNECTSTREAM:

ccp [r=xxxxx]>

c>CSM

_

XXXXXX

_

p nm=HID>XXXXXX

/ccp>

Синтаксис команды DISCONNECTSTREAM:

ccp [r=xxxxx]>

c>DSM

_

XXXXXX

_

/ccp>

Команда ERROR

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

Параметры:

В качестве параметров команды передаются:

  • ID - идентификатор часовой машины или сервера, откуда послана эта команда
  • ERROR_ID - идентификатор ошибки
  • [ERROR_DECRIPTION] - необязательное текстовое описание ошибки, позволяющее пользователю точнее определить причину отказа.

Синтаксис:

ccp [r=xxxxx]>

c>ERR

_

XXXXXX

_

_

XXXXXXX

_

_[

XXXXXXXXXXX

]_

/ccp>

Команда NOTIFY

Эта команда предназначена для асинхронного уведомления сервера о возникновении того или иного события на часовой машине. В основном применяется для определения моментов срабатывания различных таймеров, но может применяться для уведомления о ????получении сигналов GPI.

Параметры:

Команда сожержит следующие параметры:

  • ID - идентификатор часовой машины
  • EVENT_TYPE - определяет тип события, которое вызвало посылку данной команды.
  • [EVENT_ID] - идентификатор обработчика события
  • [CONTROL_ID] - идентификатор контрола, отвественного за возникновение события
  • [EVENT_DATA] - дополнительная информация о событии

Синтаксис:

ccp [r=xxxxx]>

c>NFY

_

XXXXXX

_

_

XXXXX

_

_[

XXXXXX

]_

_[

XXXXXX

]_

_[

XXXXXX

]_

/ccp>

Выполнение:

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

Add picture from clipboard (Maximum size: 742 MB)