我试图在MATLAB中运行一个仿真模型,该模型通过python代码通过TCP / IP接收输入并将一些数据发送回python代码。我无法同时同步这两个时间。我的TCP / IP以不同的时间间隔(0.02)发送数据,而我的仿真模型以不同的时间间隔(0.08)运行。我试图固定仿真模型配置中的步长,但没有帮助。有人可以解释吗?
答案 0 :(得分:0)
通常使用TCP / IP连接,执行一次握手以确保在发送下一个数据包之前成功传输数据。
例如python将执行以下操作
# Setup Socket for data transfer
TransferSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host = 'localhost'
port = '5050'
TransferSocket.connect((host,port))
# Get data to send (this case a text file)
f = open("file.txt","rb")
# send message
chunk = f.read(1024)
while (chunk):
TransferSocket.send(chunk) # Send data
Rmsg = TransferSocket.recv(1024) # wait for handshake before sending more
if Rmsg.decode() == "ACK":
chunk = f.read(1024)
else:
pass
已发送包裹,并在发送下一个包裹之前立即等待答复
在matlab中
tcpipServer = tcpip('localhost',5050,'NetworkRole','Server');
set(tcpipServer,'OutputBufferSize',8);
set(tcpipServer, 'BytesAvailableFcnCount',512);
set(tcpipServer, 'BytesAvailableFcnMode','byte');
set(tcpipServer, 'BytesAvailableFcn', @(h,e)recmessage(h,e));
从这里每当收到python的软件包时,函数remessage将运行。函数在下面。
function recmessage(h,e)
message = fread(tcpipServer,tcpipServer.BytesAvailable);
% Do whatever else you want
fwrite(tcpipServer,"ACK");
end
从这里,“确定”将被发送回python并重复。
这是数据传输的基本示例。对于您想要的内容,很可能是数据而不是“确定”的代码。
但是,如果您设置一次握手而不是尝试对其进行计时,它应该可以解决您的问题。