Project

General

Profile

Архитектура системы к проекту "Caps-Clock Kernel"

Введение

Этот документ содержит описание архитектуры базовых элементов системы Caps-Clock. Архитектура разрабатывается на основе системных требований r1 и с учётом предыдущей реализации системы. Документ предназначен в первую очередь для команды программистов, которая занимается реализацией данного проекта.

Назначение системы

Назначение системы описано в системных требованиях в пункте "Назначение".

Обоснование выбранного дизайна

Редизайн системы был произведён по следующим причинам:

  • реализация часовой машины на базе технологии JAVA оказалась не в состоянии обеспечить приемлемую скорость отображения бегущих строк, окон с прокруткой текста, индикаторов уровня
  • потребовалось более полное разделение 2-х протоколов обмена: внутреннего протокола системы CCP (Сaps-Clock Communication Protocol) и протокола обмена с внешними приложениями ENMP (External Network Message Protocol)
  • потребовалось разделение каналов обмена командами и поточных данных для обеспечения приемлемой скорости обработки данных
  • расширение функциональности органов отображения (controls) на часовой машине
  • расширение функциональности обработки сигналов и поступающих сетевых сообщений на сервере

Техническая база и существующие системы

Здесь можно ознакомиться с документацией по первой релизации системы Caps-Clock. Достоинствами этой системы является её переносимость на различные платформы, а недостатками - высокие требования к ресурсам и невысокая скорость работы.

Другой альтернативой является разработка системы на базе технологии ActionScript компании Macromedia. Достоинством этого подхода является переносимость ПО часовой машины на различные платформы.

В рамках данного решения переносимость ПО часовой машины на другие платформы практически невозможна. При этом возможны также несколько различных путей решения:

  • Использование библиотек QT4, которые обеспечивают некоторую переносимость
  • Использование библиотек Cairo, которые совсем не обеспечивают переносимость, но дают максимальное быстродействие

Техническая база

<Опишите здесь, какие продукты, алгоритмы, технологии etc лежат в основе данной архитектуры.>

Предлагаемая архитектура системы
h3. Цели и соглашения технического дизайна
h4. Высокая производительность

Производительность часовой машины должна позволять отображение бегущих строк и вращающегося текста в режиме титровальной машины, без подёргиваний и эффекта мерцания. Отображение индикаторов уровня, медиапотоков и других движущихся частей должно также производиться без задержек и мерцаний. Производительность всей системы должна обеспечивать реакцию на поступивший в систему сигнал от GPI не более 40 мсек, а на сигналы от индикатора уровня - не более 0.0015 сек на один отсчёт.

Дружественность к пользователю

Система должна иметь простой инструментарий для установки и настройки параметров с возможностью выбора языка пользователя. Она также должна быть гибкой, чтобы позволить пользователю собрать любую нужную конфигурацию системы, отобразить любую нужную информацию на экранах часовых машин, создать свой собственный дизайн. При отладке серверных макросов и сообщений ENMP система должна максимально точно указывать источник возникновения ошибок.

Простота использования

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

Надёжность

Предполагается, что система будет использоваться в круглосуточном режиме, а часовые машины могут располагаться в труднодоступных местах. Поэтому особое внимание должно быть уделено надёжности часовых машин. Серверы Caps-Clock будут работать в режиме сервисов Windows на уже существующих рабочих станциях пользователя, а поэтому не должны вносить затруднений в работу других приложений на этих станциях.

Безопасность

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

Полнота функциональности

Система должна сохранить функциональность, которая была обеспечена первой версией системы. При этом добавляется новая функциональность органов отображения, дополнительные возможности в протокол ENMP и новые возможности по организации поточных данных. Пользовательский интерфейс также дополняется установочным и настроечным интерфейсами. При этом в данном документе не рассматривается архитектура внешних приложений, включаемых в состав системы - они буду описаны в отдельных документах.

Декомпозиция подсистем
h4. Архитектура системы

Общая архитектура системы приведена на следующей диаграмме:

{{Image("ArcCDS_SRV.jpg","width=600px")}}

В общем случае система состоит из трёх основных типов компонент:

  • часовых машин
  • серверов Caps-Clock
  • прикладных программ системы

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

Серверы Caps-Clock несут основную нагрузку по обработке поступающих сигналов и данных, реализации бизнес-логики предприятия, а на часовые машины отправляют уже обработанные команды отображения.

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

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

Взаимодействие между этими типами компонент осуществляется следующим образом:

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

{{Image("Communication.jpg","width=400px")}}

Часовая машина

