📄 fm_uwpflow.m
字号:
Vmax = 1.2; Vmin = 0.8; end % Generator Active Power direction (DPg) if Supply.n if ~isempty(idxSu) DPg = sum(Supply.con(idxSu,3)); else DPg = 0; end else % if no Supply, use base case powers if ~isempty(idxSw) DPg = sum(SW.con(idxSw,10)); elseif ~isempty(idxPv) DPg = sum(PV.con(idxPv,4)); else DPg = 0; end end % Load Power Directions (Pnl,Qnl) if Demand.n if ~isempty(idxDe) Pnl = sum(Demand.con(idxDe,3)); Qnl = sum(Demand.con(idxDe,4)); else Pnl = 0; Qnl = 0; end else % if no Demand, use base case powers if ~isempty(idxPq) Pnl = sum(PQ.con(idxPq,4)); Qnl = sum(PQ.con(idxPq,5)); else Pnl = 0; Qnl = 0; end end count = fprintf(fid,linef,busnum,0,DPg,Pnl,Qnl,0, ... 0,Vmax,Vmin); end count = fclose(fid); end % run UWPFLOW cd(Path.data) if Settings.octave [result,status] = system(uwcom); elseif Settings.hostver < 6.1 if isunix [status,result] = unix(uwcom); else [status,result] = dos(uwcom); end else [status,result] = system(uwcom); end cd(Path.local) if status == 2 fm_disp(['Something wrong in the execution of UWPFLOW. Check ' ... 'options.']) return else fm_disp('UWPFLOW computations completed.') end % load and plot nose curves if findstr(uwcom,[UWPFLOW.file,'.cpf']) fid = fopen([Path.data,UWPFLOW.file,'.cpf'],'rt'); output = []; if fid == -1 fm_disp(['Could not open file ''',UWPFLOW.file, ... '.cpf'' for loading nose curves.']) else row = fgetl(fid); if row == -1 fm_disp(['* * * The file ',UWPFLOW.file, ... '.cpf is empty * * *']) return end pattern = [char(92),'w*',char(92),'.*', ... char(92),'w*',char(92),'.*']; if Settings.octave idxc = 1; match_old = 0; b = []; c = []; while idxc <= length(row) match = regexp(pattern,row(idxc:end)); if isempty(match) break else match_old = match(1,2)+match_old; idxc = 1+match_old; b = [b; match_old+match(1,1)]; c = [c; match_old+match(1,2)]; end end elseif Settings.hostver < 7 b = [1,findstr(row,'V')]; c = b+1; else [b,c] = regexp(row,pattern); end names = cell(length(b)-1,1); for i = 2:length(b) volts{i-1} = row([b(i):c(i)]); end while 1 row = fgetl(fid); if row == -1, break, end output = [output; str2num(row)]; end count = fclose(fid); end % plot continuation curves if ~clpsat.init figure plot(output(:,1),output(:,2:end)) legend(volts) if Settings.hostver >= 7, legend(gca,'boxoff'), end xlabel('Loading Factor') ylabel('Voltages') end end % read UWPFLOW output and import results in PSAT if isempty(findstr(uwcom,[UWPFLOW.file,'.cf'])) | ... ~isempty(findstr(uwcom,[UWPFLOW.file,'.cpf'])) return end if ~clpsat.init Settings.ok = 0; uiwait(fm_choice('Do you want to load UWPFLOW solution to PSAT?', ... 1)) if ~Settings.ok return end end fm_disp('Read from IEEE Common Data Format...'); fm_disp(['Source data file "',UWPFLOW.file,'.cf"']) fid = fopen([Path.data,UWPFLOW.file,'.cf']); if fid == -1, fm_disp(['Can''t open file ',Path.data,UWPFLOW.file,'.cf'],2), return end % skip the first two rows ... foo = fgetl(fid); foo = fgetl(fid); % headings ... % get the number of buses row = fgetl(fid); idx = findstr(row,' ITEMS'); busnum = str2num(row(17:idx-1)); bus = zeros(busnum,7); for i = 1:busnum row = fgetl(fid); if row == -1 fm_disp(['Bus Data abnormally terminated. ', ... 'Conversion Process Interrupted'],2); fclose(fid); return end bus(i,1) = str2num(row(1:4)); % bus # bus(i,2) = str2num(row(28:33)); % voltage bus(i,3) = str2num(row(34:40)); % angle bus(i,4) = str2num(row(60:67)); % generation P bus(i,5) = str2num(row(68:75)); % generation Q bus(i,6) = str2num(row(41:49)); % load P bus(i,7) = str2num(row(50:59)); % load Q end fclose(fid); bus(:,4:7) = bus(:,4:7)/Settings.mva; bus(:,3) = bus(:,3)*pi/180; DAE.V = bus(:,2); DAE.a = bus(:,3); Bus.Pg = bus(:,4); Bus.Qg = bus(:,5); Bus.Pl = bus(:,6); Bus.Ql = bus(:,7); case 'view' file = popupstr(findobj(Fig.uwpflow,'Tag','PopupUWFile')); if exist([Path.data,file]) == 2 fm_text(13,[Path.data,file]) else uiwait(fm_choice(['File "',file,'" not found.',char(10), ... 'Check options and/or launch UWPFLOW.'],2)) end case 'makecom' fm_disp fm_disp('UWPFLOW command line:') file = File.data; file = strrep(file,'(mdl)','_mdl'); file = strrep(file,'@ ',''); if isempty(file) fm_disp('No file data found. A generic file name will be used.') file = '<file_in>'; end file_in = [file,'.cf']; file_out = [UWPFLOW.file,'.pf']; uwcom = ['uwpflow -I ',file_in,' ',file_out]; fields = fieldnames(UWPFLOW.opt); Kopt = 1; Output = 1; vopt = 0; for i = 1:length(fields) opt = getfield(UWPFLOW.opt,fields{i}); if opt.status uwcom = [uwcom,' ',opt.name]; if ~isempty(opt.ext) uwcom = [uwcom,UWPFLOW.file,opt.ext]; elseif ~isempty(opt.num) uwcom = [uwcom,num2str(opt.num)]; end switch fields{i} case 'B' if ~UWPFLOW.opt.v.status UWPFLOW.opt.v.status = 1; vopt = 1; end case {'c','C','H','v'} if Kopt uwcom = [uwcom,' -K',UWPFLOW.file,'.k']; Kopt = 0; end case {'j','J'} if Output uwcom = [uwcom,UWPFLOW.file]; Output = 0; end end end end if vopt UWPFLOW.opt.v.status = 0; end if ~isempty(uwcom) fm_disp(repmat('-',1,length(uwcom))) fm_disp(uwcom) fm_disp(repmat('-',1,length(uwcom))) else fm_disp('Something wrong in UWPFLOW options.') fm_disp('No command line was generated.') end if Fig.uwpflow hdl = findobj(Fig.uwpflow,'Tag','EditCom'); set(hdl,'String',uwcom) end if nargin == 1 UWPFLOW.command = uwcom; end if nargout varargout{1} = uwcom; end case 'help' % [-h] option if Settings.hostver < 6.1 | clpsat.init !uwpflow -h return end [status,result] = system('uwpflow -h'); retidx = findstr(result,char(10)); retidx = [0,retidx,length(result)+1]; text = cell(length(retidx)-1,1); for i = 1:length(retidx)-1 text{i} = result([retidx(i)+1:retidx(i+1)-1]); end if History.Max < 500, History.Max = 500; if Fig.hist set(findobj(Fig.hist,'Tag','Fmax1'),'Checked','off') set(findobj(Fig.hist,'Tag','Fmax2'),'Checked','off') set(findobj(Fig.hist,'Tag','Fmax3'),'Checked','off') set(findobj(Fig.hist,'Tag','Fmax4'),'Checked','on') end end fm_disp(text) if Fig.hist, figure(Fig.hist), else, fm_hist, end set(Hdl.hist, ... 'ListboxTop',length(History.text)-length(text)+1, ... 'Value',length(History.text)-length(text)+1)end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -