implement the C program to the Simulink model

1 view (last 30 days)
Besme James
Besme James on 31 Mar 2022
Edited: Rishav on 4 Oct 2023
Hi,
I need to implement the below C program to the my Simulink model.
values :
A IS "D DYNAMICALLY ALLOCATED MATRIX"
A_row and R is some variables.
How can I Implement it in Simulink using c caller or with s function ? How can I input A values?I tried Using c caller and also with s function. But as I have a 2d matrix inside my struct, it is unable to implement so.
Can somebody help me?
Thanks in advance.
Regards,
Besme.
************************************My program starts here *********************************************************************
Header file as follows
struct ss_matrix // Initialize Structure for Inputs and outputs of StateSpace Equation
{
int A_row;
float **A;
float R;
};
Src file as follows;
struct ss_matrix ss_dyn_mem(struct ss_matrix dyn_mem_var)
{
dyn_mem_var.A =(float**) malloc(dyn_mem_var.A_row*sizeof(float*));
for (i = 0; i < dyn_mem_var.A_row; i++)
dyn_mem_var.A[i] =(float*) malloc(dyn_mem_var.A_row*sizeof(float));
}
struct ss_matrix ss_library(struct ss_matrix library_var)
{
library_var.A_row =library_var.R *library_var.A_row;
}
****++++++++++++++My program end here************************************************

Answers (1)

Rishav
Rishav on 4 Oct 2023
Edited: Rishav on 4 Oct 2023
Hi Besme,
I understand that you are trying to implement a C program by using s-function in Simulink.
Here are the steps for the same:
1. Create a New Simulink model.
2. In your Simulink model, add an S-Function block. You can find this block under the "User-Defined Functions" section in the Simulink library browser.
3. Configure the S-Function Block:
  • Double-click the S-Function block to open its properties.
  • In the "S-Function Name" field, provide a unique name for your S-Function. This name will be used for the generated C code.
  • In the "Parameters" tab, specify any input parameters you want to pass to the S-Function, such as A_row and R.
#include "simstruc.h"
struct ss_matrix {
int A_row;
float **A;
float R;
};
void ss_dyn_mem(struct ss_matrix *dyn_mem_var) {
dyn_mem_var->A = (float**)malloc(dyn_mem_var->A_row * sizeof(float*));
for (int i = 0; i < dyn_mem_var->A_row; i++) {
dyn_mem_var->A[i] = (float*)malloc(dyn_mem_var->A_row * sizeof(float));
}
}
void ss_library(struct ss_matrix *library_var) {
library_var->A_row = library_var->R * library_var->A_row;
}
5. After writing the C code, save the S-Function and compile it by clicking the "Build" button in the S-Function block dialog.
6. Connect the input and output signals to the S-Function block as needed for your model.
7. Now, you can simulate your Simulink model with the custom S-Function block. Make sure to provide appropriate input values for A_row and R in your Simulink model.
Thank you,
Rishav Saha

Categories

Find more on Simulink Functions in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!