Часовая машина представляет собой законченную аппаратно-программную компоненту системы Caps-Clock, состоящую из:

  • миникомпьютера на указанной аппаратной платформе (см. r1 п.2.4. " Операционная среда")
  • LCD монитора
  • Крепления
  • OS EMDEBIAN 5.0.3
  • Полноэкранной прикладной программы CDS (Caps-Clock Display), реализующей основную функциональность часовой машины
  • Web-приложения "Web интерфейс" для настройки часовой машины
  • Возможно??? устройства ТР312/314 с драйвером для подключения внешних устройств GPI

{{Image("CDS.jpg","width=600px")}}

Входные данные часовой машины

Для своего функционирования часовая машина принимает следующие входные данные:

  1. Команды и данные по протоколу CCP
  2. Данные NTP
  3. HTTP запросы Web интерфейса
  4. Поточные данные для контролов, поддерживающих отображение поточных данных
  5. FTP и SSH запросы для администрирования
  6. Возможно??? сигналы от устройств GPI

Все данные, за исключением сигналов от устройств GPI, передаются по сети Ethernet через сетевой адаптер и драйвер TCP/IP. В дальнейшем они пользуются системным стеком протоколов (HTTP, FTP, SSH и NTP соответственно) или модулем протокола CCP, встроенным в CDS. Данные от устройств GPI попадают в ТР312/314, где они преобразуются в данные USB и передаются по USB драйверу устройства. Драйвер преобразует из в данные виртуального COM-порта, откуда они попадают в модуль управления ТР312, встроенный в CDS.

Выходные данные часовой машины

В процессе работы часовая машина отсылает следующие данные:

  1. Ответы и уведомления согласно протоколу CCP
  2. Ответы на запросы к Web интерфейсу по протоколу HTTP
  3. Запросы и отклики FTP и SSH
  4. Возможно сигналы управления устройствами GPI

Все данные, за исключением сигналов управления устройствами GPI, пользуются системным стеком протоколов (HTTP, FTP и SSH соответственно) или модулем протокола CCP, встроенным в CDS, а затем передаются по сети Ethernet через драйвер TCP/IP и сетевой адаптер. Данные для устройств GPI передаются встроенным в CDS модулем управления ТР312 драйверу ТР312/314, где они преобразуются в данные USB и передаются непосредственно устройству ТР312/314.

Используемые аппаратные ресурсы

Для своей работы часовая машина пользуется следующими аппаратными ресурсами, не считая оперативной памяти и времени CPU:

  • Сетевым адаптером, который испольуется в режиме разделения между протоколами CCP, HTTP, FTP, SSH, NTP и поточными данными
  • Таймером, который используется для генерации различных событий, связанных с установкой различных временных интервалов и сигналов синхронизации
  • Графическим адаптером, который используется для организации графического вывода и получения сигналов синхронизации вертикальной развёртки (VSync)
  • Файловой системой, которая используется для хранения файлов офомления дисплея, файлов конфигурации часовой машины и различных журналов часовой машины
  • Возможно портом USB и виртуальным COM-портом для организации взаимодействия с ТР312/314
CDS

CDS представляет собой полноэкранное приложение EMDEBIAN, которое реализует основную функциональность часовой машины.

{{Image("CDSStruct.jpg","width=600px")}}

