我想在类中创建一个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的属性的名称和值。
这就是为什么在工作区中看不到属性。但是,您可以自由编辑属性,并使用General
get( TCPIP )
或特定的get
命令查看它们:outBuffer = get( TCPIP, 'OutputBuffer' );
更简单地完成点索引
outBuffer = TCPIP.OutputBuffer;