передача параметров из m-file в файл simulink

Обсуждение вопросов, связанных с Simulink

Модератор: Admin

Nataly2006
Пользователь
Сообщения: 3
Зарегистрирован: Вт ноя 21, 2006 4:02 pm

передача параметров из m-file в файл simulink

Сообщение Nataly2006 » Сб ноя 25, 2006 12:54 pm

Создано меню(с пощью функции menu) в m-файле для ввода параметров, которые должны быть переданы модели simulink.
:?: Подскажите пожалуйста, что нужно прописать в m-файле, чтобы модель, созданная в simulink, открылась, ей были переданы параметры, введенные в m-файле.И при всем при этом, меню не должно закрываться, а должно быть активным, чтобы после моделирования процессов simulink, можно было бы к нему вернуться (например, для изменения параметров).
Заранее СПАСИБО!

DiMarco
Пользователь
Сообщения: 4
Зарегистрирован: Ср ноя 29, 2006 1:56 pm

Re: передача параметров из m-file в файл simulink

Сообщение DiMarco » Ср ноя 29, 2006 2:00 pm

Пожалуйста ответьте :) Меня этот вопрос тоже интересует.

chernykh
Эксперт
Сообщения: 4526
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Сообщение chernykh » Ср ноя 29, 2006 3:27 pm

Для запуска используется команда sim.
Для передачи параметров set_param.
Не знаю только, можно ли приспособить их к меню, созданному командой menu.
Черных И.В.
Уральский федеральный университет им. Б. Н. Ельцина
Приглашаю к сотрудничеству: http://urfu.ru/ru/science/stimul-pablik
Связь через ЛС.

Toff
Эксперт
Сообщения: 250
Зарегистрирован: Пн ноя 06, 2006 12:24 pm

Сообщение Toff » Ср ноя 29, 2006 3:55 pm

Как вариант...

Код: Выделить всё

OUT=true;
while (OUT)
    K = menu('Выберете число','1','2','3','Выход')
    switch K
        case (1)
            open('model.mdl')
            set_param('model/Constant','value','1')
            sim('model.mdl')
        case (2)
            open('model.mdl')
            set_param('model/Constant','value','2')
            sim('model.mdl')
        case (3)
            open('model.mdl')
            set_param('model/Constant','value','3')
            sim('model.mdl')
        case (4)
            OUT=false;
    end
end



Модель с именем "model" имеет блок "Constant" и, к примеру, "Display"

DiMarco
Пользователь
Сообщения: 4
Зарегистрирован: Ср ноя 29, 2006 1:56 pm

Сообщение DiMarco » Ср ноя 29, 2006 8:32 pm

Нашёл как это делается, но появилась, ещё одна загвостка: у меня при каждом цикле должны менятся параметры пид-контроллера, значения которых в m-файле объявлены как переменные. Однако, когда в функцию
set_param я ставлю не цифру, а имя переменной, то вместо её значения передаётся её имя.
Подскажи как осуществить желаемое !

open('mois_kren');
set_param('mois_kren/PID Controller','P','5');
set_param('mois_kren/PID Controller','I','5');
set_param('mois_kren/PID Controller','D','4');
sim('mois_kren');

chernykh
Эксперт
Сообщения: 4526
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Сообщение chernykh » Чт ноя 30, 2006 7:47 am

Зачем тогда вообще использовать set_param ?

http://matlab.exponenta.ru/simulink/book2/1.php
Черных И.В.
Уральский федеральный университет им. Б. Н. Ельцина
Приглашаю к сотрудничеству: http://urfu.ru/ru/science/stimul-pablik
Связь через ЛС.

DiMarco
Пользователь
Сообщения: 4
Зарегистрирован: Ср ноя 29, 2006 1:56 pm

Сообщение DiMarco » Вт дек 19, 2006 5:09 pm

В моём случае в роли блока выступает PID - Controller.
Объявил его параметры как [kp],[ki],[kd].
Но когда я обращаюсь из m-file к схеме:
kp=arg(1);
ki=arg(2);
kd=arg(3);
sim('mois_kren.mdl');
Матлаб информирует об ошибке следующего рода:
??? Error using ==> sim
--> Error in block 'mois_kren/PID Controller': Block parameter 'kp' cannot be evaluated. MATLAB error message: Undefined function or variable 'kp'.
--> Error in block 'mois_kren/PID Controller': Block parameter 'ki' cannot be evaluated. MATLAB error message: Undefined function or variable 'ki'.
--> Error in block 'mois_kren/PID Controller': Block parameter 'kd' cannot be evaluated. MATLAB error message: Undefined function or variable 'kd'.

