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);