Если я правильно понял ваш вопрос, а входные данные являются переменными времени, вы можете использовать From Workspace
и вызвать ваш скрипт инициализации по InitFcn
в Callbacks
.
при условии, что у вас есть скрипт инициализации с именем init_script
:
, вставленный в InitFcn
this: init_script
;поэтому при запуске Simulink этот сценарий запускается первым.
предположим, что это ваши временные ряды в init_script
:
ts = timeseries(randn(10,2),'Name','TS');
, введите ts в From Workspace
: ![enter image description here](https://i.stack.imgur.com/9E7So.png)
Но если это не вариативные по времени векторы, сделайте то же самое и используйте вместо этого блок constant
, в его поле значения введите имя вектора и снова поместите скрипт, содержащий эти векторы, в InitFcn
в Callbacks
:
X = randi(10,6,1);
Y = randi(10,6,1);
затем выполните необходимые операции: ![enter image description here](https://i.stack.imgur.com/717v3.png)
, поэтому блок To Workspace с именем simout даст вам:
simout.Data(:,:,1)
ans =
14
9
16
16
10
3
и, наконец, если у вас много этих векторов и компонентов, вы можете легко создать их из Matlab Workspace:
my_struct.x = randn(6,1);my_struct.y = randn(6,1);
new_system('myModel')
open_system('myModel')
pos = [10 10 20 30]
for i =1:10
add_block('built-in/Inport',['myModel' '/In1'],'Position',pos);
add_block('built-in/Constant',['myModel' strcat('/Cx', num2str(i))],'Position',pos+2);
add_block('built-in/Constant',['myModel' strcat('/Cy', num2str(i))],'Position',pos+i);
pos = pos + 1;
X_vector = my_st.x
set_param(strcat('myModel/Cx', num2str(i)),'Value', X_vector)
Y_vector = my_st.x
set_param(strcat('myModel/Cy', num2str(i)),'Value', Y_vector)
....
, конечно, это для кода цикла, чтобы дать вамидея, и в действительности будет сложнее, и вы будете знать, как справиться с ней лучше всего.