Import external C types#
The Matlab/Simulink Embedded-Coder generates C-Code from Simulink models. The page Embedded-Coder (C-Code) describes an easy way to get started with the Embedded-Coder on the UltraZohm. In order to streamline the inclusion of generated C-Code from Simulink into the UltraZohm workspace the Matlab function Simulink.importExternalCTypes can be used. This function parses the C (.h) header files for typedef, struct, and enum type definitions, and generates Simulink representations of the types.
How to use#
In your init.m
Matlab script for your Simulink model include the following command.
Simulink.importExternalCTypes('headerfile.h');
Tip
Use a relative path to link back to the ultrazohm_sw
library. This way changes to the C-source-code are reflected in your model.
This will create a bus object in your workspace with the appropriate types (i.e. float -> single). Theses buses can then be used in your Simulink object as normal data type.
Warning
For this to properly work all structs
and enums
, which are used in the Simulink model, have to be typedef
.
Otherwise, Simulink generates bus objects with incompatible names, which, if code generated, are not compatible with the initially included header-file
(i.e. using struct uz_3ph_dq_t
in the header-file leads with code-generation to struct_uz_3ph_dq_t name
instead of struct uz_3ph_dq_t name
. Using typedef
fixes this).
Example#
Include the data types for the dq-transformation.
Simulink.importExternalCTypes('uz_Transformation.h');
In the Simulink workspace the following bus objects will be created:
These buses can be used, e.g., as an output for dq-reference currents.
This output can be directly assigned to other uz_3ph_dq_t
structs or functions, which use this type.
float theta_el_rad = 23.4f;
uz_3ph_dq_t dq_currents = codegenInstance.output.i_dq_ref;
uz_3ph_abc_t abc_currents = uz_transformation_3ph_dq_to_abc(codegenInstance.output.i_dq_ref, theta_el_rad);