필터 지우기
필터 지우기

Triggering functions in Event Actions @ SimEvents

조회 수: 2 (최근 30일)
PersistentNoob
PersistentNoob 2024년 3월 2일
답변: Divyanshu 2024년 4월 2일
Consider functions that take/give Tables as input/output like e.g:
function [ScaledTable] = ScaleMyTable(Table, Multiplier)
ScaledTable = Table.*Multiplier;
end
%
function [Table] = ClearTableColumn(ScaledTable, Column)
Table = RefTable(:,Column) = [];
end
I have a server in a SimEvents model. I would like to use Event Actions to call custom functions that operate on tables by using entities attributes, and operate on enties attributes by using values from tables. For example:
%% Entry Action:
ScaledTable = ScaleMyTable(Table, entity.Attribute1);
entity.Attribute3 = max(ScaledTable(:, entity.Attribute2));
Table = ClearTableColumn(ScaledTable, entity.Attribute4)
The simulation won't run because apparently some MATLAB workspace-defined classes like tables, structs etc. are not supported in Event Actions, and I don't understand how to circumvent the problem. I have tried using a MATLAB function block connected to "From Workspace/To Workspace" blocks and trigger that function from Event Actions, but the error message is the same.
"Error in [...] block. See Entry action line [...].
Caused by: Data type of parameter [...] is not supported in event actions [...]."
Further down the line there are gates controlled by signals; these signals are obtained by "From Workspace" blocks which reference columns of these tables, converted to timeseries. So, my goal(s) are something like:
  • Use an Event Action to trigger a function that receives a Table as an input and give a Table as an output
  • Do something with a Table (like assign a certain table entry to an entity's attribute)
  • Making sure that the Table is updated at runtime so that the timeseries that control the entity gates further down the line are updated as well
What am I missing here? Is this just a flawed design, and do I have to tackle the problem another way? Thanks.

답변 (1개)

Divyanshu
Divyanshu 2024년 4월 2일
Hi PersistentNoob,
I have created a sample model using SimEvents Blocks. I have created a sample MATLAB function 'scaled_value' which is triggered from Event Actions of an Entity Server Block used in the Model. The model simulates without any error.
Here is the code for function 'scaled_value':
function [result] = scaled_value(val,tb)
for i=1:5
tb{i,1} = tb{i,1}*val;
end
res = max(tb{:,1});
result = res;
end
Below is the piece of code written for Event Actions in 'Entity Server' Block:
d = [1;2;3;4;5];
Vnames = {'data'};
t = table(d,'VariableNames',Vnames);
entity.CurrentGasLevel = scaled_value(entity.CurrentGasLevel,t);
I followed the following example to create sample model and made customizations as per the description provided:
Hope it helps!

카테고리

Help CenterFile Exchange에서 Discrete-Event Simulation에 대해 자세히 알아보기

제품


릴리스

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by