Это приложение состоит из следующих независимых друг от друга модулей:

  • Display Model - модель отображения. Он реализует модель расположения контролов на экране, их перекрытия, расчёт происходящих на экране изменений, которые он производит при получении информации о происшедших событиях в системе (от Event Manager-a), о поступивших командах отображения (от модуля CCP) и об изменении конфигурации (от Configuration Manager-а). При получении команду на изменение состояния какого-либо из контролов, он производит подготовку изменений на экране, после чего отдаёт сделанное изменение для вывода на экран модулю Display Output.
  • Event Manager - модуль управления событиями. Этот модуль реализет модель реакции часовой машины на события: он организует обработку информации о событиях от таймера, поступивших сигналов от внешних устройств GPI, о потере/восстановлении сетевых соединений, о поступлении блока поточных данных etc. Он обрабатывает эти события в соответствии с текущей конфигурацией и передаёт модели дисплея команды отображения для соответствующих контролов. Он также осуществляет управление заданиями для модулей Timer Control, Stream Data Manager и уведомлений CCP, а также возможно модулем ТР312/314.
  • Timer Control (или Scheduler) - модуль управления таймером. Он реализует организацию расписания событий, взаимодействие с таймером системы и вызовы Event Manager-а при срабатывании таймера согласно расписания. В его задачу также входит реализация управление конкретным типом таймера системы, т.е. инкапсуляцию механизма управления системным таймером от остальных модулей часовой машины.
  • Configuration Manager - модуль управления конфигурацией. Это модуль, который задаёт начальную конфигурацию всех остальных модулей CDS, управление файлами конфигурации, их разбор и старт всех остальных модулей при старте/рестарте. Он также занимается изменение/сохранением/загрузкой/удалением конфигурационных файлов в процессе работе при запросе от модуля CCP. Configuration Manager - это первый модуль CDS, который стартует при запуске системы.
  • CCP - модуль протокола Caps-Clock. Этот модуль занимается сборкой и трансляцией команд протокола CCP. Он принимает данные из сети, собирает команду CCP и отдаёт её на выполнение Configuration Manager-у или Display Model-и. Он также получает уведомления о статусе выполнения команд от этих модулей и о событиях, требующих отправки уведомления по сети, от Event Manager-a. После этого он собирает соответствующий пакет CCP и отправляет его на сервер.
  • Stream Data Manager - модуль сборки поточных данных. Этот модуль собирает пакеты поточных данных, если поточные данные структурированы, и отправляет собранный пакет Event Manager-у. В отличие от модуля CCP, который всегда поддерживает всегда только одиночное соединение с конкретным сервером Caps-Clock, Stream Manager может одновременно поддерживать несколько соединений - по одному для каждого контрола с поточными данными.
  • Display Output - интерфейсный модуль графического адаптера. Этот модуль инкапсулирует логику работы с конкретным графическим адаптером от остальных модулей системы. Он принимает от адаптера сигналы вертикальной развёртки и графические данные от модели дисплея и выводит изображение на экран часовой машины.
  • Log Control - модуль ведения журналов системы. Занимается принятием сообщений об ошибках и другой журнальной информации от всех модулей системы, вывод и сохранение этой информации в журналах, управление размещением и очисткой журналов часовой машины.
  • Возможно ТР312 Control - модуль управления обменом с ТР312/314. Этот модуль занимается получением/передачей данных от драйвера устройства ТР312/314, обработкой полученных данных и уведомлением Event Manager-а о событиях, происшедших с оборудованием GPI. При получении от Event Manager-а команды управления устройством GPI этот модуль собирает нужную команду и передаёт её драйверу ТР312/314.

Каждый модуль обязательно поддерживает следующие функции:

  • !GetModuleName() - функция возвращает имя модуля. По этому имени потом можно будет определить, что это за модуль.
  • !ExecuteMethodByName( Name, ArgList ) - вызов функции по имени. В Name передаётся имя функции, в !ArgList - параметры этой функции.
Display Model

Display Model содержит в себе реализацию дерева контролов, которые используются для вывода отображаемой информации, их параметров и способов взаимодействия. Считается, что дерево контролов, как минимум, всегда содержит один корневой элемент типа Background, который имеет в качестве параметра некоторую фоновую картинку, которая задаётся по умолчанию. Все остальные контролы располагаются над ним слоями. Каждый слой содержит набор непересекающихся контролов одного уровня. Описание модели каждого контрола содержится в Приложении 5 Модели контролов часовой машины.

Интерфейс

  1. !CreateControl( ControlID, ControlType, ParameterList ) - функция предназначена для создания контрола с указанным ControlID заданного типа ControlType. Параметры контрола, его положение на экране etc задаются списком именованых параметров ParameterList. Функция возвращает статус операции или код ошибки в случае неудачи.
  2. !DeleteControl( ControlID ) - функция предназначена для удаления ранее созданного контрола с указанным ControlID. Возвращается статус операции или код ошибки в случае неудачи.
  3. !SetParameters( ControlID, ParameterList ) - функция предназначена для изменения одного или нескольких параметров контрола ControlID, которые задаются в ParameterList. Остальные параметры остаются без изменений. Возвращается статус операции или код ошибки в случае неудачи.
  4. !LevelUp( ControlID, Number ) - функция предназначена для перемещения контрола ControlID на Number контролов вверх. Возвращается число реального перемещения или код ошибки в случае неудачи.
  5. !LevelDown( ControlID, Number ) - функция предназначена для перемещения контрола ControlID на Number контролов вниз. Возвращается число реального перемещения или код ошибки в случае неудачи. Контрол не может быть перемещён ниже корневого элемента.
  6. !GetModel() - функция возвращает текущее дерево контролов в виде списка объектов базового класса Control.
  7. Command( ControlID, CommandID ) - функция посылает команду CommandID указанному контролу ControlID. Команда представляет собой одну из команд, которую поддерживает данный контрол. Как правило одна команда представляет собой смену состояния контрола, которая вызывает одновременную смену нескольких параметров контрола.
  8. !SetBuffer( BufferAddr ) - функция для задания адреса графического буфера, где будет производиться рисование. Возвращается статус операции: если модуль занят рисованием и не может в данный момент заменить буфер, то возвращается код занятости (ID объекта синхронизации???).
  9. !ExecuteControlMethodByName( ControlID, Name, ArgList ) - вызов функции контрола ControlID по имени. В Name передаётся имя функции, в !ArgList - параметры этой функции.
