Azzera filtri
Azzera filtri

Custom object class array initilization within Simulink Matlab Function Block

4 visualizzazioni (ultimi 30 giorni)
The summary of my question is I need know how to preallocate an array of custom objects in a way that is compatible with Simulink when using the Matlab Function block in Simulink.
Details: I am attempting to port over some code I have written in Matlab to run as a function in Simulink using the "Matlab Function" block. I have created a custom class called "pulse." (minimal example at the bottom of this question). I want to be able to initialize an array of these pulse objects. My Matlab code works fine now with the call:
pulse_array(1:2,1:4) = pulse;
This creates a 2x4 array of pulse objects as expected. The problem I am having is when I use my code within Simulink. When I try to run this same line within the Simulink Matlab Function block I get the error:
Undefined function or variable 'pulse_array'. The first assignment to a local variable determines its class.
It looks to me like the coder doesn't know that pulse_array should be a pulse object. To try to fix this, I tried to intialize pulse_array as a pulse object and then expand the array with for loops:
pulse_array = pulse;
for i = 1:2
for j = 1:4
pulse_array(i,j) = pulse;
Simulink didn't like that either, as the loop trys to specify pulse_array(1,2) when it believed the size of pulse_array is 1x1 (I get size mismatch errors, which isn't totally unexpected). I understand this, as coder needs to know the size of the array.....this is why I tried the initial call of pulse_array(1:2,1:4) = pulse.
Any help would be....extremely helpful. Thanks
classdef pulse
A %Amplitude
function obj = pulse(A)
if nargin>0 %Allows for array construction
obj.A = A;

Risposta accettata

Uday Pradhan
Uday Pradhan il 5 Mag 2021
Hi Michael,
According to the documentation for MATLAB Classes for Code generation, creation of arrays of objects is not supported yet. As a workaround, you could define a cell - array to store the objects, as such:
pulse_array = cell(2,4);
for idx = 1 : 8
pulse_array{idx} = pulse;
pulse_array =
2×4 cell array
{1×1 pulse} {1×1 pulse} {1×1 pulse} {1×1 pulse}
{1×1 pulse} {1×1 pulse} {1×1 pulse} {1×1 pulse}
  1 Commento
Michael il 5 Mag 2021
Modificato: Michael il 5 Mag 2021
Thanks. This seems like a work around that might meet my needs but it makes sorting based on the object properties a bit of a challenge. Do you know if system objects face a similar limitation, as I am beginning to explore coverting some of my custom classes to system objects for stream processing.

Accedi per commentare.

Più risposte (0)


Scopri di più su Simulink Functions in Help Center e File Exchange



Community Treasure Hunt

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

Start Hunting!

Translated by