Matlab与Python之间的通信和同步

Matlab与Python之间的通信和同步

MATLAB和Python之间可以按如下流程通信和同步:

  1. Python先搭建起一个"服务台“(服务器),等待MATLAB的”来访"(连接)。

  2. MATLAB主动"敲门"(创建客户端),与Python的"服务台"建立连接。

  3. 连接建立后,它们就可以开始"交谈"(发送和接收数据)了。

    • MATLAB说:“我给你发个1,你收到了吗?”(发送数字1)
    • Python回应:“收到了,我再给你发个2,你看看。”(发送数字2)
    • MATLAB说:“我收到2了,那我再给你发个3。”(发送数字3)
    • Python回应:“我收到3了,我再给你发个4。”(发送数字4)
  4. “交谈"结束后,它们友好地说了”再见“(关闭连接),结束了这次愉快的"握手”。

上述过程可以用于依赖不同语言的多个传感器、设备的控制及其协同。

深入理解MATLAB与Python的"握手":TCP通信的技术细节

首先,让我们来看看Python端的代码:

import socket# 创建TCP服务器
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost', 12345))
sock.listen(1)print('Python: Waiting for connection')
conn, addr = sock.accept()
print('Python: Connected by', addr)

这段代码的作用是创建一个TCP服务器,并等待MATLAB的连接。其中,socket.AF_INET表示使用IPv4地址,socket.SOCK_STREAM表示使用TCP协议。sock.bind(('localhost', 12345))将服务器绑定到本地的12345端口。sock.listen(1)开始监听连接请求,参数1表示允许的最大连接数。

当MATLAB连接到这个服务器时,sock.accept()会返回一个新的socket对象conn,用于与MATLAB进行通信,以及连接的地址addr

接下来,让我们看看MATLAB端的代码:

% 创建TCP客户端对象
t = tcpclient('localhost', 12345);

这段代码创建了一个TCP客户端对象t,并连接到了Python服务器的地址('localhost')和端口(12345)。

连接建立后,MATLAB和Python就可以开始交换数据了。以MATLAB发送数字1为例:

% 发送数字1给Python
disp('MATLAB: Sending 1 to Python');
write(t, int8(1));

write(t, int8(1))将数字1转换为8位有符号整数(int8),并通过TCP连接t发送给Python。

在Python端,可以通过以下代码接收这个数字:

# 等待MATLAB发送数字1
print('Python: Waiting for 1 from MATLAB')
data = conn.recv(1)
print('Python: Received', int.from_bytes(data, byteorder='big'), 'from MATLAB')

conn.recv(1)从TCP连接读取1个字节的数据。int.from_bytes(data, byteorder='big')将这个字节转换回整数。

反过来,当Python发送数字给MATLAB时,使用的是conn.sendall()方法:

# 发送数字2给MATLAB
print('Python: Sending 2 to MATLAB')
conn.sendall(int.to_bytes(2, length=1, byteorder='big'))

int.to_bytes(2, length=1, byteorder='big')将数字2转换为一个字节,然后通过conn.sendall()发送给MATLAB。

在MATLAB端,使用read()方法读取这个数字:

% 等待Python发送数字2
disp('MATLAB: Waiting for 2 from Python');
while t.NumBytesAvailable == 0pause(0.1);
end
data = read(t, 1, 'int8');
disp(['MATLAB: Received ', num2str(data), ' from Python']);

while循环用于等待数据的到来。read(t, 1, 'int8')从TCP连接t读取一个字节,并将其转换为8位有符号整数。

最后,当通信结束时,双方都需要关闭TCP连接:

% 关闭TCP连接
clear t;
# 关闭TCP连接
conn.close()

这就是MATLAB与Python通过TCP进行通信的全部技术细节。虽然语法和函数名称因语言而异,但基本原理是相通的:创建连接,发送数据,接收数据,关闭连接。

完整代码如下:

Matlab端

% 创建TCP客户端对象
t = tcpclient('localhost', 12345);% 发送数字1给Python
disp('MATLAB: Sending 1 to Python');
write(t, int8(1));% 等待Python发送数字2
disp('MATLAB: Waiting for 2 from Python');
while t.NumBytesAvailable == 0pause(0.1);
end
data = read(t, 1, 'int8');
disp(['MATLAB: Received ', num2str(data), ' from Python']);% 发送数字3给Python
disp('MATLAB: Sending 3 to Python');
write(t, int8(3));% 等待Python发送数字4
disp('MATLAB: Waiting for 4 from Python');
while t.NumBytesAvailable == 0pause(0.1);
end
data = read(t, 1, 'int8');
disp(['MATLAB: Received ', num2str(data), ' from Python']);% 关闭TCP连接
clear t;

