С Stateflow® можно интегрировать пользовательский код С в графики. Используя пользовательский код С в диаграмме Stateflow позволяет вам:
Существующие алгоритмы повторного использования, которые вы уже закодировали.
Используйте код С для низкоуровневой аппаратной работы, которая может затруднить, чтобы реализовать с помощью Stateflow.
В этом примере показано, как использовать пользовательский код С с помощью Stateflow, чтобы смоделировать систему, которая управляет процентом батареи, также известным как состояние заряда (SOC).
Открыть модель, в типе командной строки:
openExample('stateflow/BatteryManagementExample')
sf_battery_management
Эта модель представляет несколько компонентов системы управления батареи. Эта система спроектирована, чтобы быть реализованной на контроллере для устройств c батарейным питанием, таких как транспортное средство c батарейным питанием или сотовый телефон. Цель системы управления батареи состоит в том, чтобы ограничить потребление энергии на батарее и гарантировать, что SOC не становится слишком высоким или слишком низким. SOC, который слишком высок или слишком низкий, был бы вреден для рабочего состояния батареи. Кроме того, модель спроектирована, чтобы ограничить выброс батареи, когда заряд является низким в компромиссе эффективности в течение времени жизни батареи.
Модель управления батареей достигает этих целей с тремя различными графиками.
Стройте диаграмму Sensor Reader w/ Fault Detection
читает значения датчика из блока батарей и сообщает, когда датчики находятся в неработающем состоянии. Стройте диаграмму Battery State Estimation
использует датчик, читающий, чтобы оценить SOC батареи. Стройте диаграмму Battery Power Limit Control
сохраняет батарею, защищает здоровье батареи и держит SOC отдельно от любого экстремального значения. График выполняет эти задачи путем установления пределов степени для контроллера.
С этой моделью можно сгенерировать код и развернуть тот код во встроенный контроллер наряду с другим кодом системы управления, в котором, возможно, нуждается система.
При использовании модели для симуляции панель Инструментальной панели позволяет вам управлять показаниями датчика для системных входных параметров. Если вызовы тайм-аута монитора батареи, код ошибки-9999 возвращен в функцию.
Два файла кода С включены с Sensor Reader w/ Fault Detection
: batteryMonitorDriver.h
и batteryMonitorDriver.c
. Эти два файла представляют код драйвера устройства, который использовался бы, чтобы получить данные о датчике из системы, включая напряжение батареи, текущее, и температура, и используется для генерации кода. Смотрите Генерацию кода.
Диаграмма Stateflow может также обработать сигналы ошибки, возвращенные датчиками. В случае ошибки датчика, SensorFaultDetection
субдиаграмма содержит последний известный допустимый датчик, читая, пока код ошибки не был получен для определенного количества времени. После того, как этому порогу соответствуют, SensorFaultDetection
отправляет сообщение отказа и принимает, что оно будет обработано другими компонентами элемента управления контроллера.
Для того, чтобы симулировать модель с кодом драйвера, необходимо включать заголовочный файл и задать исходный файл в панели Simulation Target Параметров конфигурации, и опция Import custom code должна быть выбрана. Для получения информации об опции Import custom code см. пользовательский код Импорта (Simulink).
Чтобы оценить состояние заряда батареи, модель использует пользовательский алгоритм кода С. Включенный файл estimateSOC.c
содержит следующий код:
С этим алгоритмом можно легко вызвать функцию кода С, вместо того, чтобы повторно реализовать его с диаграммами Stateflow.
В порядке с учетом чувствительности шума и изменения тока в estimateSOC
алгоритм, логика Stateflow используется, чтобы реализовать debouncing алгоритм. Эта логика упрощает процент SOC в 5 областей значений: MAX, HIGH, NORMAL, LOW и МИН. Эти области значений предотвращают быстрое колебание между различными состояниями управления. Выходные переходы от дочерних состояний переходят к ребру родительского состояния. Когда эти переходы взяты, Stateflow возвращается к переходу по умолчанию родительского состояния.
Легче спроектировать эту управляющую логику с диаграммой Stateflow, вместо того, чтобы реализовать логическое управление через пользовательский код. Этот график реализует предел степени на батарее на основе предполагаемого состояния батареи.
График представляет 5 возможных режимов для пределов степени на батарее.
Режим эффективности: Позвольте мощную ничью, когда заряд батареи будет высок.
Режим Средства сохранения батареи: Ограничьте передаваемую мощность на батарее для КПД, когда заряд будет низким.
Off: не позволяйте Передаваемую мощность, когда батарея будет в пределах состояния заряда.
Быстрый Заряд: Быстро зарядите батарею, когда заряд будет низким.
Медленный Заряд: Медленно заряжайте батарею, когда заряд будет высок для пользы для здоровья батареи.
Чтобы протестировать это, модель ведет себя как ожидалось, можно использовать панель инструментальной панели, чтобы симулировать напряжение, текущие, и температурные показания. Переключатели позволяют вам симулировать ошибку датчика протестировать логику обнаружения отказа. Прибор и блоки инструментальной панели графика обязаны с действием диаграмм Stateflow визуализировать внутренние состояния и данные. Можно переместить и минимизировать панель инструментальной панели при навигации по модели. Для получения дополнительной информации о блоках инструментальной панели смотрите Симуляции Управления с Интерактивными Отображениями (Simulink).
входные параметры в Sensor Reader w/ Fault Detection
состояния предоставлены два файла кода С:
batteryMonitorDriver.h
и batteryMonitorDriver.c
. Эти два файла представляют код драйвера устройства, который использовался бы, чтобы получить данные о датчике из системы, включая напряжение батареи, текущее, и температура.
Чтобы использовать эту модель для генерации кода, код драйвера должен связаться с внешним оборудованием. Добавлять эту функциональность, различный переход с помощью контрольной переменной CODEGEN_FLAG
позволяет диаграмме Stateflow вызывать код С непосредственно при генерации кода и симулировать значение датчика с шумом. В Model Explorer откройте Базовое рабочее пространство и установите значение CODEGEN_FLAG к true
. Для получения дополнительной информации о Вариантах Stateflow и различных переходах, смотрите, что Генерация кода Использует Различные Переходы.
Для того, чтобы скомпилировать сгенерированный код с кодом драйвера, необходимо включать заголовочный файл и задать исходный файл в панели Custom Code Параметров конфигурации.
[1] Ramadass, P., Б. Харан, Р. Э. Вайт и Б. Н. Попов. “Математическое моделирование способности исчезает Литий-ионных ячеек”. Журнал Источников питания. 123 (2003), стр 230–240.
[2] Ning, G., Б. Харан и Б. Н. Попов. “Способность исчезает исследование литий-ионных аккумуляторов, циклически повторенных на высоких уровнях выброса”. Журнал Источников питания. 117 (2003), стр 160–169.