ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 июля
529480
VVB (11.07.2014 07:38, просмотров: 4608)
Подскажите по программированию, я пока что учусь программировать. Дано: аппарат ИВЛ. Там есть контроллер ИВЛ, в котором есть АЦП, CAN. Требуется: реализовать режимы ИВЛ. Их может быть десяток. Последовательность обработки данных следующая. Принимаемая по CAN информация и коды АЦП после расчётов преобразуются в конкретные физические величины (давление в точке1..5, фильтрованное давление с разными полосами среза, потоки, фильтрованные и нефильтрованные, рассчитанные физические параметры лёгких). Классу, реализующему конкретный режим ИВЛ, требуется часть этих данных (другому режиму может потребоваться другая часть данных). После запуска итерации расчёта результат формируется в виде управляющих воздействий на исполнительные механизмы. Хочу отказаться от глобальных переменных и вынести функциональность режима ИВЛ в один модуль (полностью разорвав его связи с другими модулями, для облегчения тестирования). Единственный вариант в моей голове -- сделать конструктор режима ИВЛ, в котором передавать указатели на несколько десятков используемых данным режимом переменных. Вроде бы всё хорошо: перед глазами (в конструкторе) все используемые величины, можно определить, какая величина является входной (с префиксом const), а какая выходной (без const). Но что-то меня смущает: огромный список при создании экземпляра данного класса (из 30 величин), отсюда необходимость иметь эти самые 30 величин в виде объектов в области видимости функции, создающей экземпляр класса "режим ИВЛ". Что приводит к чрезвычайно разлапистому коду, растяжении функции на много строк, потери лёгкости восприятия информации. А ведь будет ещё десяток режимов... Какие архитектурные решения возможны? Используется С++, если кто ещё не понял. В любом случае описанный мною вариант лучше чем множество глобальных переменных и наличие зависимостей от них в реализации режима ИВЛ, потому как вся логика управления инкапсулируется в один класс.