// // eseguire con il comando: // exec('percorso\fdt.dem') // // x_message(['######################################################'; 'Traccia i seguenti diagrammi:'; ' # Bode (Modulo e fase)'; ' # Nyuist'; ' # Evans (Luogo delle radici)'; ' # Risposta temporale al gradino unitario'; '#########################################################'; ''; 'di Walter Giocoso'; 'http://digilander.iol.it/wgiocoso'; ''; ''; 'ATTENZIONE!!!'; 'Il diagramma di Nyquist si studia in genere'; 'sulla funziona di anello BA e non sulla f.d.t.'; 'I margini di guadagno e di fase devono essere misurati'; 'partendo dalla rappresentazione della funziona di anello'; ''; 'Testato con SCILAB 2.5']) xclear(); s=poly(0,'s'); // mode(1) str='-10*real(s+1/3)/real((s+1/2+%i*3)*(s+1/2-%i*3))'; rep=x_dialog('Scrivi la Funzione di trasferimento',str) if rep==[] then return,end h1=evstr(rep); h1=syslin('c',h1) // mode(-1) deff('[]=demoexc(fil)','exec(''SCI/demos/control/''+fil)') while %t do n=x_choose(['Diagramma di Bode','Diagramma di Nyquist','Luogo delle radici','Risposta al gradino unitario'],'Seleziona il diagramma da visualizzare'); select n case 0 break case 1 mode(1) xclear(); defv=['0.01','10^9','0.001']; title='Parametri del grafico (ATTENZIONE! un passo troppo piccolo puņ comportare un overflow della memoria con interruzione del programma)'; rep=x_mdialog(title,['Frequenza minima?';'Frequenza massima?';'Passo di interpolazione?'],defv) if rep==[] then break,end bode_par=evstr(rep) bode_inizio=evstr(bode_par(1)) bode_fine=evstr(bode_par(2)) bode_passo=evstr(bode_par(3)) xclear(); bode(h1,bode_inizio,bode_fine,bode_passo) halt() xbasc(); mode(-1) case 2 xclear(); nyquist(h1), halt() xbasc(); case 3 xclear(); evans (h1), halt() xbasc(); case 4 mode(1) xclear(); defv=['0','0.001','20']; title='Parametri del grafico (ATTENZIONE! un passo troppo piccolo puņ comportare un overflow della memoria con interruzione del programma)'; rep=x_mdialog(title,['Istante di inizio?';'Passo di interpolazione?';'Istante finale?'],defv) if rep==[] then break,end step_par=evstr(rep) step_inizio=evstr(step_par(1)) step_fine=evstr(step_par(3)) step_passo=evstr(step_par(2)) instants=step_inizio:step_passo:step_fine; y=csim('step',instants,h1); xbasc();plot2d(instants',y') halt() mode(-1) end end