适用场景:工控入门、Modbus RTU串口通信仿真、可燃气体传感器数据模拟、零基础闭环通信测试
实验工具:VSPD(虚拟串口工具)、Modbus-Slave(从站/模拟采集器)、Modbus-Poll(主站/模拟网关)
实验核心目标:搭建虚拟485通信链路,模拟「采集器从站上传数据,网关主站轮询读取数据」的完整流程,完成可燃气体传感器数值仿真换算。
提前避坑:全程使用虚拟串口,无需物理硬件,零基础可复刻;严格区分主从站串口,禁止使用COM1,避免硬件冲突。
一、实验整体原理
本次实验通过VSPD搭建一对互通的虚拟串口,模拟真实485通信总线;
搭配分工:
● Modbus-Slave(从站):模拟现场可燃气体采集设备,绑定COM2,生成原始传感器数据
● Modbus-Poll(主站):模拟网关/上位机,绑定COM3,定时轮询读取从站寄存器数据
● VSPD:搭建COM2↔COM3虚拟通信链路,实现双向数据互通
二、第一步:VSPD 虚拟串口配对(搭建通信链路)
- 操作目标
创建一对互通虚拟串口COM2 ↔ COM3,替代物理485通信线,全程无硬件需求。 - 详细操作步骤
- 打开VSPD工具,进入主配置界面;
- First port(第一个串口) 下拉选择:COM2;
- Second port(第二个串口) 下拉选择:COM3;
❗核心禁忌:严禁选择COM1,电脑主板普遍自带物理COM1,直接触发端口冲突、实验报错; - 点击右下角 Add virtual pair(添加虚拟配对串口);
- 左侧空白列表出现 COM2 <–> COM3,代表虚拟通信线路创建成功。
- 固定端口分配规则(必记)
● 从站(Modbus-Slave、模拟采集器)→ 固定使用 COM2
● 主站(Modbus-Poll、模拟网关)→ 固定使用 COM3
三、第二步:Modbus-Slave 从站配置(模拟采集器)
本步骤配置模拟传感器从站,创建保持寄存器,写入可燃气体测试原始数据。
- 串口连接配置
- 打开Modbus-Slave,点击顶部菜单栏 Connection → Connect…;
- 弹窗参数严格填写如下:
● Connection类型:Serial Port(串口模式)
● Port:COM2
● Baud Rate(波特率):9600
● Data bits(数据位):8
● Parity(校验位):None(无校验)
● Stop bits(停止位):1
● Slave ID(从站地址):1 - 点击【OK】,界面左上角红色 No connection 文字消失,代表串口打开成功。
- 寄存器参数配置
- 顶部菜单点击 Setup → Slave Definition(从站定义);
- 参数配置:
● Function(功能码):03 Holding Registers(保持寄存器,工控常用读取功能码)
● Start Address(起始地址):0
● Quantity(寄存器数量):6 - 点击【OK】完成寄存器创建。
- 写入实验测试数据
双击地址0的寄存器单元格,输入传感器原始数据:5243(对应课件8%LEL可燃气体案例);
地址1-5寄存器默认保留0即可,无需修改。
✅ 至此,虚拟采集从站配置完成,等待主站网关读取数据。
四、第三步:Modbus-Poll 主站配置(网关轮询读取)
本步骤模拟上位机网关,通过虚拟串口轮询读取从站寄存器数据,完成通信闭环。
- 主站串口连接
- 打开Modbus-Poll,点击顶部菜单 连接© → Connect…;
- 弹窗参数与从站保持一致:
● Connection类型:Serial Port
● Port:COM3
● Baud Rate:9600
● Data:8
● Parity:None
● Stop:1 - 点击【OK】,红色 No connection 消失,串口连接成功。
- 配置轮询读取规则
- 按下快捷键 F8 打开读写定义配置窗口;
- 参数配置:
● Slave ID:1(与从站地址一致)
● Function:03 Read Holding Registers(读取保持寄存器)
● Start Address:0
● Quantity:6
● Scan Rate:1000(1秒自动轮询一次) - 确认保存,软件自动刷新轮询数据。
✅ 当表格0号寄存器稳定读取到 5243,代表 完整通信闭环实验成功!
五、关键参数核对检查表(一键自查)
实验报错90%源于参数不统一,可对照下表逐一核对:
软件角色 绑定串口 波特率 参数格式 从站ID 寄存器起始地址 寄存器数量
Slave从站(采集器) COM2 9600 8-N-1 1 0 6
Poll主站(网关) COM3 9600 8-N-1 1 0 6
六、实验数据换算(可燃气体浓度案例)
读取到原始数据raw=5243,按照工控通用算法换算气体浓度:
- %LEL 爆炸下限浓度换算
%LEL=(5243÷65535)×100≈8.0%LEL\%LEL = (5243 \div 65535) \times 100 \approx 8.0 \%LEL%LEL=(5243÷65535)×100≈8.0%LEL - %VOL 体积浓度换算(甲烷通用比例 100%LEL=5%VOL)
甲烷VOL浓度=8÷100×5=0.4%VOL\text{甲烷VOL浓度} = 8 \div 100 \times 5 = 0.4 \%VOL甲烷VOL浓度=8÷100×5=0.4%VOL
七、高频报错问题修复(重点:十六进制输入错误)
- 问题现象
双击寄存器单元格,弹出十六进制输入框,输入5243数值异常、数据错乱,无法正常通信。 - 问题根源
软件误开启 ASCII-Hex 十六进制显示模式,默认将输入数值识别为十六进制,而非十进制。 - 一步根治修复方法
打开Modbus-Slave/Modbus-Poll顶部 Display 下拉菜单,点击选择:Unsigned(无符号十进制)。
操作后,ASCII-Hex前方勾选自动消失,双击单元格恢复普通十进制输入框,可直接输入5243。 - 显示模式参数说明
● Unsigned(无符号十进制) ✅ 实验首选,适配16位寄存器(0-65535),完美匹配传感器原始数据
● Signed(有符号十进制):适用于需要负数数值的场景
● Hex(十六进制):工控底层调试使用,本实验无需开启
● ASCII-Hex:ASCII十六进制混合模式,禁止在本实验使用
八、常见故障排查大全
- Poll持续报错Err
● 排查串口是否选反(从站COM2、主站COM3,不可互换)
● 核对两端波特率、校验位、数据位、停止位是否完全一致
● 检查从站Slave是否提前完成连接,未处于待机状态 - 主站读不到任何数据
❗ 启动顺序硬性要求:必须先打开Slave连接COM2,再启动Poll连接COM3;顺序颠倒会直接通信失败,端口占用报错。 - 数值读取不一致
检查是否未切换Unsigned十进制模式,存在十六进制数值解析错误。
九、实验总结
本次实验通过三款工具搭建了纯软件的Modbus RTU串口通信闭环,无需任何物理设备,完整复刻了工业现场「传感器采集+网关轮询」的工作流程。熟练掌握该仿真流程,可快速理解485串口通信、Modbus功能码、寄存器数据读取与换算原理,是工控调试、物联网上位机开发的基础入门实验。
后续可基于本实验,拓展多寄存器数据、不同功能码、异常参数调试等进阶操作。
&spm=1001.2101.3001.5002&articleId=164270019&d=1&t=3&u=4872b00828424c559a3c8f9666b8b6fd)
562

被折叠的 条评论
为什么被折叠?



