С Stateflow® можно интегрировать пользовательские Коды С в графики. Использование пользовательского кода С в диаграмме Stateflow позволяет вам:
Повторно используйте существующие алгоритмы, которые вы уже закодировали.
Используйте код С для низкоуровневых аппаратных операций, которые может быть трудно реализовать с помощью Stateflow.
Этот пример показывает, как использовать пользовательский код С с Stateflow, чтобы смоделировать систему, которая управляет процентом заряда батареи, также известным как состояние заряда (SOC).
Чтобы открыть модель, в командной строке введите:
openExample('stateflow/BatteryManagementExample')
sf_battery_management
Эта модель представляет несколько компонентов системы управления батареями. Эта система предназначена для реализации на контроллере для устройств с питанием от аккумулятора, таких как транспортное средство с питанием от аккумулятора или камеры телефон. Цель системы управления батареей состоит в том, чтобы ограничить требования к степени батареи и убедиться, что SOC не становится слишком высоким или слишком низким. SOC, который слишком высок или слишком низок, будет вредить здоровью батареи. Кроме того, модель предназначена для ограничения разряда батареи, когда заряд низок в компромиссе эффективности для срока службы батареи.
Модель управления аккумулятором достигает этих целей с тремя различными графиками.
График Sensor Reader w/ Fault Detection
считывает значения датчика из блока батарей и сообщает, когда датчики находятся в неисправном состоянии. График Battery State Estimation
использует показания датчика, чтобы оценить SOC батареи. График Battery Power Limit Control
сохраняет батарею, защищает работоспособность батареи и держит SOC подальше от крайности. График выполняет эти задачи путем установки пределов степени для контроллера.
С помощью этой модели вы можете сгенерировать код и развернуть этот код на встроенном контроллере наряду с другим кодом системы управления, который может понадобиться вашей системе.
При использовании модели для симуляции панель Dashboard позволяет управлять показаниями датчика для входов системы. Если вызовы на тайм-аут монитора аккумулятора, от функции возвращается код ошибки -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 используется для реализации алгоритма отладки. Эта логика упрощает процент SOC в 5 областях значений: MAX, HIGH, NORMAL, LOW и MIN. Эти области значений предотвращают быстрые колебания между различными состояниями управления. Выходные переходы из дочерних состояний переходят к ребру родительского состояния. Когда эти переходы приняты, Stateflow возвращается к переходу по умолчанию родительского состояния.
Проще спроектировать эту логику управления с диаграммой Stateflow, чем реализовать логическое управление через пользовательский код. Этот график реализует предел степени батареи на основе предполагаемого состояния батареи.
График представляет 5 возможных режимов для степени пределов на батарее.
Режим эффективности: Позволять высокую степень, когда заряд батареи высок.
Режим экономии батареи: ограничьте потребляемую степень на батарее для эффективности когда заряд низок.
Off: Не допускайте Power Draw, когда батарея находится в состоянии пределов заряда.
Быстрая зарядка: Быстро зарядите батарею когда заряд низок.
Медленный заряд: Медленно заряжайте батарею, когда заряд высок для пользы для здоровья батареи.
Чтобы проверить, что модель ведет себя должным образом, можно использовать панель инструментальной панели, чтобы симулировать напряжение, ток и показания температуры. Переключатели позволяют вам симулировать ошибку датчика, чтобы протестировать логику обнаружения отказа. Блоки приборной панели манометров и графика связаны с активностью диаграмм stateflow, чтобы визуализировать внутренние состояния и данные. Вы можете перемещать и минимизировать панель инструментальной панели во время навигации по модели. Для получения дополнительной информации о блоках инструментальной панели смотрите Симуляции управления с интерактивными отображениями (Simulink).
входы в состояние Sensor Reader w/ Fault Detection
обеспечиваются двумя файлами кода С: batteryMonitorDriver.h
и batteryMonitorDriver.c
. Эти два файла представляют код драйвера устройства, который будет использоваться для получения данных о датчике из системы, включая напряжение батареи, ток и температуру.
Чтобы использовать эту модель для генерации кода, код драйвера должен взаимодействовать с внешним оборудованием. Чтобы включить эту функциональность, вариант перехода с использованием переменной control CODEGEN_FLAG
позволяет диаграмме Stateflow вызвать код С непосредственно при генерации кода и симулировать значение датчика с шумом. В Model Explorer откройте Рабочее базовое рабочее пространство и установите значение CODEGEN_FLAG равным true
. Для получения дополнительной информации о вариантах Stateflow и переходах вариантов, смотрите Генерация кода с использованием переходов вариантов.
В порядок компиляции сгенерированного кода с кодом драйвера необходимо включить файл заголовка и указать исходный файл в панели Custom Code параметров конфигурации.
[1] Рамадасс, П., Б. Харан, Р. Е. Уайт, и Б. Н. Попов. Математическое моделирование емкости затухания Li-ионных камер. Журнал источников степени. 123 (2003), стр 230–240.
[2] Нин, Г., Б. Харан, и Б. Н. Попов. «Емкость затухания исследования литий-ионных батарей велась циклически при высоких скоростях разрядки». Журнал источников степени. 117 (2003), стр 160–169.