Этот скрипт в качестве примера показывает, как можно линеаризовать модель Simscape™ Electrical™, чтобы поддержать анализ и проектирование устойчивости системы управления. Это использует модель в качестве примера ee_sm_governor_control_design.
Синхронная Машина в этом примере действует в качестве генератора. Машина инициализируется, чтобы начать в периодическом устойчивом состоянии предоставлять загрузку 250 МВт / 15 Mvar.
Альтернативный и рекомендуемый способ линеаризовать Simulink® и модели Simscape состоит в том, чтобы использовать Simulink Control Design™. Simulink Control Design линеаризует вашу модель в рабочих точках, которые вы задаете. Это также возвращает объект модели в пространстве состояний с именами состояния. Если вы имеете Simulink Control Design, открываете модель ee_sm_governor_control_design. На вкладке Apps, под Системами управления, нажимают Model Linearizer. В Model Linearizer, на вкладке Linear Analysis, в разделе Setup, выбирают Operating Point> Linearize At. Установите время снимка состояния симуляции на 4 секунды, затем нажмите ОК. В разделе Linearize нажмите Bode.
Откройте модель.
open_system('ee_sm_governor_control_design') set_param(find_system('ee_sm_governor_control_design','FindAll', 'on','type','annotation','Tag','ModelFeatures'),'Interpreter','off')
Обрежьте модель путем выполнения с обратной связью и выбора состояния в 4 секунды, когда генератор будет в установившемся.
assignin('base','ClosedLoop',1); % Close the speed-control feedback loop [t,x,y] = sim('ee_sm_governor_control_design'); idx = find(t>4,1); X = x(idx,:); U = y(idx);
Warning: The file containing block diagram 'ee_sm_governor_control_design' is shadowed by a file of the same name higher on the MATLAB path. This can cause unexpected behavior. For more information see <a href="matlab:helpview([docroot '/toolbox/simulink/helptargets.map'], 'shadowing')">"Avoiding Problems with Shadowed Files"</a> in the Simulink documentation. The file containing the block diagram is: /mathworks/devel/bat/BR2020ad/build/matlab/toolbox/physmod/elec/eedemos/applications/renewables/ee_sm_governor_control_design.slx. The file higher on the MATLAB path is: /mathworks/devel/bat/BR2020ad/build/matlab/toolbox/physmod/elec/eedemos/applications/renewables/html/ee_sm_governor_control_design.m
Откройте обратную связь регулировки скорости, линеаризуйте модель и закройте обратную связь регулировки скорости.
assignin('base','ClosedLoop',0); % Open the speed-control feedback loop [a,b,c,d]=linmod('ee_sm_governor_control_design',X,U); assignin('base','ClosedLoop',1); % Close the speed-control feedback loop
Warning: A value of class "uint64" was indexed with no subscripts specified. Currently the result of this operation is the indexed value itself, but in a future release, it will be an error. Warning: A value of class "uint64" was indexed with no subscripts specified. Currently the result of this operation is the indexed value itself, but in a future release, it will be an error. Warning: The file containing block diagram 'ee_sm_governor_control_design' is shadowed by a file of the same name higher on the MATLAB path. This can cause unexpected behavior. For more information see <a href="matlab:helpview([docroot '/toolbox/simulink/helptargets.map'], 'shadowing')">"Avoiding Problems with Shadowed Files"</a> in the Simulink documentation. The file containing the block diagram is: /mathworks/devel/bat/BR2020ad/build/matlab/toolbox/physmod/elec/eedemos/applications/renewables/ee_sm_governor_control_design.slx. The file higher on the MATLAB path is: /mathworks/devel/bat/BR2020ad/build/matlab/toolbox/physmod/elec/eedemos/applications/renewables/html/ee_sm_governor_control_design.m
Постройте диаграмму Боде.
c = -c; d = -d; % Negative feedback convention npts = 100; w = logspace(-3,5,npts); G = zeros(1,npts); for i=1:npts G(i) = c*(1i*w(i)*eye(size(a))-a)^-1*b +d; end figure ax1 = subplot(2,1,1); semilogx(w,20*log10(abs(G))) grid on ylabel('Magnitude (dB)') title('Bode diagram: speed-control feedback loop') ax2 = subplot(2,1,2); semilogx(w,180/pi*unwrap(angle(G))) ylabel('Phase (degrees)') xlabel('Frequency (rad/s)') linkaxes([ax1,ax2],'x') xlim(w([1 end])) grid on