Event Manager

Event Manager содержит в себе реализацию таблицы различных обрабатываемых событий и описание реакции часовой машины на них. Под событиями понимается:

* срабатывание таймера: разовое или циклическое - не имеет значения

* получение блока поточных данных

* получение сигнала от устройств GPI

* установление/разрыв соединений:

* сети Ethernet

* с сервером по протоколу CCP

* контрола потока данных с приложением

При возникновении отдного из событий Event Manager производит обработку поступивших данных и может произвести:

  • вызов функции Display Model-и для отображения изменений
  • вызов функции CCP для пересылки уведомления
  • вызов функции Timer Control для изменения информации о срабатывании таймеров
  • вызов функции Configuration Manager-а для смены конфигурации
  • вызов функции Stram Data Manager-а для смены информации о потоке данных
  • ??вызов функции модуля ТР312 Control для изменения информации о реакции на события устройств GPI (и отсылки команды устройствам GPI??)

Интерфейс

  1. !CreateEvent( EventType, ControlList, EventDescr ) - функция предназначена для добавления нового события в таблицу событий. При этом указывается тип события EventType, к каким контролам или сигналам это событие относится (!ControlList), и передаются параметры события EventDescr. После добавления события в таблицу возвращается идентификатор события, по которому будет в дальнейшем происходить работа с этим событием EventID.
  2. !DeleteEvent( EventID ) - функция предназначена для удаления события EventID из таблицы событий. Возвращается статус выполнения опреции.
  3. !AttachEvent( EventID, ControlList ) - функция предназначена для назначения события EventID другим контролам или сигналам, перечисленным в списке ControlList.
  4. !DetachEvent( EventID, ControlList ) - функция предназначена для отмены поступления информации о событии EventID определённым контролам и сигналам из ControlList.
  5. !ChangeEvent( EventID, EventDescr ) - функция предназначена для изменения параметров EventDescr события EventID.
  6. !GetEventControls( EventID ) - функция возвращает список контролов и сигнало ControlList, которые подписаны на получение информации о событии EventID.
  7. !GetEventTable() - функция возвращает полную таблицу событий на текущий момент.
  8. !FireEvent( EventID, EventData ) - функция предназначена для оповещения Event Manager-а о наступлении события EventID передачи данных о событии EventData.
Timer Control

Этот модуль содержит в себе расписание (очередь) срабатывания таймера, в котором реализована логика всех возможных временных событий часовой машины. Временные события могут быть одиночными и циклическими. Одиночное событие срабатывает только один раз и может быть установлено на конкретное время или на срабатывание через заданный промежуток времени. После срабатывания одиночного события оно автоматически удаляется из расписания. Циклическое событие также может быть установлено на срабатывание через определённый интервал времени, либо на циклическое срабатывание по конкретному времени:

  • ежедневно в конкретное время
  • еженедельно в конкретное время
  • ежемесячно в конкретное число и время
  • ежегодно в конкретный месяц, число и время

Интерфейс

  1. !ScheduleEvent( EventID, ScheduleData ) - функция предназначена для постановки события EventID в расписание событий таймера в соответствии с данными о событии ScheduleData. Если такое событие уже установлено, то происходит его коррекция в соответствии с новыми данными. Возвращает статус операции.
  2. !RemoveEvent( EventID ) - функция удаляет событие EventID из расписания. Возвращает статус операции.
  3. !SuspendEvent( EventID ) - функция приостанавливает обработку события EventID. Возвращает статус операции.
  4. !ResumeEvent( EventID ) - функция разрешает приостановленную обработку события EventID. Возвращает статус операции.
  5. !EventStatus( EventID ) - функция проверяет, установлено ли данное событие EventID в расписание. Возвращает статус события: WORKED, SUSPENDED, NOTSCHEDULED.
Configuration Manager

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

  • DisplayConfig - конфигурация органов отображения
  • NetConfig - сетевая конфигурация
  • GPIConfig - конфигурация сигналов от устройств GPI
  • LogConfig - конфигурация журналов часовой машины

Интерфейс

  1. !GetConfigList( ConfigType ) - функция возвращает список доступных конфигурационных файлов типа ConfigType на диске часовой машины.
  2. !LoadConfig( ConfigType, ConfigName ) - функция загружает конфигурационный файл типа ConfigType с именем ConfigName. Возвращается статус выполнения операции.
  3. Reload() - функция производит перезагрузку текущих конфигурационных файлов. Возвращается статус выполнения операции.
  4. GetMachineID() - функция возвращает информацию MachineData об имени часовой машины, её IP и номере порта CCP.
  5. !GetStreamPort( ControlID ) - функция возвращает номер порта потока данных, если контрол ControlID поддерживает потоковую передачу, и NOTSUPPORTED в противном случае.
