2013-10-04 5 views
0

Я очень новичок в Matlab Simulink, и я пытаюсь реализовать цикл в функциональном блоке Matlab, который продолжается без остановок во время всего моделирования. Вход:Как внедрить синхронизированный цикл в функциональном блоке Matlab

«t» от простых часов, чтобы оно продолжалось до тех пор, пока симуляция не продолжится.

«v» и «i», что дает конкретное значение «p *», немного изменив значение «D», я хочу проверить, больше ли это значение «p *» (в целом модель «v» и «я» под влиянием «D»)

function D = fcn(v,i,t) 
%#codegen 
p1 = v*i; 
D = 0.5; 
D = D + 0.05; 

while t > 0 

p2 = v*i; 

if p1 > p2 
    D = D - 0.05; 

else 
    D = D + 0.05; 

end; 

p1 = p2; 

end; 

Функциональный блок говорит, что это правильно, но, как я начинаю работать, он замерзает. Следующий шаг, который я хотел сделать (но так и не добрался), - это добавить в него небольшой таймер, чтобы выполнить этот цикл, скажем, каждые 0,01 секунды или что-то в этом роде. Является ли это приемлемым с функциональным блоком Matlab или есть ли способ достижения этого?

+0

Нет разрыва, нет T-инкрементации? – Vuwox

+0

Вы считали блок 'If-action subsystem' и блоки« While iterator subystem »? Они очень удобны в использовании. – thewaywewalk

+1

Вы замерзаете, потому что у вас бесконечный цикл. На первом этапе моделирования, когда t> 0, когда этот блок вызывается, он никогда не выйдет из цикла while. –

ответ

0

Возможно, вы захотите сделать if t > 0 вместо while t > 0. У Simulink уже есть таймер, и он будет называть вашу функцию fcn на каждом шаге t. Вы не хотите запускать свой собственный цикл внутри этого.

Смежные вопросы