Create a function block at the command line

8 visualizzazioni (ultimi 30 giorni)
Hello, I want to create a function block at the command line which applies a specified mathematical expression to its input. That is, I want to make the same Fcn block in simulink but this time at the command line, would you kindly help me? Thanks

Risposta accettata

Umar
Umar il 7 Set 2024
Modificato: Umar il 7 Set 2024

Hi @Hisham Hussein ,

To address your query regarding, “I want to create a function block at the command line which applies a specified mathematical expression to its input. That is, I want to make the same Fcn block in simulink but this time at the command line, would you kindly help me? “

Please see my response to your comments below.

The provided code snippet accomplishes the task of creating a function block in Simulink through the command line. Here’s a step by step approach:

Step#1: Define Your Mathematical Expression

expression = 'u^2 + 3*u + 5'; % Example expression


This line sets the mathematical expression that the function block will apply to its input. You can modify this string to any valid MATLAB expression.

Step#2: Create a New Simulink Model



modelName = 'FunctionBlockModel';
new_system(modelName);
open_system(modelName);

Step#3: Add a Fcn Block


Create a new Simulink model named FunctionBlockModel and open it for editing.


 fcnBlock = [modelName '/FcnBlock'];

Now, add a Fcn block to the model and identify by the path FcnBlock within the model.

add_block('simulink/User-Defined Functions/Fcn', fcnBlock);

 

For more information on “add_block”, please refer to

https://www.mathworks.com/help/simulink/slref/add_block.html?s_tid=doc_ta

Step#4: Set the Expression for the Fcn Block 



set_param(fcnBlock, 'Fcn', expression);


The set_param function is being used to assign the previously defined mathematical expression to the Fcn block. For more information on “set_param”, please refer to:

https://www.mathworks.com/help/simulink/slref/set_param.html?s_tid=doc_ta

Step#5: Add Input and Output Ports 



add_block('simulink/Commonly Used Blocks/In1', [modelName 
'/Input']);
add_block('simulink/Commonly Used Blocks/Out1', [modelName 
'/Output']);

Now, input and output ports are added to the model, allowing for data to flow into and out of the function block. For more information on “add_block”, please refer to:

https://www.mathworks.com/help/simulink/slref/add_block.html

Step#6: Connect the Blocks 



add_line(modelName, 'Input/1', 'FcnBlock/1');
add_line(modelName, 'FcnBlock/1', 'Output/1');


This part will connect the input port to the Fcn block and the Fcn block to the output port, establishing the data flow. For more information on “add_line”, please refer to

https://www.mathworks.com/help/simulink/slref/add_line.html?s_tid=doc_ta

Step#7: Save the Model 



save_system(modelName)



Finally, the model is saved to make sure that all changes are retained.By executing this code in the MATLAB command window, you will create a Simulink model that includes a function block capable of applying a specified mathematical expression to its input, all without the need for manual drag-and-drop operations in the Simulink interface. For more information on “save_system”, please refer to

https://www.mathworks.com/help/simulink/slref/save_system.html?s_tid=doc_ta

Please let me know if following above mentioned steps resolved your problem. Also, let me know if you have any further questions.

  3 Commenti
Umar
Umar il 8 Set 2024

Hi @Hisham Hussein ,

To address your query regarding, “Actually, I want to create my whole system model and work only in the command line. I don’t want to work in Simulink at all. The who system model is a 2 input, 1 output system. The plant model looks as in the following: sqrt(u2/u1), Where u1 is the first input/output TF, u2 is the measured disturbance from the 2nd input/output TF. My problem is that I don’t know how to express the plant model in the command line ( I need to run my simulation only in the command line and No simulink). I have attached the system model how it looks”

Please see my response to your comments below.

To model the described system labeled as “IMG_1602.jpeg” shared by you in MATLAB's command line, you will need to define the various components using MATLAB's built-in functions for control systems and signal processing. Below is a step-by-step breakdown of how to express your system model:

Define the Transfer Functions

First, you need to represent the first and second-order transfer functions as well as the PID controller. Here is how you can define them in MATLAB:

   s = tf('s'); % Define s as a transfer function variable
   tau1 = 1; % Example time constant for G1
   G1 = 1 / (tau1 * s + 1); % First-order transfer function
   omega_n = 1; % Natural frequency for G2
   zeta = 0.5; % Damping ratio
   G2 = (omega_n^2) / (s^2 + 2*zeta*omega_n*s + omega_n^2); % 
   Second-order transfer function
   Kp = 1; Ki = 1; Kd = 1; % PID gains
   PID = Kp + Ki/s + Kd*s; % PID controller

Summation and Feedback Implementation

Then, you can implement the summation block and feedback connections using MATLAB functions. For instance, you may use the feedback function to incorporate the feedback from the manipulated variable u1 into the summation.

     % Define the sum block (assuming subtraction for feedback)
     feedback_signal = feedback(G1 * PID, 1); % Feedback loop

For more information on “feedback” function, please refer to

https://www.mathworks.com/help/control/ref/inputoutputmodel.feedback.html?s_tid=doc_ta

Plant Model Definition

The plant model can be implemented using a function that calculates the square root of the ratio of outputs from the two transfer functions. Here’s how you might express this:

     % Define u1 as the output from G1 and u2 as the output from G2
     u1 = G1 * PID; % Output from the first input
     u2 = G2; % Output from the second input
     % Implement the plant model
     plant_model = @(u1, u2) sqrt(u2 / u1);

Simulation Setup

Use a time vector and simulate the step response using the lsim function, which allows you to simulate the system's response to various inputs over time.

   t = 0:0.01:10; % Time vector
   step_input = ones(size(t)); % Step input for the simulation
   % Simulate the system response
   [y, t] = lsim(feedback_signal, step_input, t); % Response to 
   step input

For more information on “lsim” function, please refer to

https://www.mathworks.com/help/control/ref/dynamicsystem.lsim.html?s_tid=doc_ta

Visualize the Output

Finally, you can plot the output to analyze the system's response.

   figure;
   plot(t, y);
   title('System Response');
   xlabel('Time (seconds)');
   ylabel('Output y');
   grid on;

Please see attached.

After simulating the system, you might want to tune the PID parameters for optimal performance, which can be done using various techniques, including Ziegler-Nichols or software tools like pidTuner. I would advise to validate your model against known responses or benchmarks to ensure accuracy. By following this structured approach, you can successfully model and simulate your control system entirely through the MATLAB command line, achieving the desired functionality without relying on Simulink.

Please let me know if following above mentioned steps resolved your problem.

Hisham Hussein
Hisham Hussein il 9 Set 2024
Thank you Umar, You helped me a lot. I am currently working on modifying the script for my final model adjustments and modifications. I will definitely share it with you and the rest of our colleagues, for your valuable recommendations and suggestions. Deep respect
Hisham

Accedi per commentare.

Più risposte (1)

Amith
Amith il 7 Set 2024
Hi Hisham,
To create a function block using your command line, you can utilize the 'add_block' function provided by MATLAB.
To create a MATLAB Function block on to a Simulink file named FileName.slx you can use the below example:
add_block('simulink/User-Defined Functions/MATLAB Function', 'FileName/myFunc')
Here 'myFunc' is the name of the MATLAB Function block.
To further configure the MATLAB Function block programmatically you can refer to the below documentation provided by MathWorks.
Hope this helps!

Community Treasure Hunt

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

Start Hunting!

Translated by