我想在类中创建一个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对象,该方法将变量保存在类属性中(如前所述)。
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类才能使用类方法。
我仍然觉得我仍然在做错事,因为缺少了观感。

最佳答案

我认为这只是缺乏对命令窗口中显示的内容的理解——它不是对象的所有属性,有时只是一个子集。如果在命令窗口中键入get( TCPIP ),您将看到包括OutputBufferSize在内的所有属性。类似地,t = tcp_test; get( t.TCPIP )将显示相同的属性。
从在命令窗口中键入edit tcpip可以看出,tcpip类具有以下属性:

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

它继承了不可编辑的instrument类,并且将具有我们看不到其定义的其他属性。
这里重要的是Hidden属性。从docs开始:
Matlab不会在命令窗口中显示具有受保护或私有GetAccess的属性或隐藏属性为true的属性的名称和值。
这就是为什么在工作区中看不到属性。但是,您可以自由编辑属性,并使用Generalget( TCPIP )或特定的get命令查看它们:
outBuffer = get( TCPIP, 'OutputBuffer' );

更简单地完成点索引
outBuffer = TCPIP.OutputBuffer;

09-07 05:57