Python端

import socket# 创建TCP服务器
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost', 12345))
sock.listen(1)print('Python: Waiting for connection')
conn, addr = sock.accept()
print('Python: Connected by', addr)# 等待MATLAB发送数字1
print('Python: Waiting for 1 from MATLAB')
data = conn.recv(1)
print('Python: Received', int.from_bytes(data, byteorder='big'), 'from MATLAB')# 发送数字2给MATLAB
print('Python: Sending 2 to MATLAB')
conn.sendall(int.to_bytes(2, length=1, byteorder='big'))# 等待MATLAB发送数字3
print('Python: Waiting for 3 from MATLAB')
data = conn.recv(1)
print('Python: Received', int.from_bytes(data, byteorder='big'), 'from MATLAB')# 发送数字4给MATLAB
print('Python: Sending 4 to MATLAB')
conn.sendall(int.to_bytes(4, length=1, byteorder='big'))# 关闭TCP连接
conn.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/6476.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入探索HTML与CSS:构建网页的基础

深入探索HTML与CSS:构建网页的基础 文章目录 深入探索HTML与CSS:构建网页的基础一、引言二、HTML:网页的骨架1. HTML文档结构2. HTML常用标签3. HTML表单 三、CSS:网页的装扮师1. CSS基本语法2. CSS选择器3. CSS盒模型4. CSS布局流…

Cisco Firepower FTD生成troubleshooting File

在出现故障时,需要采集信息 FMC上需要采集对应FTD设备的troubleshooting file system -->health -->monitor 选择相应的FTD,右侧点 generate Generate 4 右上角小红点点开 选择里面的task,就可以看到进度,差不多要10分钟以上 5 完成后…

Linux系统的source命令详解

目录 一、命令介绍 二、基本用法 三、使用场景 1、环境变量 2、函数和别名 3、配置文件 三、命令示例 1、一般的脚本文件 2、使用source的效果 四、使用 source 命令的重要性 1、修改当前 shell 会话的环境 2、加载配置文件 3、在当前 shell 会话中测试脚本 五、…

代码随想录算法训练营第24天 | 回溯算法理论基础、77.组合

代码随想录算法训练营第24天 | 回溯算法理论基础、77.组合 回溯算法理论基础自己看到题目的第一想法看完代码随想录之后的想法自己实现过程中遇到哪些困难今日收获,记录一下自己的学习时长 链接: 回溯算法理论基础 链接: 77.组合 拖延了几天又开始回溯的理论基础了&…

基于51单片机的交通灯设计—可调时间、夜间模式

基于51单片机的交通灯设计 (仿真+程序+原理图+设计报告) 功能介绍 具体功能: 1.四方向数码管同时显示时间; 2.LED作红、绿、黄灯 3.三个按键可以调整红绿灯时间; 4.夜间模式&am…

IO流-字符流

字节流:适合复制文件等,不适合读写文本文件 字符流:适合读写文本文件内容 FileReader:文件字符输入流 *作用:是以内存为基准,可以把文件中的数据以字符的形式读取到内存中去 构造器说明public FileReader(File file)创…

IDEA上文件换行符、分隔符(Line Separator)LF,CR,CRLF错乱影响Git上传Github或Gitee代码

IDEA上文件换行符、分隔符(Line Separator)LF,CR,CRLF错乱影响Git上传Github或Gitee代码 指定目录 然后就可以上传了 OK 一定注意更改Line Separator的文件目录 如果是target目录下的文件,是不能修改为LF的,把target文件删除,再重载一次main文件,就…

FFmpeg学习记录(二)—— ffmpeg多媒体文件处理

1.日志系统 常用的日志级别&#xff1a; AV_LOG_ERRORAV_LOG_WARNINGAV_LOG_INFOAV_LOG_DEBUG #include <stdio.h> #include <libavutil/log.h>int main(int argc, char *argv[]) {av_log_set_level(AV_LOG_DEBUG);av_log(NULL, AV_LOG_DEBUG, "hello worl…

【软考高项】三十一、成本管理4个过程

