如何实现MATLAB Simulink与Processing的串口通信及数值传输
实现步骤
1 Simulink侧(COM1)配置
你需要用到Instrument Control Toolbox中的Serial Send模块,搭配Byte Pack模块完成不同类型数据的字节序列化,基础配置如下:
- 打开
Serial Send参数面板,端口选择COM1,波特率统一设置为9600(可自行调整,需和Processing侧一致),数据位8、停止位1、无奇偶校验、流控制关闭 - 字节顺序统一选择小端模式,避免两端解析不匹配
1.1 发送整数类型数据
- 拖入
Byte Pack模块,设置输入数据类型为你需要传输的整数类型(如int8/int16/int32),输出数据格式设为uint8字节流 - 将需要发送的整数信号连接
Byte Pack输入,Byte Pack输出直接连接Serial Send的输入端口即可
1.2 发送浮点类型数据
- 拖入
Byte Pack模块,设置输入数据类型为single(对应Processing侧的32位float类型),输出数据格式设为uint8字节流 - 将需要发送的浮点信号连接
Byte Pack输入,Byte Pack输出直接连接Serial Send的输入端口即可
2 Processing侧(COM2)配置
首先确认已导入Processing官方串口库,以下分别提供整数和浮点数据的接收示例代码:
2.1 32位整数接收示例
import processing.serial.*; Serial myPort; int receivedInt; void setup() { size(200, 200); // 初始化串口,参数需和Simulink完全匹配 myPort = new Serial(this, "COM2", 9600); // 开启小端模式,和Simulink配置对应 myPort.setLittleEndian(true); } void draw() { // 32位整数占4字节,缓冲区字节数足够再读取,避免错包 if (myPort.available() >= 4) { receivedInt = myPort.readInt(); println("接收整数:" + receivedInt); } }
2.2 单精度浮点数接收示例
import processing.serial.*; Serial myPort; float receivedFloat; void setup() { size(200, 200); myPort = new Serial(this, "COM2", 9600); myPort.setLittleEndian(true); } void draw() { // 32位浮点数占4字节,缓冲区字节数足够再读取 if (myPort.available() >= 4) { receivedFloat = myPort.readFloat(); println("接收浮点数:" + receivedFloat); } }
3 注意事项
- 两端串口的所有配置参数必须完全一致,否则会出现乱码、无法接收的问题
- 运行Simulink模型前不要占用COM1端口,运行Processing程序前不要占用COM2端口,虚拟串口对需保持连通状态
- 如果需要同时传输多组不同类型数据,可自定义简单帧协议(比如开头加固定字节的帧头),避免数据串包
内容的提问来源于stack exchange,提问作者Mohammad Javad Ahmadi
相关产品推荐
相关产品推荐

