Difference between revisions of "Matlab/Simulink files"

From OpenMBD
Jump to: navigation, search
(Created page with "Creating a custom S-function block requires that four files are added to the MatLAB/Simulink project.<br> *'''sfcn_<name>.m''': A function written in MatLAB code describing th...")
 
 
(13 intermediate revisions by the same user not shown)
Line 1: Line 1:
Creating a custom S-function block requires that four files are added to the MatLAB/Simulink project.<br>
+
Creating a custom S-function block requires the addition of four files to the MatLAB/Simulink project.<br>
 
*'''sfcn_<name>.m''': A function written in MatLAB code describing the S-function block's basic characteristics, such as the number of input ports and the umber of dialog parameters.
 
*'''sfcn_<name>.m''': A function written in MatLAB code describing the S-function block's basic characteristics, such as the number of input ports and the umber of dialog parameters.
*'''sfcn_<name>_chk.m''': A function written in MatLAB code for checking prerequisites of using the block, such as that only a single block might be present in the model.
+
*'''sfcn_<name>_chk.m''': A function written in MatLAB code for checking prerequisites and/or dependencies of using the block, such as that only a single block might be present in the model.
*'''sfcn_<name>_mcb.m''': A function written in MatLAB code that is used for setting up the block's customized parameters. This arguments of the function are the actual parameters. The return value is an human readable information string.
+
*'''sfcn_<name>_mcb.m''': A function written in MatLAB code that is used for setting up the block's parameters.
*'''sfcn_<name>.tlc''': A function written in both MatLAB code and C-code, that can be seen as a transfer layer between the block's settings, input ports, output ports and the C-code.
+
*'''sfcn_<name>.tlc''': A function written in both MatLAB code and C-code, that transfers the block's settings, input ports and output ports to the C-code and vice versa.
 +
 
 +
== sfcn_signal_tower.m ==
 +
'''File location: ./blockset/toolbox/STM32/blocks/sfcn_signal_tower.m'''<br>
 +
Each layer of the signal tower requires three input ports: one for each RGB color.<br>
 +
As there are four layers, a total of twelve input ports are created in the setup function.<br>
 +
Notice that the DatatypeID of each port is set to 3, which means that the ports requires data of type uint8_T. The range of a uint8_T variable is 0-255.<br>
 +
<br>
 +
The S-function requires two dialog parameters:
 +
*The sample time
 +
*The selected SPI channel.
 +
This number of dialog parameters is set by the following line of code:<br>
 +
'''block.NumDialogPrms = 2;'''
 +
 
 +
== sfcn_signal_tower_chk.m ==
 +
'''File location: .\blockset\toolbox\STM32\blocks\sfcn_signal_tower_chk.m'''<br>
 +
This function checks if there is more than one signal tower block in the model.<br>
 +
 
 +
== sfcn_signal_tower_mcb.m ==
 +
'''File location: .\blockset\toolbox\STM32\blocks\sfcn_signal_tower_mcb.m'''<br>
 +
<br>
 +
The function sfcn_signal_tower_mcb takes two parameters:
 +
*'''hardwareID''': which in this example project is always equal to the Olimexino STM32
 +
*'''channel''': selected SPI channel
 +
The function returns a human readable string with information about each channel.<br>
 +
Information about the hardwareID is omitted, because this is always the same for this example project.<br>
 +
The value of the variable '''channelStr''' is what will be used in the C-code. The value of channelStr depends on '''channel''', which is selected by the user in the block's dialog.
 +
 
 +
== sfcn_signal_tower.tlc ==
 +
'''File location: .\blockset\toolbox\STM32\blocks\tlc_csfcn_signal_tower.tlc'''<br>
 +
This file is the target language compiler (TLC) file that contains the code generation specifics.<br>
 +
The file starts by including the header file ws2812b.h<br>
 +
Furthermore, two functions are implemented:
 +
*Start<br>
 +
This function is called once when the model starts. In this function the ws2812b_init() function is called for initializing the target hardware.<br>
 +
The channel parameter is read from the block by using the MatLAB macro '''%<block.RTWdata.channel>'''.
 +
*Update
 +
This function is called whenever the block must be updated.<br>
 +
The function reads the value of each of the twelve input ports by using MatLAB macros, such as '''%<LibBlockInputSignal(0, "", "", 0)>'''.<br>
 +
The rest of the function is implemented in C-code. The port values are bit-shifted to the correct positions and finally the ws2812b_write() function is called for assigning the new values to the LEDs.
 +
 
 +
----
 +
Part 1: [[C source code]] - '''Previous''' | '''Next''' - Part 3: [[Creating a block in Simulink]]

Latest revision as of 20:01, 28 February 2019

Creating a custom S-function block requires the addition of four files to the MatLAB/Simulink project.

  • sfcn_<name>.m: A function written in MatLAB code describing the S-function block's basic characteristics, such as the number of input ports and the umber of dialog parameters.
  • sfcn_<name>_chk.m: A function written in MatLAB code for checking prerequisites and/or dependencies of using the block, such as that only a single block might be present in the model.
  • sfcn_<name>_mcb.m: A function written in MatLAB code that is used for setting up the block's parameters.
  • sfcn_<name>.tlc: A function written in both MatLAB code and C-code, that transfers the block's settings, input ports and output ports to the C-code and vice versa.

sfcn_signal_tower.m

File location: ./blockset/toolbox/STM32/blocks/sfcn_signal_tower.m
Each layer of the signal tower requires three input ports: one for each RGB color.
As there are four layers, a total of twelve input ports are created in the setup function.
Notice that the DatatypeID of each port is set to 3, which means that the ports requires data of type uint8_T. The range of a uint8_T variable is 0-255.

The S-function requires two dialog parameters:

  • The sample time
  • The selected SPI channel.

This number of dialog parameters is set by the following line of code:
block.NumDialogPrms = 2;

sfcn_signal_tower_chk.m

File location: .\blockset\toolbox\STM32\blocks\sfcn_signal_tower_chk.m
This function checks if there is more than one signal tower block in the model.

sfcn_signal_tower_mcb.m

File location: .\blockset\toolbox\STM32\blocks\sfcn_signal_tower_mcb.m

The function sfcn_signal_tower_mcb takes two parameters:

  • hardwareID: which in this example project is always equal to the Olimexino STM32
  • channel: selected SPI channel

The function returns a human readable string with information about each channel.
Information about the hardwareID is omitted, because this is always the same for this example project.
The value of the variable channelStr is what will be used in the C-code. The value of channelStr depends on channel, which is selected by the user in the block's dialog.

sfcn_signal_tower.tlc

File location: .\blockset\toolbox\STM32\blocks\tlc_csfcn_signal_tower.tlc
This file is the target language compiler (TLC) file that contains the code generation specifics.
The file starts by including the header file ws2812b.h
Furthermore, two functions are implemented:

  • Start

This function is called once when the model starts. In this function the ws2812b_init() function is called for initializing the target hardware.
The channel parameter is read from the block by using the MatLAB macro %<block.RTWdata.channel>.

  • Update

This function is called whenever the block must be updated.
The function reads the value of each of the twelve input ports by using MatLAB macros, such as %<LibBlockInputSignal(0, "", "", 0)>.
The rest of the function is implemented in C-code. The port values are bit-shifted to the correct positions and finally the ws2812b_write() function is called for assigning the new values to the LEDs.


Part 1: C source code - Previous | Next - Part 3: Creating a block in Simulink