CCP

Модуль протокола CCP (Caps-Clock Communication Protocol) осуществляет приём и разборку команд CCP. После разбора команды, он осуществляет вызов соответствующей функции модели или конфигуратора. После выполнения вызываемой функции он составляет ответ со статусом выполнения команды или кодом ошибки и отправляет её назад серверу. В случае, если произошло событие, требующее уведомления об этом сервера, менеджер событий вызывает соответствующую функцию CCP, которая составляет уведомление в формате протокола CCP и отправляет её на сервер.

Интерфейс

  1. !GetVersion() - функция возвращает данные VersionInfo, которые содержат информацию о версии протокола CCP, которая поддерживается данным модулем.
  2. Notify( EventType, ControlID, EventData ) - функция предназначена для отсылки уведомления серверу о событии EventData. При этом EventType содержит информацию о типе события (TIMER или GPI), ControlID - идентификатор контрола или сигнала GPI, а EventData - данные о событии. Возвращается статаус выполнения операции.
Stream Data Manager

Этот модуль осуществляет приём поточных данных для контролов, поддерживающих поточные данные. Для этого при старте Configuration Manager устанавливает с помощью вызова специальной функции таблицу соответствия котролов и портов потоков данных. После этого модуль открывает свой thread на каждый контрол. При подаче команды CCP на установление соединения с контролом потока данных, последовательностью команд и откликов CCP определяется длина пакета поточных данных, о чём передаётся информация менеджеру событий, а менеджер событий ставит в известность Stream Data Manager. При появлении соединения в таком потоке SDM отправляет уведомление менеджеру событий и начинает приём данных. Как только собран пакет данных, он отправляет EM уведомление и отдаёт пакет для дальнейшей обработки. При потере соединения ссответствующее уведомление отправляется Event Manager-у. Event Manager также может приостановить и возобновить потоковую передачу данных для конкретного контрола.

Интерфейс

  1. !SetStreamTable( StreamList ) - функция предназначена для установки таблицы потоков StreamList. Если таблица уже есть, то все открытые для неё потоки закрываются, таблица уничтожается, а взамен её устанавливается новая таблица. Возвращается статус операции.
  2. !SetStream( ControlID, PortNumber ) - функция устанавливает соответствие контрола ControlID и порта потока PortNumber. Если такой контрол уже занесён в таблицу, то его поток закрывается, номер порта обновляется и открывается новый поток. Если его нет, то соответствующая запись добавляется в таблицу, и открывается новый поток. Возвращается статус операции.
  3. !DeleteStream( ControlID ) - функция закрывает поток для ControlID и удаляет запись из таблицы. Возвращается статус операции.
  4. !SetBlockLength( ControlID, BlockLength ) - функция устанавливает длину блока данных BlockLength в потоке контрола ControlID. 0 означает неструктурированный поток, передача будет осуществляться по мере поступления данных. Возвращается статус операции.
  5. !SuspendStream( ControlID ) - функция приостанавливает передачу данных для контрола ControlID. Возвращается состояние потока после выполнения команды.
  6. !ResumeStream( ControlID ) - функция возобновляет приём данных для контрола ControlID. Возвращается состояние потока после выполнения команды.
Display Output

Этот модуль занимается выводом картинки, подготовленной моделью дисплея, в графический адаптер, руководствуясь управляющими сигналами адаптера, в частности, сигналом VSync. В основном, он связан с остальными модулями только по данным: у него есть 2 графических буфера, которые он по-очереди отдаёт модели дисплея для вывода посредством вызова функции DisplayModel.!SetBuffer. Display Output также занимается переключением режимов адаптера (если это требуется).

Интерфейс

  1. !SetMode( ModeDesc ) - устанавливает графический режим ModeDesc. Возвращает статус выполнения операции.
  2. !GetCurrentMode() - возвращает описание установленного в настоящий момент графического режима ModeDesc.
Log Control

Модуль ведения журнала предназначен для ведения журнала часовой машины. Он поддерживает выбранную стратегию манипулирования журналом и предоставляет остальным модулям интерфейс для внесения записей в журнал.

