2017-12-11 2 views
0

아직 Scilab의 논리를 이해하려고 노력하면서 기계적인 요소를위한 작은 계산 도구를 만들었습니다. 내가 가진 주된 문제는 계산 코드에 맞는 순서 (또는 구문)를 찾는 것입니다 ... "알 수없는 변수"오류가 많이 발생하고 이유를 이해하지 못합니까? 함수의 정의 순서를 변경하려고 시도했지만 변수를 전역 변수로 선언했지만 아무 것도 도움이되지 않습니다. 계산을위한 코드가 길지는 않지만 복잡하지는 않지만 gui는 guibuilder를 사용하여 작성 되었기 때문에 uicontrols 정의는 필요 이상으로 길어질 수 있습니다. 누군가이 코드를 만들 수있게 도와 줄 수 있습니까?이 예제를 통해 많은 것을 배우고 이해할 수 있지만, 하나 이상의 "문제 영역"이 포함되어 있습니까? 여기 은 내가 무슨 짓을했는지 :Scilab - gui - 많은 알 수없는 변수 오류 메시지

G = 78500; 

table_titles = ["" "Wire diameter" "Wp" "Tau alwd" "M alwd" "Angle alwd"]; 

f=figure('figure_position',[910,163],'figure_size', 
[903,537],'auto_resize','on','background',[33],'figure_name','Graphic 
window number %d'); 
////////// 
delmenu(f.figure_id,gettext('File')) 
delmenu(f.figure_id,gettext('?')) 
delmenu(f.figure_id,gettext('Tools')) 
toolbar(f.figure_id,'off') 
handles.dummy = 0; 
handles.sl_dwire=uicontrol(f,'unit','normalized','BackgroundColor', 
[-1,-1,-1],'Enable','on','FontAngle','normal','FontName','Tahoma', 
'FontSize',[12],'FontUnits','points','FontWeight','normal', 
'ForegroundColor',[-1,-1,-1],'HorizontalAlignment','left','ListboxTop', 
[],'Max',[12],'Min',[0],'Position', 
[0.0058208,0.77875,0.124375,0.06875],'Relief','default','SliderStep', 
[0.1,1],'Style','slider','String',"Wire diameter",'Value', 
[6],'VerticalAlignment','middle','Visible','on','Tag','sl_dwire', 
'Callback','sl_dwire_callback(handles)') 
handles.ed_dwire=uicontrol(f,'unit','normalized','BackgroundColor', 
[-1,-1,-1],'Enable','off','FontAngle','normal','FontName','Tahoma', 
'FontSize',[12],'FontUnits','points','FontWeight','normal', 
'ForegroundColor',[-1,-1,-1],'HorizontalAlignment','left','ListboxTop', 
[],'Max',[1],'Min',[0], 
'Position',[0.0058208,0.71875,0.124375,0.06875],'Relief', 
'default','SliderStep',[0.01,0.1],'String',"wire diameter: " + 
msprintf('%2.1f',handles.sl_dwire.Value) + "mm",'Style','text', 
'Value',[0],'VerticalAlignment','middle','Visible','on','Tag', 
'ed_dwire','Callback','auto') 
handles.sl_wangle=uicontrol(f,'unit','normalized','BackgroundColor', 
[-1,-1,-1],'Enable','on','FontAngle','normal','FontName','Tahoma', 
'FontSize',[12],'FontUnits','points','FontWeight','normal', 
'ForegroundColor',[-1,-1,-1],'HorizontalAlignment','left', 
'ListboxTop',[],'Max',[180],'Min',[5],'Position', 
[0.0090625,0.5191667,0.25625,0.0645833],'Relief','default', 
'SliderStep',[0.1,1],'String','Working angle','Style','slider','Value', 
[50],'VerticalAlignment','middle','Visible','on','Tag','sl_wangle', 
'Callback','sl_wangle_callback(handles)') 
handles.ed_wangle=uicontrol(f,'unit','normalized','BackgroundColor', 
[-1,-1,-1],'Enable','off','FontAngle','normal','FontName','Tahoma', 
'FontSize',[12],'FontUnits','points','FontWeight','normal', 
'ForegroundColor',[-1,-1,-1],'HorizontalAlignment','left', 
'ListboxTop',[],'Max',[1],'Min',[0],'Position', 
[0.0090625,0.4591667,0.25625,0.0645833],'Relief','default', 
'SliderStep',[0.01,0.1],'String',"Working angle: " + 
msprintf('%2.1f',handles.sl_wangle.Value) + "°",'Style','text', 
'Value',[0],'VerticalAlignment','middle','Visible','on','Tag', 
'ed_wangle','Callback','auto') 
handles.sl_activel=uicontrol(f,'unit','normalized', 
'BackgroundColor',[-1,-1,-1],'Enable','on','FontAngle','normal', 
'FontName','Tahoma','FontSize',[12],'FontUnits','points','FontWeight', 
'normal','ForegroundColor',[-1,-1,-1],'HorizontalAlignment','left', 
'ListboxTop',[],'Max',[1000],'Min',[10],'Position', 
[0.0090625,0.365,0.25625,0.0645833],'Relief','default', 
'SliderStep',[0.1,1],'String','Active length' ,'Style','slider', 
'Value',[10],'VerticalAlignment','middle','Visible','on','Tag', 
'sl_activel','Callback','sl_activel_callback(handles)') 
handles.ed_activel=uicontrol(f,'unit','normalized', 
'BackgroundColor',[-1,-1,-1],'Enable','off','FontAngle','normal', 
'FontName','Tahoma','FontSize',[12],'FontUnits','points','FontWeight', 
'normal','ForegroundColor',[-1,-1,-1],'HorizontalAlignment','left', 
'ListboxTop',[],'Max',[1],'Min',[0],'Position', 
[0.0090625,0.305,0.25625,0.0645833],'Relief','default', 
'SliderStep',[0.01,0.1],'String','Active length: ' + 
msprintf('%2.1f',handles.sl_activel.Value) + 
"mm",'Style','text','Value',[0],'VerticalAlignment','middle','Visible', 
'on','Tag','ed_activel','Callback','auto') 
handles.ax_graph= newaxes();handles.ax_graph.margins = [ 0 0 0 0]; 
handles.ax_graph.axes_bounds = [0.4274266,0.0619266,0.3995485,0.5191743]; 
handles.tab_param=uicontrol(f,'unit','normalized','BackgroundColor', 
[-1,-1,-1],'Enable','on','FontAngle','normal','FontName', 
'Tahoma','FontSize',[12],'FontUnits','points','FontWeight','normal', 
'ForegroundColor',[-1,-1,-1],'HorizontalAlignment','left', 
'ListboxTop',[],'Max',[1],'Min',[0], 
'Position',[0.4308126,0.1690826,0.3950339,0.2178899],'Relief', 
'default','SliderStep',[0.01,0.1],'String',string(table_param),'Style', 
'table','Value',[0],'VerticalAlignment','middle','Visible', 
'on','Tag','tab_param','Callback','tab_param_callback(handles)') 
handles.sl_sfactor=uicontrol(f,'unit','normalized', 
'BackgroundColor',[-1,-1,-1],'Enable','on','FontAngle','normal', 
'FontName','Tahoma','FontSize',[12],'FontUnits','points','FontWeight', 
'normal','ForegroundColor',[-1,-1,-1],'HorizontalAlignment','left', 
'ListboxTop',[],'Max',[1],'Min',[0], 
'Position',[0.0058208,0.6525688,0.124375,0.06875],'Relief','default', 
'SliderStep',[0.01,0.1],'String',"Safety factor",'Style', 
'slider','Value',[0.58],'VerticalAlignment','middle','Visible','on', 
'Tag','ed_sfactor','Callback','sl_sfactor_callback(handles)') 
handles.ed_sfactor=uicontrol(f,'unit','normalized', 
'BackgroundColor',[-1,-1,-1],'Enable','off','FontAngle','normal', 
'FontName','Tahoma','FontSize',[12],'FontUnits','points','FontWeight', 
'normal','ForegroundColor',[-1,-1,-1],'HorizontalAlignment', 
'left','ListboxTop',[],'Max',[1],'Min',[0],'Position', 
[0.0058208,0.5925688,0.124375,0.06875],'Relief','default', 
'SliderStep',[0.01,0.1],'String',"Safety factor : " + 
msprintf('%2.1f',handles.sl_sfactor.Value),'Style', 
'text','Value',[0.58],'VerticalAlignment','middle','Visible','on', 
'Tag','ed_dwire','Callback','auto') 
handles.popm_wtype=uicontrol(f,'unit','normalized', 
'BackgroundColor',[-1,-1,-1],'Enable','on','FontAngle','normal', 
'FontName','Tahoma','FontSize',[12],'FontUnits','points','FontWeight', 
'normal','ForegroundColor',[-1,-1,-1],'HorizontalAlignment','left', 
'ListboxTop',[],'Max',[1],'Min',[0],'Position', 
[0.0058208,0.8618349,0.124375,0.0639450],'Relief','default', 
'SliderStep',[0.01,0.1],'String',gettext("SL/DL|SM/DM|SH/DH"),'Style', 
'popupmenu','Value',[2],'VerticalAlignment','middle','Visible','on', 
'Tag','popm_wtype','Callback','popm_wtype_callback(handles)') 

////////// 
// Callbacks are defined as below. Please do not delete the comments 
as it will be used in coming version 
////////// 

function sl_sfactor_callback(handles) 
    sf=handles.sl_sfactor.Value; 
    handles.ed_sfactor.String="Safety factor: " + msprintf('%3.2f',sf); 
endfunction 

function sl_dwire_callback(handles) 
    wd=handles.sl_dwire.Value; 
    Wp = %pi*wd^3/16; 
    Ip =%pi*wd^4/32; 
    Kt = G*%pi*Ip/(180*L); 
    Talwd = sf * calcform; 
    Malwd = Wp * Talwd; 
    alphaalwd = Malwd/Kt; 
    x=0:0.1:alphaalwd*1.5; 
    plot(x,Kt*x); 
    handles.ed_dwire.String="Wire diameter: " + 
    msprintf('%2.1f',wd) + "mm"; 
endfunction 

function popm_wtype_callback(handles) 
//Write your callback for popm_wtype here 
    if selected == 1 then 
    calcform =(1845 - 700*log10(wd)); 
elseif selected == 2 then 
    calcform =(2105 - 780*log10(wd)); 
elseif selected == 3 then 
    calcform = (2220 - 820*log10(wd)); 
end 
endfunction 

function sl_wangle_callback(handles) 
    handles.ed_wangle.String="Working angle: " + 
    msprintf('%2.1f',handles.sl_wangle.Value) + "°"; 
endfunction 

function sl_activel_callback(handles) 
//Write your callback for sl_activel here 
    handles.ed_activel.String="Active length: " + 
    msprintf('%2.1f',handles.sl_activel.Value) + "mm"; 
    L=handles.sl_activel.Value; 
endfunction 

function tab_param_callback(handles) 
//Write your callback for tab_param here 
    table_values = string([ wd Wp Talwd Malwd alphaalwd]); 
    table_param = [table_titles; [table_values]]; 
endfunction 

내가 코드를 동적으로 업데이트 할 것으로 예상 그래프 및 입력 슬라이더와 팝업 메뉴의 위치에 따라 매개 변수 테이블.

scilab 프로그래밍에 관한 많은 질문에 대한 답을 얻을 수 있기 때문에 누군가이 코드를 작동하도록 도울 수 있다면 매우 유용 할 것입니다.

미리 감사드립니다.

+2

Scilab에서 범위가 제한되는 방법을 이해하지 못하는 것 같습니다. 함수 안에서 변수를 만들고 그 함수 외부에서 변수를 호출하려고합니다. 그건 허용되지 않습니다. – luispauloml

+1

코드를 이해하려고 시도했지만 너무 복잡합니다. guibuilder로 간단한 예제를 만들 수 있습니까? 슬라이더 하나 또는 하나의 방정식일까요? 그것은 "정의되지 않은 변수"와 같은 문제가있는 것이어야합니다.그것이 우리가 [mcve]라고 부르는 것입니다. – luispauloml

답변

0

우선, 코드는 줄 바꿈으로 인해 직접 실행 가능하지 않습니다. 성명서의 각 줄 뒤에 ...을 추가하십시오. 이렇게하면 가독성이 향상됩니다. @luispauloml에서 언급했듯이 다른 함수 안에있는 변수를 사용하려고합니다. 예를 들어 table_param에 도달하려고 시도하면 이는 바로 tab_param_callback(handles)입니다. 이 제거하려면, 당신은 함수의 출력을 정의 할 수 있습니다

기능을 [table_values, table_param] = tab_param_callback (핸들)

table_values ​​= 문자열 ([WD wp를 Talwd Malwd의 alphaalwd]) ;

table_param = [table_titles; [table_values]];

당신이 변수를 얻기 위해이 함수를 호출 할 수 있습니다 지금

endfunction :

문자열 난 그냥이 경우 보정 (tab_param_callback (핸들))

을하고 점을 추가 설명했다. 다른 변수의 경우에도 마찬가지로 수행 할 수 있습니다. 또한 함수 정의를 코드의 시작 부분으로 옮겼습니다. 왜냐하면 스크립트가 중간에 충돌하면 컴파일러는 함수 정의를 읽을 기회가 없기 때문입니다.

this file의 코드를 찾으십시오.

이 정보가 도움이되기를 바랍니다. 행운을 빕니다!

+0

Btw : 여러 줄의 명령문 구문은 MATLAB.https와 동일합니다. //de.mathworks.com/help/matlab/matlab_prog/continue-long-statements-on-multiple-lines.html – peng