2016-10-26 5 views
0

Описание проблемы:MATLAB/Simulink: Моделирование управления двигателем клапана

Я хочу, чтобы имитировать управление двигателем клапана (MCV) с Matlab/Simulink. Контрольный-Сингаль (красный) управляет MCV, который может принимать любое значение в пределах от 0% (полностью закрыты) и 100% (полностью открыт):

enter image description here

я указал три различные импульсы вход- сигнал с 1, 2 и 3. Как только входной сигнал изменяется от 0 до 1 (нарастающий фронт), MCV начинает открываться. По истечении времени t_Op MCV полностью открывается. Как только входной сигнал изменяется от 1 до 0 (задний фронт), клапан начинает закрываться. Этот процесс завершается после t_Cl. Обратите внимание, что t_Op и t_Cl необязательно должны быть одинаковыми.

Как вы можете видеть на диаграмме, клапан полностью закрывается после импульса №. 1 (задний фронт). Однако ширина между импульсом №. 2 и № импульса. 3 недостаточно, чтобы полностью закрыть клапан. На переднем фронте импульса нет. 3, клапан открывается снова, пока он не будет полностью открыт.

Вопрос:

Я хочу, чтобы имитировать процесс, описанный выше, с Matlab (предпочитаемый) или Simulink. Я не уверен на 100%, как начать работу с этой проблемой. Я думал об извлечении нарастающих/ребер из исходной системы и использовать эти «триггеры», чтобы инициировать некоторую зависящую от времени «наклонную» -ступенчатую функцию. Может быть, у вас есть для меня какие-то намеки?

+0

Хотя в другом контексте, решение Simulink этой проблемы достигается в значительной степени одинаковым образом, чтобы http://stackoverflow.com/questions/40190454/matlab-simulink-simulate-filling-and-emptying -of-а-река. «Дождь» в этом вопросе - это ваше «открытие», а «не дождь» - это ваше «закрытие». Вам просто нужно реализовать соответствующий наклон/рампу в двух подсистемах для удовлетворения ваших требований времени t_op и t_Cl. –

+0

Я также попытался решить эту проблему с помощью двух разрешенных подсистем. Однако я не знаю, как подать результат (то есть фактическое положение клапана, например, 50%) из одной подсистемы в другую (и наоборот) в случае не полностью открытого/закрытого MCV. Внутри каждой подсистемы я могу легко определить рампу с минимальными/максимальными значениями, которые соответствуют 0%/100% позиции клапана. Но эти значения остаются неизменными в течение времени моделирования и не могут быть изменены. –

+0

Пример в ссылке показывает, как вернуть существующее значение обратно в подсистемы. Это будет работать независимо от положения клапана при изменении направления клапана. –

ответ

0

Для имитации этого, вам нужно определить:
1) Разрешение по времени (0,1 с 0,01 с)
2) Разрешение клапана (вероятно, 1%)
3) Как квантование ваш управляющий сигнал (если? это только 0 или 1, это уже сделано, если это 0В -> 5V, вам нужно выбрать, какие ценности становятся off, которые становятся neutral, и которые становятся on

Если квантования данных до 0,1 секунд, и квантование разрешение клапана до 1%, вы можете использовать что-то похожее на следующее (вы должны сами заполнить разделы %%%

pos_initial = 0; % percent, position 
t_res = 0.1; % seconds 
pos_res = 1; % percent 

%%% Declare t_op, t_cl. Solve for open_speed and close_speed If you have t_op and t_res, how can you solve for the open_speed (the amount of opening in a single step? Do the same for close_speed %%% 

position(1) = pos_initial; 
for ii = 2:length(input) 
    if(input == 1) 
     position(ii) = min(position(ii-1) + open_speed, 100); %this makes potition get bigger, but doesn't let it get bigger than 100% 
    else 
     %%% Looking at the position(ii) line above, how could you do the same for closing to make sure it doesn't go below zero? 
    end 
end