Интерфейс

  1. !SetStrategy( Number, NumberType, ActionOnExpire ) - устанавливает стратегию ведения журнала. При этом Number задаёт граничное условие, NumberType задаёт тип этого условия (в чём считать, в днях или в Mb), а ActionOnExpire задаёт, что делать со старым журналом при достижении этого граничного условия (удалять или складывать в архив). Если Number будет равен 0, то журнал отключается совсем.
  2. !SetArchiveFolder( FolderName ) - задаёт имя папки для хранения старых архивов. Если такая папка не существует, то она создаётся.
  3. !GetArchiveFolder() - возвращает имя архивной папки.
  4. Put( ComponentName, MessageType, Message ) - записывает данные от модуля ComponentName в журнал. MessageType определяет тип журнальной информации (ERROR, MESSAGE, EVENT), а Message - информация, которая непосредственно записывается в журнал.
  5. Flash() - записывает все хранящиеся в буфере или в кэше данные в файл журнала.
  6. Force() - заставляет модуль считать, что граничное условие выполнилось. Далее модуль поступает в соответствии с выбранной стратегией.
ТР312 Control

Данный модуль предназначен для управления сигналами от утсройств GPI. Он получает данные от драйвера устройства ТР312/314, интерпретирует полученные данные в соответствии с описанием и вызывает при необходимости Event Manager. Он также предоставляет интерфейс другим модулям для посылки сигналов управления устройствам GPI и управления модулем ТР312/314.

Интерфейс

  1. !SetProtocol( ProtocolDesc ) - устанавливает протокол обмена ProtocolDesc с устройством типа ТР312/314.
  2. !SetEvent( EventDescList ) - устанавливает, какие данные приводят к какому событию. EventDescList содкржит список таких событий. При вызове этой функции старый список удаляется и заменяется на новый.
  3. !SendCommand( CommandDesc ) - отсылка команды устройствам GPI.
  4. Reset() - сброс устройства ТР312/314. После сброса устройство автоматически переводится в состояние Stop.
  5. Stop() - останавливает приём/передачу данных от устройства ТР312/314. Возвращает статус устройства после выполнения операции.
  6. Start() - запускает процесс приёма/передачи данных от устройства ТР312/314. Возвращает статус устройства после выполнения операции.
  7. !GetState() - возвращает текущий статус устройства.
Web Interface

Web Interface представляет собой Web-приложение, работающее на установленном на часовой машине light-weight Web Server-е в качестве домашней странички по умолчанию и позволяющее менять настройку параметров приложения CDS. Это приложение предоставляет также пользователю возможность удалённой загруки/выгрузки/удаления различных служебных файлов в каталоге Caps-Clock.

Сервер Caps-Clock

Сервер Caps-Clock представляет собой стандартный сервис MS Windows, уcтанавливаемый на одну из рабочих станций в локальной сети. Отдельно от сервера на эту же станцию могут устанавливаться:

  • Драйвер и модуль ТР312/314
  • Программы настройки и конфигурации

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

Синхронизация с сервером NTP осуществляется (при необходимости) стандартными настройками OS и к серверу никакого отношения не имеет. То же самое касается и локализации. Связь с часовыми машинами, прикладными программами и другими серверами Caps-Clock осуществляется по сети через драйвер протокола TCP/IP. Файлы конфигурации и журналы хранятся в одной папке с сервисом Caps-Clock (CSRV).

Входные данные сервера Caps-Clock

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

  • Команды и данные по протоколу CCP
  • Команды и данные по протоколу ENMP
  • Пользовательский ввод для настроечного интерфейса
  • Cигналы от устройств GPI

Все данные, за исключением сигналов от устройств GPI и ввода от пользователя, передаются по сети Ethernet через сетевой адаптер и драйвер TCP/IP. В дальнейшем они пользуются системным стеком протоколов или модулями протоколов CCP и ENMP, встроенными в CSRV. Данные от устройств GPI попадают в ТР312/314, где они преобразуются в данные USB и передаются по USB драйверу устройства. Драйвер преобразует из в данные виртуального COM-порта, откуда они попадают в модуль управления ТР312, встроенный в CSRV. Ввод данных пользователем в интерфейс настройки через страничку свойств сервиса обрабатывается стандартнвми средствами WinAPI.

Выходные данные сервера Caps-Clock

В процессе работы сервер Caps-Clock отсылает следующие данные:

  • Ответы и уведомления согласно протоколу CCP
  • Ответы и уведомления согласно протоколу ENMP
  • Поточные данные для часовых машин в случае, если источником их является сам сервер.
  • Возможно сигналы управления устройствами GPI

Все данные, за исключением сигналов управления устройствами GPI, пользуются системным стеком протоколов или модулями протоколов CCP и ENMP, встроенным в CSRV, а затем передаются по сети Ethernet через драйвер TCP/IP и сетевой адаптер. Данные для устройств GPI передаются встроенным в CSRV модулем управления ТР312 драйверу ТР312/314, где они преобразуются в данные USB и передаются непосредственно устройству ТР312/314.

