matlab下PC2PC网口通信操作

来源:互联网 发布:centos 五笔输入法 编辑:程序博客网 时间:2024/05/18 03:10
准备:操作系统xp两台pc, matlab为2011a版本(或以上)
网线直连,设置两台PC为同一局域网内(如192.168.1.101与192.168.1.102);

PC1:发端
>> data = membrane(1); %生成数据
>> s = whos('data'); %提取数据参数
>> tcpipServer = tcpip('0.0.0.0',55000,'NetworkRole','Server'); %设置对象属性
>> set(tcpipServer,'OutputBufferSize',s.bytes); %设置缓存长度
>> fopen(tcpipServer); %打开对象
>> fwrite(tcpipServer,data(:),'double'); %写入数据



PC2:收端
>> tcpipClient=tcpip('192.168.1.102',55000,'NetworkRole','Client')%设置对象属性
>> set(tcpipClient,'InputBufferSize',7688); %设置缓存长度
>> set(tcpipClient,'Timeout',30); %设置连接时间
>> fopen(tcpipClient); %打开连接对象
>> rawData=fread(tcpipClient,961,'double'); %接收数据,为行向量
>> data1=reshape(rawData,31,31); %数据整理
>> surf(data1) %绘图



注意:在PC1上打开对象时,若PC2连接对象尚未打开,则PC1 workspace中一直显示busy,当PC2连接对象打开后,PC1中对象打开成功后,才可以写入数据。

上述程序用到的matlab函数解析:

whos:在matlab中whos用于列出当前工作空间中所有变量,以及它们的名字、尺寸(比如一个矩阵或数组的行列维数)、所占字节数、属性等信息。这些信息都显示在matlab中的workspace窗口中。

tcpip:创建tcpip客户端或服务器对象

用法:OBJ = tcpip('RHOST') 创建一个tcpip客户端或服务器对象,OBJ,该对象与远程主机RHOST相关联,默认的远端端口值为80。为了与器械,对

象,OBJ通信,必须将RHOST与FOPEN函数连接。

OBJ = tcpip('RHOST', RPORT) 建立一个tcpip对象,OBJ,远端主机RHOST和远端端口值RPORT相关联。默认情况下,选择了tcpip客户端支持。当tcpip对象被建立后,对象的状态特性被关闭。一旦对象以FOPEN函数与host相连接,状态属性被配置为打开。


OBJ = tcpip(..., RPORT, 'P1',V1,'P2',V2,...)建立了一个带有指定特性值的tcpip对象。如果对象被指定了一个无效的属性名或属性值,则对象不能被建立。注意:属性值对可以是SET函数支持的任意格式,即参数值字符串对,结构体以及参数值单元阵列对。

多归属主机中默认的本地主机是系统默认值。本地端口默认为[ ],它会使任意自由的本地端口被拾取以作为本地端口。当FOPEN被发出时,本地端口属性被更新。

'NetworkRole'的属性值对,‘服务器’将引起tcpip阻塞,并等待当FOPEN函数被调用时,与远端主机匹配的一个远程客户机的连接。在受信任的环境中,远程主机可能被设置为“0.0.0.0”的通配符地址,以接受来自任何单一客户端的连接。当一个有效的连接打开时,tcpip RemoteHost将被设置为连接的客户机的地址。

任何时候,你都可以查看tcpip函数的完整单具有帮助功能的属性,instrhelp tcpip。


fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。其调用格式为:
COUNT=fwrite(fid,A,precision)
说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。缺省数据精度为uchar,即无符号字符格式。
例6.8 将一个二进制矩阵存入磁盘文件中。
>> a=[1 2 3 4 5 6 7 8 9];
>> fid=fopen('d:\test.bin','wb')   %以二进制数据写入方式打开文件
fid =
  3           %其值大于0,表示打开成功
>> fwrite(fid,a,'double')
ans =
  9           %表示写入了9个数据
>> fclose(fid)
ans =      
  0           %表示关闭成功


Matlab中fread函数用法
“fread”以二进制形式,从文件读出数据。
语法1:[a,count]=fread(fid,size,precision)
语法2:[a,count]=fread(fid,size,precision,skip)
size:    不指定     :到尾返回读。
          N         : 读出N个数据,构成列向量。
          inf       : 读出fid指向的打开的文件的全部数据。
          [M,N]     : 读出N个数据,构成列向量,填入M*N矩阵

precision(精度)
precision(精度)规定了以浮点数、整型数、字符读出时位。matlab 的precision(精度)的表达式与c语言、fortran语言、是一致的。不规定precision(精度),则字符默认为: ucher、则数值默认为:双精度 。
以下precision(精度)将保证读出具有一致的体积。
MATLAB           C or Fortran             Descriphon(精度)
'char'               'char*l'                      8 位,字符型
'uchar'             'unsigned char'          8 位 
'schar'              'signed char'             8 位,字符型
'int8'                'integer*1'                8 位,整型数
'intl6'               'integer*2'                16 位,整型数.
'int32'              'integer*4'                32 位,整型数.
'int64'              'integer*8'                64 位,整型数
'uint8'              'integer*l'                 8 位 
'uintl6'             'integer*2'                16 位 
'uint32'            'integer*4'                32 位 
'uint64'            'integer*8'                64 位 
'float32'           'real*4'                   浮点数, 32 位
'float64'           'real*8'                   浮点数, 32 位

以下precision(精度)将不保证读出具有一致的体积。
MATLAB           C or Fortran            Descriphon(精度)
'short'              'short'                     16 位,整型数
'int'                  'int'                         32 位,整型数
'long'               'long'                       32 (64) 位,整型数
'uShort'           'Unsigned short'        16 位 
'uint'               'Unsigned int'            32 位 
'ulong'            'unsigned long'          32 (64) 位    
'float'              'float'                      浮点数, 32 位
'double'           'double'                  浮点数, 64 位

以下precision(精度)规定读出指定的体积n。
'bitN'          N位,整型数      1<=N<=64
'ubitN'         N位,            1<=N<=64





原创粉丝点击