2014-01-11 68 views
-1

我將上面的.m文件轉換爲下面的函數,我的輸入是什麼都沒有,我的輸出是q。但我有一個問題。當我將創建的功能塊放到simulink並連接到顯示屏時,matlab給了我一些錯誤,比如:將現有的.mfile整合到.mdl simulink

* Try and catch不支持代碼生成。 功能 'tb_optparse.m'(#80.5667.6083),線157列25: 「試一試」 啓動診斷報告*

函數調用失敗。 函數'MATLAB函數'(#94.848.897),第37行,第3列: 「mstraj(path,[15 15 15],[],[1 0 1],0.02,0.2)」 啓動診斷報告。

錯誤MATLAB功能 'MATLAB功能'(#93)

我怎樣才能修復這些錯誤的解析過程中發生?由於

function output = fcn() 


%mdl_puma560 %to create puma robot 

for type=1:3 % main for loop. It turns 3 times. At first, it sets the path 
    %   to x-y plane and draw the robot, at second for y-z plane 
    %   and then for x-z plane 

    if type==1 

% The path of robot for x-y plane  
path=[0 0 1;0 0 0;0 2 0 ;0.5 1 0 ;1 2 0;1 0 0;1.5 0 1;1.5 0 0; 
     1.5 2 0;2.2 2 0;2.5 1.6 0;2.5 0.4 0;2.2 0 0;1.5 0 0;0 0 1]; 


elseif type==2 

% Same thing as first part  
path=[-0.5 0 0;0 0 0;0 0 1;0 -0.5 0.5;0 -1 1;0 -1 0;-0.5 -1.2 0;0 -1.2 0; 
    0 -1.2 1;0 -1.7 1;0 -2 0.7;0 -2 0.3;0 -1.7 0;0 -1.2 0]; 


elseif type==3 

% Same thing as first and second part  
path=[0 -0.5 0;0 0 0;0 0 1;0.5 0 0.5;1 0 1;1 0 0;1.3 -0.5 0;1.3 0 0; 
    1.3 0 1;1.7 0 1;2 0 0.7;2 0 0.3;1.7 0 0;1.3 0 0]; 


    end 



% I created a trajectory 

p=mstraj(path, [15 15 15], [], [1 0 1], 0.02 , 0.2); 

% [15 15 15] means the maximum speed in x,y,z directions. 
% [1 0 1] means the initial coordinates 
% 0.02 means acceleration time 
% 0.2 means smoothness of robot 


numrows(p)*0.2; % 200 ms sample interval 
Tp=transl(0.1*p); % Scale factor of robot 
Tp=homtrans(transl(0.4,0,0),Tp); % Origin of the letter 
q=p560.ikine6s(Tp) ; % The inverse kinematic 


% for i=1:length(q) 
% %q matrix has 280 rows and 6 columns. So this for loop turns 280 times 
% % At every turns , it plots one part of movement. q(1,:), q(2,:), ... 
% 
%  p560.plot(q(i,:)) 
% 
% end 

end 

output=q; 

回答

0

以及錯誤消息說,它看起來像你的功能mstraj呼喚它不支持代碼生成(在Simulink MATLAB函數首先被轉換爲C代碼,當您運行模型)try/catch

查看文檔中的Call MATLAB Functions,瞭解如何使用coder.extrinsic解決此問題。外部函數返回類型爲mxArray的數據,因此您需要將其轉換爲任何數據類型p(請參閱在上面的文檔頁面中將mxArrays轉換爲已知類型)。

在你的情況下,它可能會是這個樣子:

function output = fcn() 

coder.extrinsic('mstraj'); 

% etc... 

p = 0; % Define p as a scalar of type double (change to required data type if not appropriate) 
p=mstraj(path, [15 15 15], [], [1 0 1], 0.02 , 0.2); 

% etc...