如何在Matlab中正确继承TCPIP类?

时间:2019-01-29 15:18:46

标签: matlab class tcp

我想在一个类中创建一个TCPIP对象。我有一些问题要弄清楚该怎么做。

首先,我将显示一个工作代码段:

>> %Creating the TCPIP object
>> TCPIP = tcpip('localhost',1000)

   TCPIP Object : TCPIP-localhost

   Communication Settings 
    RemotePort:         1000
    RemoteHost:         localhost
    Terminator:         'LF'
    NetworkRole:        client

   Communication State 
    Status:             closed
    RecordStatus:       off

   Read/Write State  
    TransferStatus:     idle
    BytesAvailable:     0
    ValuesReceived:     0
    ValuesSent:         0


>> %Changing Buffersize as example
>> TCPIP.OutputBufferSize = 30000

    TCPIP Object : TCPIP-localhost

    Communication Settings 
     RemotePort:         1000
     RemoteHost:         localhost
     Terminator:         'LF'
     NetworkRole:        client

    Communication State 
     Status:             closed
     RecordStatus:       off

    Read/Write State  
     TransferStatus:     idle
     BytesAvailable:     0
     ValuesReceived:     0
     ValuesSent:         0

如您所见,未显示Buffersize更改的命令行输出。我无法正确地看到它,但我尝试解释一下:创建TCPIP对象后,Matlab将创建具有值TCPIP的变量1x1 tcpip。如果我双击此值,则可以看到该对象的所有属性,包括outputBuffersize

现在,我将在课堂上展示我的第一次实现。我试图在方法内部创建tcpip对象,该方法将变量TCPIP(如前所述)保存在类属性中。

classdef tcp_test < handle

    properties
        TCPIP
    end

    methods

         %CONSTRUCTOR
         function Obj = tcp_test(~)      
             ipobject(Obj);
         end

         %DECONSTRUCTER
         function delete(~) 
         end

         %Create TCPIP Object
         function ipobject(Obj)
             Obj.TCPIP = tcpip('localhost',1000);
             Obj.TCPIP.OutputBufferSize = 30000;
         end
    end
end

该类示例正在处理任何错误输出,但我认识到某些东西似乎无法正常工作。创建类对象“ myTCP = tcp_test”之后,我尝试研究对象“ myTCP.TCPIP”,并意识到它看起来像是空的。实际上,所有必要的属性都已设置,我可以更改它们,只是未显示。

这导致了最初的问题:我想我必须继承tcpip类才能使用该类方法。

由于缺少视觉效果,我仍然觉得自己做错了。

1 个答案:

答案 0 :(得分:0)

我认为这只是缺乏对命令窗口中显示内容的理解-它不是对象的所有属性,有时只是子集。如果在命令窗口中键入get( TCPIP ),将看到所有属性{em>包括 OutputBufferSize。同样,t = tcp_test; get( t.TCPIP )将显示相同的属性。

通过在命令窗口中输入edit tcpip,您可以看到tcpip类具有以下属性:

properties(Hidden, SetAccess = 'public', GetAccess = 'public')
    icinterface
end    

它继承自instrument类,该类不可编辑,并将具有我们无法看到其定义的其他属性。

这里重要的是Hidden属性。来自docs

  

MATLAB不会在命令窗口中显示具有受保护或私有GetAccess的属性的名称和值其“隐藏”属性为true的属性。

这就是为什么您不能查看工作空间中的属性的原因。但是,您可以自由编辑属性,并使用常规get( TCPIP )或特定的get命令查看它们:

outBuffer = get( TCPIP, 'OutputBuffer' );

更简单地通过点索引完成

outBuffer = TCPIP.OutputBuffer;