How to use Simulink.B​us.createM​ATLABStruc​t function with Simulink Data Dictionaries

19 Ansichten (letzte 30 Tage)
I have a Simulink Constant Block where the value is
Simulink.Bus.createMATLABStruct('myBus');
in order to create a Simple test-harness.
If the bus-object for 'myBus' is in the base-workspace then it works. However, if the bus-object is defined (solely) in a linked data-dictionary then it does not.

Antworten (4)

Ivan
Ivan am 23 Jan. 2019
Bearbeitet: Ivan am 17 Jan. 2020
you can also try next code:
dd_name=get_param('Model Name','DataDictionary');
scope = Simulink.data.DataDictionary(dd_name);
pStruct=[];
dims=[1,1];
obj='BUS_NAME';
BUS_NAME_MATLABStruct = Simulink.Bus.createMATLABStruct(obj, pStruct, dims, scope);

Robert Simpson
Robert Simpson am 11 Jun. 2018
I also have this issue. Automatically created test harnesses try to set initial condition of ZOH blocks by running Simulink.Bus.createMATLABStruct('.....'); in the mask of the signal spec block. But this fails.

simon pierce
simon pierce am 2 Jul. 2018
I have created the following function as a stopgap.
function myStruct = CreateMatlabStructDD( busName , partialValues )
% this function relies on the bus-object being specified in the simulink
% data dictionary
% get this models data dictionary
dataDictionaryFile = get_param(gcs, 'DataDictionary');
% create a data dictionary object
slddObject = Simulink.data.dictionary.open(dataDictionaryFile);
% get the design data section
section = getSection(slddObject, 'Design Data');
% get the buses
entries = find(section, '-value', '-class', 'Simulink.Bus');
% find the one we want
myBus = find(entries, 'Name', busName);
% turn in ot a cell array
myBusCell = getValue(myBus);
% assign in to the base workspace, with the same name as in the
% data-dictionary
assignin('base', busName, myBusCell);
% create the structure with Mathworks createMATLABStruct function, which is
% possible now that it is in the base workspace
myStruct = Simulink.Bus.createMATLABStruct( busName, partialValues );
end

Sebastian
Sebastian am 10 Okt. 2023
If you have nested buses in your data dictionary it gets even more complicated, because you have to load all referenced buses to the base workspace as well.
Is there an easier way available in the latest releases?

Produkte


Version

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by