如果我通过函数的回调尝试它,则无法在 scilab 中打印图形,因为 syslin 不认为两个参数相等
Impossible to print a graph in scilab if I try it through a callback of a function because syslin doesn't consider both arguments to be equal
你好吗,我正在根据 Openeering 人的教程在 scilab 中制作一个 GUI,在我制作的 GUI 中我需要在图的右侧绘制系统的响应 window。它会打印系统的初始图形,我有一个按钮可以使用 GUI 具有的某些文本框中设置的参数打印新图形,因此:
我最初存储在文本框中写入的数据的代码是
//Lista ordenada de valores por defecto
values1=[0.00074,0.3,8.7,0.48,3.9,0.0035];
//Posicionamiento
l1=30;l2=100;l3=110;
for k=1:size(labels1,2)
uicontrol("parent",sistem_graf,"style","text","string",labels1(k),"position",[l1,guih1-
k*20+guih1o,l2,20],"horizontalalignment","left","fontsize",14,"background",[1 1 1]);
guientry(k)=uicontrol("parent",sistem_graf,"style","edit","string",string(values1(k)),
"position",
[l3,guih1k*20+guih1o,180,20],"horizontalalignment","left","fontsize",14,"background",
[.9 .9 .9],"tag",labels1(k));
end
guientry(k) 是命名文本框的控件。
按钮是用下面的代码生成的
//Adicionando un botón
huibutton=uicontrol(sistem_graf,"style","pushbutton",...
"position",[110 100 100 20],"String","Graficar",...
"BackgroundColor",[.9 .9 .9], "fontsize",14,...
"Callback","Calcula_Sistema");
调用“Calcula_Sistema”按钮的回调函数是
function Calcula_Sistema()
//Lee los parámetros del sistema
parametros=[];
la=findobj("tag,""La [H]"); parametros.la=la;
ra=findobj("tag","Ra [Ohm]"); parametros.ra=ra;
in=findobj("tag","In [A]"); parametros.in=in;
par=findobj("tag","Par [N*m]"); parametros.par=par;
ke=findobj("tag","Ke [V/krpm]"); parametros.ke=ke;
j=findobj("tag","j [N/m^2]"); parametros.j=j;
//Lee los tiempos del sistema
/* Tsim=[];
Tini=findobj("tag","Tinicio [s]"); Tsim.Tini=evstr(Tini);
Tfin=findobj("tag","Tfin [s]"); Tsim.Tini=evstr(Tfin);
Tpaso=findobj("tag", "Tpaso [s]"); Tsim.Tpaso=evstr(Tpaso);
*/
Sis_Motor(parametros.la,parametros.ra,parametros.in,
parametros.par,parametros.ke,parametros.j);
endfunction
当我按下按钮生成新图表时,出现错误
在函数的第 8 行 Sis_Motor ( F:\Users\valery\Documents\MEGAsync\UCV\Postgrado en Controles Industriales\Trabajo de Grado\Proyecto\Cálculos\Aplicación Scilab\Ventana.sce第 96 行)
在函数 Calcula_Sistema 的第 18 行( F:\Users\valery\Documents\MEGAsync\UCV\Postgrado en Controles Industriales\Trabajo de Grado\Proyecto\Cálculos\Aplicación Scilab\Ventana.sce line 142 )
syslin:输入参数 #2 y #3 不兼容:预期大小相同。
Sis_Motor函数的第8行就是下面代码的第8行也就是Sis_Motor代码
function [Wn,Zita,ftr,fta]=Sis_Motor(in,par,la,ra,ke,j)
kt=par/in;
n=kt/(j*la);
b=j/10;
d=[((b*ra+ke*kt)/(j*la)) ((b*la+j*ra)/(j*la)) 1];
dpoly=poly(d,'s','c');
t=[0:0.001:0.2];
fta=syslin('c',n,dpoly);
ftr=fta/(1+fta);
[Wn,Zita]=damp(ftr);
graf=csim('step',t,ftr);
delete(gca());
plot2d(t,graf);
legend('Respuesta al escalón');
//Línea vertical.
set(gca(),"auto_clear","off");
graf_eje=gca();
graf_eje.axes_bounds=[1/3,0,2/3,1];
endfunction
我也尝试更改 Sis_Motor 的第二行以下代码在哪里
n=kt/(j*la);
为线
n=[kt/(j*la) 0 0];
但这没有用,同样的错误不断出现。
估计是处理文本框输入的错误,不知道怎么解决
有人可以帮我吗?
更新 1:
findobj 没有找到完全按照@Stephane Mottelet 所说的标签,现在已解决。
findobj 生成 uicontrol 的句柄。要恢复您必须编写的编辑框的数值(此处例如对于 ra)
ra=findobj("tag","Ra [Ohm]"); parametros.ra=evstr(ra.string);
如果仍然失败,则可能未找到对象并且 findobj
生成一个空矩阵。只需在 findobj
调用后插入 disp(ra)
即可确保找到(或未找到)标签。
你好吗,我正在根据 Openeering 人的教程在 scilab 中制作一个 GUI,在我制作的 GUI 中我需要在图的右侧绘制系统的响应 window。它会打印系统的初始图形,我有一个按钮可以使用 GUI 具有的某些文本框中设置的参数打印新图形,因此:
我最初存储在文本框中写入的数据的代码是
//Lista ordenada de valores por defecto
values1=[0.00074,0.3,8.7,0.48,3.9,0.0035];
//Posicionamiento
l1=30;l2=100;l3=110;
for k=1:size(labels1,2)
uicontrol("parent",sistem_graf,"style","text","string",labels1(k),"position",[l1,guih1-
k*20+guih1o,l2,20],"horizontalalignment","left","fontsize",14,"background",[1 1 1]);
guientry(k)=uicontrol("parent",sistem_graf,"style","edit","string",string(values1(k)),
"position",
[l3,guih1k*20+guih1o,180,20],"horizontalalignment","left","fontsize",14,"background",
[.9 .9 .9],"tag",labels1(k));
end
guientry(k) 是命名文本框的控件。
按钮是用下面的代码生成的
//Adicionando un botón
huibutton=uicontrol(sistem_graf,"style","pushbutton",...
"position",[110 100 100 20],"String","Graficar",...
"BackgroundColor",[.9 .9 .9], "fontsize",14,...
"Callback","Calcula_Sistema");
调用“Calcula_Sistema”按钮的回调函数是
function Calcula_Sistema()
//Lee los parámetros del sistema
parametros=[];
la=findobj("tag,""La [H]"); parametros.la=la;
ra=findobj("tag","Ra [Ohm]"); parametros.ra=ra;
in=findobj("tag","In [A]"); parametros.in=in;
par=findobj("tag","Par [N*m]"); parametros.par=par;
ke=findobj("tag","Ke [V/krpm]"); parametros.ke=ke;
j=findobj("tag","j [N/m^2]"); parametros.j=j;
//Lee los tiempos del sistema
/* Tsim=[];
Tini=findobj("tag","Tinicio [s]"); Tsim.Tini=evstr(Tini);
Tfin=findobj("tag","Tfin [s]"); Tsim.Tini=evstr(Tfin);
Tpaso=findobj("tag", "Tpaso [s]"); Tsim.Tpaso=evstr(Tpaso);
*/
Sis_Motor(parametros.la,parametros.ra,parametros.in,
parametros.par,parametros.ke,parametros.j);
endfunction
当我按下按钮生成新图表时,出现错误
在函数的第 8 行 Sis_Motor ( F:\Users\valery\Documents\MEGAsync\UCV\Postgrado en Controles Industriales\Trabajo de Grado\Proyecto\Cálculos\Aplicación Scilab\Ventana.sce第 96 行) 在函数 Calcula_Sistema 的第 18 行( F:\Users\valery\Documents\MEGAsync\UCV\Postgrado en Controles Industriales\Trabajo de Grado\Proyecto\Cálculos\Aplicación Scilab\Ventana.sce line 142 )
syslin:输入参数 #2 y #3 不兼容:预期大小相同。
Sis_Motor函数的第8行就是下面代码的第8行也就是Sis_Motor代码
function [Wn,Zita,ftr,fta]=Sis_Motor(in,par,la,ra,ke,j)
kt=par/in;
n=kt/(j*la);
b=j/10;
d=[((b*ra+ke*kt)/(j*la)) ((b*la+j*ra)/(j*la)) 1];
dpoly=poly(d,'s','c');
t=[0:0.001:0.2];
fta=syslin('c',n,dpoly);
ftr=fta/(1+fta);
[Wn,Zita]=damp(ftr);
graf=csim('step',t,ftr);
delete(gca());
plot2d(t,graf);
legend('Respuesta al escalón');
//Línea vertical.
set(gca(),"auto_clear","off");
graf_eje=gca();
graf_eje.axes_bounds=[1/3,0,2/3,1];
endfunction
我也尝试更改 Sis_Motor 的第二行以下代码在哪里
n=kt/(j*la);
为线
n=[kt/(j*la) 0 0];
但这没有用,同样的错误不断出现。
估计是处理文本框输入的错误,不知道怎么解决
有人可以帮我吗?
更新 1:
findobj 没有找到完全按照@Stephane Mottelet 所说的标签,现在已解决。
findobj 生成 uicontrol 的句柄。要恢复您必须编写的编辑框的数值(此处例如对于 ra)
ra=findobj("tag","Ra [Ohm]"); parametros.ra=evstr(ra.string);
如果仍然失败,则可能未找到对象并且 findobj
生成一个空矩阵。只需在 findobj
调用后插入 disp(ra)
即可确保找到(或未找到)标签。