Используемые аппаратные ресурсы

Для своей работы сервер Caps-Clock пользуется следующими аппаратными ресурсами, не считая оперативной памяти и времени CPU:

  • Сетевым адаптером, который испольуется в режиме разделения между протоколами CCP и ENMP и поточными данными
  • Файловой системой, которая используется для хранения файлов офомления дисплея, файлов конфигурации часовой машины и различных журналов часовой машины
  • Портом USB и виртуальным COM-портом для организации взаимодействия с ТР312/314

CSRV

{{Image("SRVStruct.jpg","width=600px")}}

Сервис состоит из следующих независимых друг от друга модулей:

  • Event Manager - модуль управления событиями является ядром сервиса и несёт в себе его основную функциональность. Он получает различные команды, отклики и сообщения от всех устройств в сети Caps-Clock, а также сигналы от устройств ТР-312/314. При получении такого сигнала или команды, он находит соответствующий ему макрос в макрореестре и выполняет его. Результатом выполнения макроса является последовательность команд отображения (CCP), откликов и сетевых сообщений (ENMP) и возможно команд управления устройствами GPI. Другими словами, вся бизнесс-логика реализуется внутри этого модуля, в то время как остальные модули являются вспомогательными модулями, выполняющими, в основном, транспортные функции.
  • Configuration Manager - модуль управления конфигурацией. Это модуль, который задаёт начальную конфигурацию всех остальных модулей CSRV, управление файлами конфигурации и макрореестром, их разбор и старт всех остальных модулей при старте/рестарте. Он также занимается изменением/сохранением/загрузкой/удалением конфигурационных файлов в процессе работе при запросе от модуля ENMP. Configuration Manager - это первый модуль CSRV, который стартует при запуске системы.
  • CCP - модуль протокола Caps-Clock. Этот модуль занимается сборкой и трансляцией команд протокола CCP. Он принимает данные из сети, собирает уведомление CCP и отдаёт его на выполнение Event Manager-у. Он также получает команды отображения от Event Manager-a, собирает соответствующие пакеты CCP и отправляет их на указанные часовые машины. Этот модуль является многопоточным, потому что открывает отдельный поток для обработки CCP соединения с каждой часовой машиной.
  • ENMP - модуль протокола ENMP. Этот модуль занимается сборкой и трансляцией команд протокола ENMP. Он принимает данные из сети, собирает команду или отклик и затем отдаёт её на выполнение модулю управления событиями. Он также получает от Event Manager-а различные уведомления и статусы выполнения команд, которые преобразует в формат ENMP и отправляет получателю. Он также является многопоточным и открывает отдельный поток для каждого отдельного ENMP-соединения.
  • Stream Data Manager - модуль отправки поточных данных. Этот модуль получает команду от Event Manager-а в момент появления новых поточных данных, забирает поточные данные с указанного источника и отправляет их соответствующему контролу указанной часовой машины. Stream Manager может одновременно поддерживать несколько соединений - по одному для каждого контрола с поточными данными.
  • Log Control - модуль ведения журналов системы. Занимается принятием сообщений об ошибках и другой журнальной информации от всех модулей системы, вывод и сохранение этой информации в журналах, управление размещением и очисткой журналов сервера.
  • ТР312 Control - модуль управления обменом с ТР312/314. Этот модуль занимается получением/передачей данных от драйвера устройства ТР312/314, обработкой полученных данных и уведомлением Event Manager-а о событиях, происшедших с оборудованием GPI. При получении от Event Manager-а команды управления устройством GPI этот модуль собирает нужную команду и передаёт её драйверу ТР312/314.
  • Интерфейс настройки - модуль настройки сетевых параметров, параметров ведения журналов и состава конфигурационных файлов. Этот модуль использует для взаимодействия с пользователем стандартную страничку свойств сервиса MS Windows. Он получает необходимую для работы конфигурационную информацию от Configuration Manager-a и отображает её на страничке свойств в удобном для пользователя виде. Затем он принимает введённые новые значения параметров и отдаёт их для установки обратно Configuration Manager-у, который уже в свою очередь принимает решения о порядке смены и установки новых параметров.

Каждый модуль обязательно поддерживает следующие функции:

  • !GetModuleName() - функция возвращает имя модуля. По этому имени потом можно будет определить, что это за модуль.
  • !ExecuteMethodByName( Name, ArgList ) - вызов функции по имени. В Name передаётся имя функции, в !ArgList - параметры этой функции.
EventManager