Параметры пид регулятора kp,ki,kd определены соответствующими
значениями.

Обяъните почему этот механизм передачи параметров не работает. И как
возможно это решить.
Заранее спасибо.

chernykh
Эксперт
Сообщения: 4526
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Сообщение chernykh » Ср дек 20, 2006 8:15 am

В Workspace ki, kp, kd появляются?
Возможно следует использовать команду:
eval('ki = arg(1)');
Черных И.В.
Уральский федеральный университет им. Б. Н. Ельцина
Приглашаю к сотрудничеству: http://urfu.ru/ru/science/stimul-pablik
Связь через ЛС.

DiMarco
Пользователь
Сообщения: 4
Зарегистрирован: Ср ноя 29, 2006 1:56 pm

Сообщение DiMarco » Ср дек 20, 2006 1:52 pm

Речь идёт о следующем:
переменные m-file, которые были пределены как global
не видны в simulink'e.

Если переменные пределять в рабочей области matlab то simulink их определяет.

Немного посвящу Вас в суть системы.
Система состоит из регулятора и объекта управления, по выходу которой определяется перерегулирование и время процесса, по этим двум параметрам вычисляется целевая функция, которую следует минимизировать (функция fminsearch /программа ниже )

Программно это выглядит следующим образом:
mcalc.m
dt11 dt22 dt33 % первое приближения параметров пид-регулятора kp,ki,kd
[x,fval,output]=fminsearch('kre',[dt11 dt22 dt33])% функция поиска опт.параметров

set(dt4,'String',x(1)); %передача параметров в форму interface.m
set(dt5,'String',x(2));
set(dt6,'String',x(3));
kre.m
function d=kre(arg)
global d;
global kp;
global ki;
global kd;
eval('kp = arg(1)')
eval('ki = arg(2)')
eval('kd = arg(3)')
sim('moiskren');
pereg=max(abs(s));% определение перерегулирования
[n,m]=size(s);
for i=1:n
if (s(i)>pereg*0.05)
index=i;
end
end
t=tout(index);% определение времени переходного процесса
d1=exp(-exp(-4.74+0.36*pereg));% Целевая функция 1
d2=exp(-exp(-1.6+0.5261*t)); % Целевая функция 2
d=(d1*d2)^(0.5); %Обобщенная целевая функция
----------------------------------------------------------------
Так вот, функция fminsearch обращается к функции kre, куда передаются dt11 dt22 dt33, которые в последствии должны передаваться в simulink. В этой ситуации, как я уже говорил, эти переменные simulink не видит и выдаёт сообщение об неопределенности параметров пид - регулятора.
Если вы предложите альтернативу, буду рад.

chernykh
Эксперт
Сообщения: 4526
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Сообщение chernykh » Ср дек 20, 2006 2:13 pm

1. Глобальные переменные должны быть определены в каждом модуле, где они используются + в Workspase.

2. Форма использует собственную рабочую область, поэтому переменные могут быть не доступны в Workspace. Можно попробовать:
evalin('base','kp = arg(1)');
evalin('base','ki = arg(2)');
evalin('base','kd = arg(3)');

3. Используйте set_param для изменения параметров.
Черных И.В.
Уральский федеральный университет им. Б. Н. Ельцина
Приглашаю к сотрудничеству: http://urfu.ru/ru/science/stimul-pablik
Связь через ЛС.

Nikol93
Пользователь
Сообщения: 3
Зарегистрирован: Вс июн 29, 2014 2:24 pm

Re:

Сообщение Nikol93 » Вс июн 29, 2014 2:52 pm

Уважаемы Илья Викторович ! У вас есть труды: Моделирование электротехнических устройств в Matlab, SimPowerSystems и Simulink(2008), Simulink - среда создания инженерных приложений(2004). На каких страницах написано про передачу параметров из m-file в файл simulink ?

chernykh
Эксперт
Сообщения: 4526
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Re: передача параметров из m-file в файл simulink

Сообщение chernykh » Вс июн 29, 2014 4:42 pm

Simulink - среда создания инженерных приложений(2004)

стр. 336, 337
стр. 474-476
Черных И.В.
Уральский федеральный университет им. Б. Н. Ельцина
Приглашаю к сотрудничеству: http://urfu.ru/ru/science/stimul-pablik
Связь через ЛС.

Nikol93
Пользователь
Сообщения: 3
Зарегистрирован: Вс июн 29, 2014 2:24 pm

Re: передача параметров из m-file в файл simulink

Сообщение Nikol93 » Вс июн 29, 2014 8:05 pm

Спасибо Большое !)