一、规划成本管理 1、定义、作用 定义&#xff1a;确定如何估算、预算、管理、监督和控制项目成本的过程作用&#xff1a;在整个项目期间为如何管理项目成本提供指南和方向 应该在项目规划阶段的早期就对成本管理工作进行规划&#xff0c;建立各成本管理过程的基本框架&…

RKNN Toolkit2 工具的使用

RKNN Toolkit2 是由瑞芯微电子 (Rockchip) 开发的一套用于深度学习模型优化和推理的工具。它主要面向在瑞芯微SoC上进行AI应用开发&#xff0c;但也可以用于PC平台进行模型的转换、量化、推理等操作。它支持将多种深度学习框架的模型&#xff08;如Caffe, TensorFlow, PyTorch等…

LSTM时间序列预测预测值相对比真实值趋势滞后的问题讨论收集

时间序列预测任务&#xff0c;预测值相对比真实值趋势滞后问题_数据预测并对比-CSDN博客 时间序列预测中预测数据相较于真实数据滞后的问题该如何解决&#xff1f; - 知乎 (zhihu.com) LSTM从理论基础到代码实战 5 关于lstm预测滞后性的讨论_哔哩哔哩_bilibili 我在用LSTM时…

单例、工厂、策略、装饰器设计模式

1. 单例模式&#xff08;Singleton Pattern&#xff09;&#xff1a; 单例模式是一种常用的设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供一个全局访问点。这种模式的特点是类自己负责保存其唯一的实例&#xff0c;并控制其实例化过程。单例模式广泛应用…

【hackmyvm】vivifytech靶机

渗透思路 信息收集端口扫描端口服务信息目录扫描爆破hydra--sshgit提权 信息收集 ┌──(kali㉿kali)-[~] └─$ fping -ag 192.168.9.0/24 2>/dev/null 192.168.9.119 --主机 192.168.9.164 --靶机个人习惯&#xff0c;也方便后续操作&#xff0c;将IP地址赋值给一个变…

【R语言数据分析】卡方检验

目录 交叉卡方检验 配对卡方检验 趋势卡方检验 交叉卡方检验 交叉卡方表用于比较组间“率”的差异。适用于分类型变量&#xff0c;被检验的分类变量应该是无序分类变量&#xff0c;分组变量可以是有序分组也可以是无序分组。比如比较两种药物治疗某个疾病的效率&#xff0c;…

Jhipster8禁用liquibase

开发环境添加dev,no-liquibase&#xff1b;

Stable Diffusion AI绘画

我们今天来了解一下最近很火的SD模型 ✨在人工智能领域&#xff0c;生成模型一直是研究的热点之一。随着深度学习技术的飞速发展&#xff0c;一种名为Stable Diffusion的新型生成模型引起了广泛关注。Stable Diffusion是一种基于概率的生成模型&#xff0c;它可以学习数据的潜…

INVS 对时钟二分频器(reg-clkgen)的理解和处理

在时钟树的设计中&#xff0c;有很多方式处理分频时钟&#xff0c;常见的无外乎两种模式&#xff1a; 时钟二分频器&#xff08;reg-clkgen&#xff09;门控时钟 二者在功能上略有不同&#xff0c;比较的大差异是前者可以简单的实现50%占空比&#xff0c;后者却对功耗友好同时…

Maven Could not transfer artifact org.apache.maven.plugins(刚刚创建的项目添加maven依赖报错)

Could not transfer artifact org.apache.maven.plugins解决办法&#xff0c;使用idea工具的过程中&#xff0c;自动导入了idea自己的maven&#xff0c;导致报错&#xff0c;在该项目下重新配置Maven的路径&#xff0c;setting&#xff0c;repo的位置 参考&#xff1a;https://…

Git添加空文件夹

参考文章&#xff1a;https://blog.csdn.net/weixin_41287260/article/details/118057704 https://www.cnblogs.com/adam-ma/p/17982349 为空文件夹添加 .gitkeep 文件(推荐) 这个文件它本身是没有意义的&#xff0c;git好像也没有赋予它特殊使命&#xff0c;更像是团队使用者之…

Python基础学习之sys模块

在Python编程中&#xff0c;sys模块是一个非常重要的内置模块&#xff0c;它提供了与Python解释器及其环境&#xff08;如命令行参数、标准输入输出流等&#xff09;进行交互的接口。今天&#xff0c;我们就来详细探讨一下sys模块的常见用法和功能。 导入sys模块 首先&#x…