2014-04-04 19 views
1

我需要在Matlab S函數中的幾個函數中使用一個對象。 該對象用作庫,需要使用服務器設置連接,在每個循環中從中獲取數據,並在仿真結束時關閉它。對象的使用是這樣的:如何在Matlab S函數中使用全局對象

ClassX ObjectX; 

[Handle clientID]=ObjectX.setConnection(...); 

while(coonection) 
[result]=ObjectX.getPosition(Handle ClientID,...); 
[result]=ObjectX.getAngle(Handle ClientID,...); 
... 
end 

[result]=ObjectX.CloseConnection(...); 

它不方便實例並關閉每個循環中的通信。所以我想創建對象並在「function setup(block)」上設置連接,更新「function Update(block)」上的數據並關閉「function Terminate(block)」上的連接,但爲此,我需要在功能中共享「ObjectX」和「clientID」。

我希望你能幫助我。

回答

1

您可以使用一個Singleton類,該類會被實例化一次,並在您每次請求時返回相同的實例。

classdef (Sealed) SingleInstance < handle 
    methods (Access = private) 
     function obj = SingleInstance 
     end 
    end 

    methods (Static) 
     function singleObj = getInstance 
     persistent localObj 
     if isempty(localObj) || ~isvalid(localObj) 
      localObj = SingleInstance; 
     end 
     singleObj = localObj; 
     end 
    end 

    method (Access = public) 
     function setup(obj, block) 
     end 
     function update(obj, block) 
     end 
     function terminate(obj, block) 
     end 
    end 
end 

更多信息,請here

+0

嗨! thaks!我的目標是與一個機器人模擬器(Vrep)交流MAtlab,製造商提供類和入門系統來處理它,因爲我希望我沒有修改它,因爲我不知道它是如何工作的。該庫設計用於.m或函數,但不用於simulink或s函數。所以我希望你能幫我使用它而不用修改。 – DdS

+0

您應該可以使用Singleton類來包裝進行通信的類,而無需修改類本身。在單例構造函數'SingleInstance'中,你可以調用'ObjectX.setConnection'來初始化連接。下一次調用'getInstance'時,您只需獲取現有實例的句柄,而無需重新初始化連接。你應該多讀一些關於MATLAB類系統的知識來熟悉它。 – Kavka

相關問題