Error Simscape Number of variables exceeds number of equations : fault_dete​ction_and_​control_sy​stem/Volta​ge Sensor

6 views (last 30 days)
Hi All,
I have 2 matlab equation. I want to monitor the conversion of voltage from AC to DC. Added the Simulink Model.
Funtion 1:
function switch_inputs = mpc_voltage_control(V_ref, V_in, V_out, Np)
% Inputs:
% V_ref - Reference voltage (400 kV)
% V_in - Measured input voltages [V_a, V_b, V_c]
% V_out - Measured output voltage
% Np - Prediction horizon (number of future steps)
% Outputs:
% switch_inputs - Input to the switching control function [S1, S2, S3, S4, S5, S6]
% Define system parameters
num_switches = 6; % Number of switches (IGBTs)
% Initialize switch inputs (control commands)
switch_inputs = zeros(1, num_switches);
% Define cost function variables
min_cost = inf; % Initialize minimum cost to a large value
optimal_switch_inputs = switch_inputs; % Initialize optimal switches
% Define possible switch combinations (6 IGBTs: S1, S2, S3, S4, S5, S6)
possible_switch_states = dec2bin(0:(2^num_switches-1), num_switches) - '0';
% Loop over all possible switching combinations
for i = 1:size(possible_switch_states, 1)
% Get current switch combination
current_switch_states = possible_switch_states(i, :);
% Predict future output voltage based on switch states and measured inputs
V_out_pred = predict_future_voltage(current_switch_states, V_in, V_out, Np);
% Compute cost function: (V_ref - V_out_pred)^2
voltage_error = (V_ref - V_out_pred)^2;
% Total cost for current switch combination
total_cost = voltage_error;
% Find minimum cost and update optimal switch states
if total_cost < min_cost
min_cost = total_cost;
optimal_switch_inputs = current_switch_states;
end
end
% Return the optimal switching inputs to control the IGBTs
switch_inputs = optimal_switch_inputs;
end
function [V_out_pred] = predict_future_voltage(switch_states, V_in, V_out, Np)
% Inputs:
% switch_states - Current states of the 6 IGBT switches
% V_in - Measured input voltages [V_a, V_b, V_c]
% V_out - Measured output DC voltage
% Np - Prediction horizon
% Extract input voltages
V_a = V_in(1);
V_b = V_in(2);
V_c = V_in(3);
% Initialize predicted output voltage
V_out_pred = V_out; % Start with the current output voltage
% Future voltage prediction logic based on switches
for k = 1:Np
if switch_states(1) == 1 && switch_states(2) == 1
V_out_pred = V_a;
elseif switch_states(3) == 1 && switch_states(4) == 1
V_out_pred = V_b;
elseif switch_states(5) == 1 && switch_states(6) == 1
V_out_pred = V_c;
end
end
end
Funtion 2:
function [S1, S2, S3, S4, S5, S6] = switch_control_function(V_in, V_out, V_ref, switch_inputs)
% Inputs:
% V_in - Measured input voltages [V_a, V_b, V_c]
% V_out - Measured output voltage
% V_ref - Reference voltage
% switch_inputs - Input from MPC indicating the optimal switch states
% Outputs:
% S1, S2, S3, S4, S5, S6 - Switching signals for the 6 IGBTs
% Extract input voltages
V_a = V_in(1);
V_b = V_in(2);
V_c = V_in(3);
% Initialize switch states
S1 = switch_inputs(1);
S2 = switch_inputs(2);
S3 = switch_inputs(3);
S4 = switch_inputs(4);
S5 = switch_inputs(5);
S6 = switch_inputs(6);
% Apply switching logic based on voltage conditions
if V_a == 0
% If phase A voltage is zero, turn off S1, S2 and increase switching speeds of others
S1 = 0;
S2 = 0;
S3 = adjust_switch_speed(V_out, V_ref);
S4 = adjust_switch_speed(V_out, V_ref);
S5 = adjust_switch_speed(V_out, V_ref);
S6 = adjust_switch_speed(V_out, V_ref);
elseif V_b == 0
% If phase B voltage is zero, turn off S3, S4 and increase switching speeds of others
S3 = 0;
S4 = 0;
S1 = adjust_switch_speed(V_out, V_ref);
S2 = adjust_switch_speed(V_out, V_ref);
S5 = adjust_switch_speed(V_out, V_ref);
S6 = adjust_switch_speed(V_out, V_ref);
elseif V_c == 0
% If phase C voltage is zero, turn off S5, S6 and increase switching speeds of others
S5 = 0;
S6 = 0;
S1 = adjust_switch_speed(V_out, V_ref);
S2 = adjust_switch_speed(V_out, V_ref);
S3 = adjust_switch_speed(V_out, V_ref);
S4 = adjust_switch_speed(V_out, V_ref);
end
end
% Helper function to adjust the switching speed of IGBTs
function [adjusted_speed] = adjust_switch_speed(V_out, V_ref)
% If output voltage is below reference, increase the switching speed
if V_out < V_ref
adjusted_speed = 1; % Full speed
else
adjusted_speed = 0; % Turn off
end
end
The issue is when I try to run and compile, these error came up.
Error compiling Simscape network for model fault_detection_and_control_system.
Caused by:
Component:Simulink | Category:Model error
After Vinay suggestion to add electrical reference at the voltage sensors, the slx model now can compile. However, after I pressed RUN.
New error popped up. Please refer to the error below.
Array element 2 is out-of-bounds. Modify the index expression to access elements in the range 1-1. More informationFunction 'MATLAB Function1' (#24.456.457), line 13, column 16: "2" Launch diagnostic report.
Component:MATLAB Function | Category:Coder error
Array element 3 is out-of-bounds. Modify the index expression to access elements in the range 1-1. More informationFunction 'MATLAB Function1' (#24.475.476), line 14, column 16: "3" Launch diagnostic report.
Component:MATLAB Function | Category:Coder error
Component:MATLAB Function | Category:Coder error
Simulink unable to determine sizes and/or types of the outputs for block 'fault_detection_and_control_system/MATLAB Function1' due to errors in the block body, or limitations of the underlying analysis. The errors might be inaccurate. Fix the indicated errors, or explicitly specify sizes and/or types for all block outputs.
Component:MATLAB Function | Category:Coder error
Simulink unable to determine sizes and/or types of the outputs for block 'fault_detection_and_control_system/MATLAB Function1' due to errors in the block body, or limitations of the underlying analysis. The errors might be inaccurate. Fix the indicated errors, or explicitly specify sizes and/or types for all block outputs.
Component:Simulink | Category:Model error
Error in port widths or dimensions. 'Output Port 1' of 'fault_detection_and_control_system/MATLAB Function1/switch_inputs' is a [1x6] matrix.
Component:Simulink | Category:Model error
Please help.
Thank you in advace.
  3 Comments
Swastik Sarkar
Swastik Sarkar on 15 Oct 2024
Hi @Ahmad,
Could the SLX file be attached to this question? It would help others in the community provide better assistance.

Sign in to comment.

Accepted Answer

Vinay
Vinay on 16 Oct 2024
Hi Ahmad,
The voltage sensor block is designed to measure the voltage between two points in an electrical circuit. However, in the Simulink model, the ‘electrical reference’ is not connected to the ‘Voltage sensor’ blocks, which is causing an error. To resolve this issue, connect the Simscape ‘electrical reference’ to the ‘Voltage sensor’ block.
Kindly refer to the below documentation of ‘Voltage sensor’ for more details:
  1 Comment
Ahmad
Ahmad on 17 Oct 2024
Hi Vinay,
Thank you for the suggestions. It worked after I add the electrical reference. Now after I pressed RUN, new error popped up.
Array element 2 is out-of-bounds. Modify the index expression to access elements in the range 1-1. More informationFunction 'MATLAB Function1' (#24.456.457), line 13, column 16: "2" Launch diagnostic report.
Component:MATLAB Function | Category:Coder error
Array element 3 is out-of-bounds. Modify the index expression to access elements in the range 1-1. More informationFunction 'MATLAB Function1' (#24.475.476), line 14, column 16: "3" Launch diagnostic report.
Component:MATLAB Function | Category:Coder error
Component:MATLAB Function | Category:Coder error
Simulink unable to determine sizes and/or types of the outputs for block 'fault_detection_and_control_system/MATLAB Function1' due to errors in the block body, or limitations of the underlying analysis. The errors might be inaccurate. Fix the indicated errors, or explicitly specify sizes and/or types for all block outputs.
Component:MATLAB Function | Category:Coder error
Simulink unable to determine sizes and/or types of the outputs for block 'fault_detection_and_control_system/MATLAB Function1' due to errors in the block body, or limitations of the underlying analysis. The errors might be inaccurate. Fix the indicated errors, or explicitly specify sizes and/or types for all block outputs.
Component:Simulink | Category:Model error
Error in port widths or dimensions. 'Output Port 1' of 'fault_detection_and_control_system/MATLAB Function1/switch_inputs' is a [1x6] matrix.
Component:Simulink | Category:Model error
It would be great if you can have a look at this also.
Thank you in advance.

Sign in to comment.

More Answers (0)

Communities

More Answers in the  Power Electronics Control

Categories

Find more on Electrical Sensors in Help Center and File Exchange

Products


Release

R2024b

Community Treasure Hunt

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

Start Hunting!