diff --git a/simulink/basics.m b/simulink/basics.m new file mode 100644 index 0000000..2ba4627 --- /dev/null +++ b/simulink/basics.m @@ -0,0 +1,70 @@ +clear + +% open a simulink system schema1.slx in a new simulink window +open_system('schema1'); + +% gcs = get current system +% gcs returns the currently open system +assert(isequal(gcs, 'schema1')); + +% gcb = get current block +% if a block is clicked inside the schema, gcb returns its value +gcb; + +% close the open simulink window +close_system('schema1'); + +% load_system loads the simulink system without loading the +% interactive simulation interface +% this is faster +system_name = 'schema1'; +load_system(system_name); + +% simulation is run using the sim function +tic; +sim = sim(system_name); +elapsed = toc; % elapsed simulation time in seconds + +% bdroot gives the root node of the current system (gcs) +assert(isequal(bdroot, 'schema1')); + +% get_param returns the parameter value associated to a block +% a block can be identified by using its path in the simulink scheme +assert(get_param('schema1/my_gain', 'Gain') == '1'); % <-- the property is a string + +% to obtain all parameters +param_struct = get_param('schema1/my_gain', 'ObjectParameters'); +assert(length(fieldnames(param_struct)) == 150); +assert(isequal(param_struct.Name.Type, 'string')); + +% ---- +system2 = 'schema2'; +load_system(system2); + +% the description of a schema can be obtained using find_system +all_paths = find_system; % returns paths to all open systems + +assert(iscell(all_paths)); +assert(length(all_paths) == 14); + +sys1_paths = find_system(system_name); % find paths relative to schema1 +assert(isequal(sys1_paths, ... + {'schema1'; 'schema1/Constant'; 'schema1/Display'; 'schema1/my_gain'})); + +% constraint search parameters +my_gain = find_system(system_name, 'Name', 'my_gain'); +assert(isequal(get_param(my_gain{1}, 'Gain'), '1')); + +% find all blocks of a specific type +all_constants = find_system({system_name, system2}, 'BlockType', 'Constant'); +assert(length(all_constants) == 2); + +% set_param sets the value of a block parameter +set_param('schema1/my_gain', 'Gain', '10'); +assert(isequal(get_param('schema1/my_gain', 'Gain'), '10')); + +set_param('schema1/my_gain', 'Gain', '1'); + +% save system +save_system(system_name); + diff --git a/simulink/schema1.slx b/simulink/schema1.slx new file mode 100644 index 0000000..c3533e3 Binary files /dev/null and b/simulink/schema1.slx differ diff --git a/simulink/schema2.slx b/simulink/schema2.slx new file mode 100644 index 0000000..08da1eb Binary files /dev/null and b/simulink/schema2.slx differ