在最近的项目中,MATLAB/Simulink需要用到Python语言搭建的深度学习算法检测结果进行仿真,在最简单的利用mat文件进行离线仿真的基础上,经过一系列的调研,决定使用TCP通信进行数据的传输。

以前通过一个简单的例子实现Python与Matlab的简单TCP通信。具体思路如下:

  • 利用python搭建服务端,一旦有客户端连接上,并且受到发送请求,便发送一个数据过去,关闭连接;
  • Matlab中搭建客户端,连接服务端成功后发送请求,后接收数据,关闭连接;
  • 本示例中,利用python服务端向matlab客户端发送正弦波;

首先是利用Python搭建出TCP服务端(server):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import socket
import math
import time

tcpServer = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcpServer.bind(('127.0.0.1',5432))
#一共可以有5+1个客户端和服务器连接
tcpServer.listen(5)

precent = 0.1
step = 0

while True:
s=str(math.sin(step*precent))
# 等待客户请求
connection,address = tcpServer.accept()
# 打印客户端地址
print("client ip is:",address)
buf = connection.recv(40960)
if buf.decode('utf-8') == 'yes':
# 发送数据
connection.send(bytes(s, encoding="utf-8"))
print("{:3d},send:\t{}".format(step, s))
step += 1
connection.close()
time.sleep(0.1)
# 关闭服务器
tcpServer.close()

Matlab中搭建客户端,在Matlab中利用编写以下脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
clc;
clear;

tcpclient = tcpip('127.0.0.1', 5432, 'Timeout', 60,'OutputBufferSize',10240,'InputBufferSize',10240);
data_all = [];
while 1
fopen(tcpclient);
fwrite(tcpclient,'yes');
while ·
nBytes = get(tcpclient,'BytesAvailable');
if nBytes>0
break;
end
end
receive = fread(tcpclient,nBytes);%读取tcp服务器
disp(char(receive'));
fclose(tcpclient);
data=str2num(char(receive'));
data_all = [data_all,data];
pause(0.1);
plot(data_all)
end
delete(tcpclient);

结果:

参考

它终于来了!!!——Python向MATLAB传递数据

Matlab(Client)和Python(Server)进行TCP通信