реверсивный счетчик

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

Модератор: Admin

Tue
Пользователь
Сообщения: 60
Зарегистрирован: Пн сен 05, 2005 11:14 am

реверсивный счетчик

Сообщение Tue » Пт мар 10, 2006 9:54 am

В Simulink'е нашел пока только обычные счетчики, направление счета которых можно менять, но только остановив симуляцию. Мне же нужен действительно реверсивный счетчик, чтобы направление счета изменялось во время симуляции в зависимости от управляющих воздействий. Даже если такого нет, есть ли возможность построить такой счетчик на базе уже имеющихся (чтобы не создавать все с нуля, с триггеров) ?

P.S. я в Simulink'е новичок.

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

Сообщение chernykh » Пт мар 10, 2006 10:25 am

Параметры блоков Simulink можно изменять в процессе расчета. См. функцию set_param. + Пособие + Поиск.

Черных И.В.

Tue
Пользователь
Сообщения: 60
Зарегистрирован: Пн сен 05, 2005 11:14 am

Сообщение Tue » Сб мар 11, 2006 10:29 pm

спасибо за ответы, попробую.

Tue
Пользователь
Сообщения: 60
Зарегистрирован: Пн сен 05, 2005 11:14 am

Сообщение Tue » Пн мар 13, 2006 4:24 pm

Пробую с использованием функции set_param. Скачал с сайта пример использования этой функции, переделал под свои нужды.
Выглядит так:
Для изменения направление счета вниз:
set_param('revers_counter1/Counter', 'Direction', 'Down')
Для изменения направление счета вверх:
set_param('revers_counter1/Counter', 'Direction', 'Up')
Но! Изменение направления счета счетчика во время симуляции изменяется, но по двойному щелчку на субсистему, в поле "Open function" которой стоит соотвтетствуюшая set_param. Не могу сообразить как сделать так, чтобы происходило примерно следующим образом:
если приходит "1", то считать вверх, приходит "0" - считает вниз (без вмешательства двойного щелчка мышью)

Voldemar
Пользователь
Сообщения: 51
Зарегистрирован: Ср дек 01, 2004 6:00 pm

Сообщение Voldemar » Пн мар 13, 2006 8:44 pm

Tue писал(а):Пробую с использованием функции set_param. Скачал с сайта пример использования этой функции, переделал под свои нужды.
Выглядит так:
Для изменения направление счета вниз:
set_param('revers_counter1/Counter', 'Direction', 'Down')
Для изменения направление счета вверх:
set_param('revers_counter1/Counter', 'Direction', 'Up')
Но! Изменение направления счета счетчика во время симуляции изменяется, но по двойному щелчку на субсистему, в поле "Open function" которой стоит соотвтетствуюшая set_param. Не могу сообразить как сделать так, чтобы происходило примерно следующим образом:
если приходит "1", то считать вверх, приходит "0" - считает вниз (без вмешательства двойного щелчка мышью)


Zdravstvujte
Mozet pomozet pomeshenija s-funkcii v Enabled Subsystem, libo mozet daze lu4she ispol'zovat'
http://matlab.exponenta.ru/simulink/book1/9_9.php#9_9_6
С ув. Владимир

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

Сообщение chernykh » Вт мар 14, 2006 9:38 am

1. Пишете m-функцию:

function fcn(u)
if u <= 0.5
set_param('My_model/Counter','Direction','Down');
else
set_param('My_model/Counter','Direction','Up');
end
2. В блоке MATLAB Fcn указываете имя этой функции.
3. (Не обязательно, но работать будет быстрее). Поместить MATLAB Fcn в Triggered Subsystem, trigger type задать either. Установить галку Show output port. Выходной сигнал триггера - на вход MATLAB Fcn.

Черных И.В.

Tue
Пользователь
Сообщения: 60
Зарегистрирован: Пн сен 05, 2005 11:14 am

Сообщение Tue » Чт мар 16, 2006 10:53 am

chernykh, спасибо вам за помощь. Пробую сделать так как вы советуете, но что-то не получается. Сделал все как вы объяснили и по подобию примера для MATLAB Fcn (http://matlab.exponenta.ru/simulink/book1/9_8.php#9_8_2). При запуске симуляции пишет:
Error evaluating MATLAB function in block 'revers_counter1/MATLAB Fcn'. MATLAB error message:
Error using ==> myfunc
Too many output arguments

Код функции выглядит букавльно след. образом:

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

function myfunc(u)
if u <= 0.5
set_param('revers_counter1/Counter', 'Direction', 'Down');
else
set_param('revers_counter1/Counter', 'Direction', 'Up');
end

Все вроде проще простого, но в чем загвоздка - не пойму.

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

Сообщение chernykh » Чт мар 16, 2006 12:08 pm

Output dimensions в MATLAB Fcn нужно поставить 0 (ноль).
Функция же ничего не вычисляет!

Черных И.В.

Tue
Пользователь
Сообщения: 60
Зарегистрирован: Пн сен 05, 2005 11:14 am

Сообщение Tue » Чт мар 16, 2006 3:35 pm

chernykh, огромное вам спасибо!