微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果我通过函数的回调尝试,则无法在 scilab 中打印图形,因为 syslin 不认为两个参数相等

如何解决如果我通过函数的回调尝试,则无法在 scilab 中打印图形,因为 syslin 不认为两个参数相等

你好吗,我正在根据 Openeering 人员的教程在 scilab 中制作 GUI,在我制作的 GUI 中,我需要在图形窗口的右侧绘制系统的响应。它打印系统的初始图形,我有一个按钮可以打印新图形,参数设置在 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","edit",string(values1(k)),[l3,guih1k*20+guih1o,180,[.9 .9 .9],"tag",labels1(k));
end

guientry(k) 是命名文本框的控件。

按钮生成如下代码

//Adicionando un botón
huibutton=uicontrol(sistem_graf,"pushbutton",...
"position",[110 100 100 20],"String","Graficar",...
"BackgroundColor",...
"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

当我按下按钮生成新图形时,它给了我错误

函数 Sis_Motor 的第 8 行( F:\Users\valery\Documents\MEGAsync\UCV\Postgrado en Controles Industriales\Trabajo de Grado\Proyecto\Cálculos\Aplicación Scilab\Ventana.sce line 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,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 会产生一个空矩阵。只需在 disp(ra) 调用后插入 findobj 以确保找到(或未找到)标记。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。