Event Manager содержит в себе реализацию таблицы различных обрабатываемых событий и описание реакции сервера на них. Под событиями понимается:

* поступление поточных данных

* ?срабатывание таймера

* получение сигнала от устройств GPI

* получение команды, уведомления или отклика ENMP

* получение уведомления или отклика CCP

* установление/разрыв соединений:

* сети Ethernet

* с сервером или приложением по протоколу ENMP

* с часовой машиной по протоколу CCP

* потока данных c часовой машиной

При возникновении одного из событий Event Manager производит поиск соответствующего макроса в макрореестре и выполняет его. Как результат, он может произвести:

  • вызов функции ENMP для пересылки команды или уведомления
  • вызов функции CCP для пересылки команды или уведомления
  • вызов функции Configuration Manager-а для смены конфигурации
  • вызов функции Stream Data Manager-а для смены информации о потоке данных или уведомления о поступлении новых поточных данных
  • вызов функции модуля ТР312 Control для изменения информации о реакции на события устройств GPI (и отсылки команды устройствам GPI)

Интерфейс

  1. !CreateEvent( EventType, EventDescr ) - функция предназначена для добавления нового события в таблицу событий. При этом указывается тип события EventType и передаются параметры события EventDescr. После добавления события в таблицу возвращается идентификатор события, по которому будет в дальнейшем происходить работа с этим событием EventID.
  2. !DeleteEvent( EventID ) - функция предназначена для удаления события EventID из таблицы событий. Возвращается статус выполнения опреции.
  3. !ChangeEvent( EventID, EventDescr ) - функция предназначена для изменения параметров EventDescr события EventID.
  4. !GetEventDescription( EventID ) - функция возвращает информацию о событии EventID.
  5. !GetEventTable() - функция возвращает полную таблицу событий на текущий момент.
  6. !FireEvent( EventID, EventData ) - функция предназначена для оповещения Event Manager-а о наступлении события EventID и передачи данных о событии EventData.
Configuration Manager

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

  • DisplayConfig - конфигурация органов отображения
  • NetConfig - сетевая конфигурация
  • GPIConfig - конфигурация сигналов от устройств GPI
  • LogConfig - конфигурация журналов часовой машины

Интерфейс

  1. !GetConfigList( ConfigType ) - функция возвращает список доступных конфигурационных файлов типа ConfigType на диске часовой машины.
  2. !LoadConfig( ConfigType, ConfigName ) - функция загружает конфигурационный файл типа ConfigType с именем ConfigName. Возвращается статус выполнения операции.
  3. Reload() - функция производит перезагрузку текущих конфигурационных файлов. Возвращается статус выполнения операции.
  4. GetMachineID() - функция возвращает информацию MachineData об имени часовой машины, её IP и номере порта CCP.
  5. !GetStreamPort( ControlID ) - функция возвращает номер порта потока данных, если контрол ControlID поддерживает потоковую передачу, и NOTSUPPORTED в противном случае.

Параллельная обработка

<...>

Привязка аппаратного/программного обеспечения

<...>

Управление данными
h4. Протокол CCP

Протокол CCP предназначается для обмена между сервером Caps-Clock и часовыми машинами. Это внутренний протокол обмена системы, который не предназначен для доступа снаружи. Поэтому его внутренняя структура может меняться без изменения пользовательских приложений и протоколов. Он состоит из серии команд и уведомлений. Описание протокола приведено в Приложении 2 Протокол CCP версии 20.

Протокол ENMP

Протокол ENMP предназначается для обмена с внешними компонентами системы и содержит набор из нескольких команд и уведомлений. Он позволяет менять бизнес-логику приложений и всей системы в целом, не затрагивая её внутренней структуры и организации. Описание протокола приведено в Приложении 3 Протокол ENMP версии 20.

Макроязык CML (Caps-Clock Macro Language)

Макроязык используется для написания конфигурационных файлов системы, описания реакции системы на различные события: получение сетевых сообщений, сигналов от устройств GPI, срабатывание таймера. CML представляет собой описания в формате XML, которое имеет ряд правил и ограничений. Описание языка приводится в Приложении 4 Макроязык CML.

Граничные условия
h4. Граничные условия

<...>

Завершение

<...>

Исключительные ситуации

<...>

Объектная модель

<Produce and submit these Section in electronic form using your UML modelling tool (like Borland Together).>

Динамическая модель

<Produce and submit these Section in electronic form using your UML modelling tool (like Borland Together). Give the important dynamic views of your project.>

Приложение 1: Словарь терминов

<Сюда нужно включить список специфических терминов, акронимов и аббревиатур, ежели таковые используются в этом документе. Лучше в алфавитном порядке>

Add picture from clipboard (Maximum size: 742 MB)