如果我通过函数的回调尝试它,则无法在 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) 即可确保找到(或未找到)标签。