You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 17:48:01