Выбрать главу

7. Настройка пороговых значений показателей и уведомление при их превышении.

8. Возможность работы как с реальными физическими датчиками, так и с их программными моделями.

6.1.2. Сценарий функционирования

Базовый сценарий функционирования модуля следующий.

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

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

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

Коммуникация с датчиками осуществляется через протокол USB либо Ethernet путем пересылки / получения команд в соответствии с заданным протоколом.

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

В соответствии с описанием структура системы может быть представлена следующим образом (Рис. 26).

Рис. 26. Структурная схема

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

Компонент «Асинхронный вызов» предназначен для выполнения асинхронных вызовов. «Наблюдатель» предназначен для отслеживания пороговых значений. «Контейнер» хранит список датчиков. Компонент «Датчик» через компонент «драйвер» обращается к аппаратному обеспечению.

6.1.3. Декомпозиция системы

Итак, в соответствии методологией объектно-ориентированного анализа необходимо определить состав классов и связи между ними, отражающие предметную область. Нам будут необходимы следующие классы:

• класс для работы с датчиком;

• контейнер для хранения указанных классов;

• драйвер, обеспечивающий низкоуровневое взаимодействие с аппаратурой;

• очередь для выполнения асинхронных запросов;

• класс для отслеживания пороговых значений;

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

Обобщенная диаграмма классов модуля представлена на Рис. 2735.

Рис. 27. Обобщенная диаграмма классов

Класс ISensorControl объявляет интерфейс модуля, класс SensorControl реализует указанный интерфейс. SensorControl содержит классы Observer (отслеживает пороговые значения), CommandQueue (очередь комманд для асинхронных запросов), SensorContainer (реализует контейнер для хранения классов для работы с датчиком).

Интерфейс для работы с датчиками объявлен в классе ISensor, обощенная реализация интерфейса осуществляется в классе SensorAbstract. Указанный класс хранит указатель на IDriver, который используется для получения значений датчиков. В классе IDriver объявляется интерфейс для взаимодействия с аппаратурой.

6.2. Реализация классов

6.2.1. Общие определения

В Листинг 86 представлены общие объявления типов.

Листинг 86. Общие объявления типов (SensorDef.h)

namespace sensor

{

class ISensor;

class IDriver;

using SensorNumber = unsigned int;       // (1)

using SensorValue = double;              // (2)

using CheckAlertTimeout = unsigned int;  // (3)

enum class SensorType : uint32_t  // (4)

{

  Spot = 0,

  Smooth = 1,

  Derivative = 2,

};

enum class DriverType : uint32_t  // (5)

{

  Simulation = 0,

  Usb = 1,

  Ethernet = 2

};

enum class AlertRule : uint32_t // (6)

{

  More = 0,

  Less = 1

};

using SensorPointer = std::shared_ptr<ISensor>;  // (7)

using DriverPointer = std::shared_ptr<IDriver>;  // (8)

using SensorValueCallback = std::function<void(SensorNumber, SensorValue)>;               // (9)

using SensorAlertCallback = std::function<CheckAlertTimeout(SensorNumber, SensorValue)>;  // (10)

}; //namespace sensor

В строке 1 объявлен тип для номера датчика, в строке 2 объявлен тип значения, возвращаемого датчиком. В строке 3 объявлен тип значения интервала опроса датчиков для сигнализации пороговых значений.

вернуться

35

Диаграмма классов изображена в формате UML. Читателям, которые не знакомы с указанным графическим языком моделирования, можно порекомендовать книгу «Леоненков А. В. Самоучитель UML 2».