1. 项目概述:工业设备通讯的实用案例
在工业自动化现场,PLC与测量仪表的通讯一直是工程师们的日常挑战。最近我在一个设备监控项目中,成功实现了三菱FX3U PLC与福禄克8808A数字万用表的数据交互,整个过程踩过不少坑,也积累了一些实用经验。这个案例特别适合刚接触工业通讯的工程师,因为用到的都是经典设备——三菱FX3U系列PLC在中小型自动化项目中应用广泛,而福禄克8808A则是实验室和产线常见的6位半高精度台式万用表。
这个通讯方案的核心价值在于:通过PLC直接读取万用表的测量数据,省去了人工抄表的麻烦,实现了电压、电流等参数的自动记录和判断。比如在电源老化测试中,可以实时监测输出电压波动;在电机测试中,能自动记录工作电流曲线。相比动辄上万的专用数据采集系统,这套方案成本不到万元,却能达到相近的测量精度(8808A直流电压精度达±0.015%)。
2. 硬件配置详解
2.1 设备选型考量
选择FX3U-32MT主机主要考虑到:
- 32点I/O满足多数检测设备的控制需求
- 内置的RS422接口可通过扩展板转换为RS232
- 支持基本的串口通讯指令
- 性价比高(市场价格约3000-4000元)
FX3U-232-BD通讯板是专为FX3U设计的RS232扩展模块,直接插在PLC本体上,不占用额外空间。相比外置的通讯适配器,这种板载方案更可靠,接线也更简洁。
福禄克8808A的选型理由:
- 支持标准SCPI指令集(可编程仪器标准命令)
- 提供RS232接口(无需额外购买GPIB或USB转换器)
- 基本DCV测量速率可达1000次/秒
- 市场保有量大,二手设备价格约2000-3000元
2.2 硬件连接实操
接线时需要特别注意:
- 使用DB9-RJ45转接头连接8808A的RS232口
- FX3U-232-BD的接线定义:
- 2脚(RXD)接万用表的3脚(TXD)
- 3脚(TXD)接万用表的2脚(RXD)
- 5脚(GND)对接
- 务必断开PLC和万用表的电源再进行接线
- 推荐使用带屏蔽层的串口线,长度不超过15米
重要提示:FX3U-232-BD的通讯端口是非隔离的,如果现场干扰严重,建议在PLC侧加装信号隔离器。我曾在一个变频器附近的项目中,因未加隔离导致通讯误码率高达30%,加上隔离器后立即降为0%。
3. 通讯协议深度解析
3.1 万用表指令集
8808A采用SCPI标准指令,常用命令包括:
MEAS:VOLT:DC?查询直流电压MEAS:CURR:DC?查询直流电流MEAS:RES?查询电阻值SYST:ERR?查询错误信息
每条指令必须以\r\n结尾(回车换行符),对应ASCII码是0x0D和0x0A。例如读取直流电压的完整指令是MEAS:VOLT:DC?\r\n。
3.2 PLC端程序详解
3.2.1 通讯初始化优化
原始程序中的初始化可以改进为:
ladder复制LD M8000
MOV K9600 D8120 // 波特率9600
MOV H000C D8121 // 8N1无校验
MOV K100 D8129 // 设置接收超时100ms
SET M8161 // 启用8位数据处理模式
新增的MOV K100 D8129设置了接收超时,避免通讯中断时PLC死等。SET M8161确保正确处理8位数据,防止符号位错误。
3.2.2 数据发送的工业级实现
改进后的发送程序:
ladder复制LD X0 // 使用物理按钮触发
OR M100 // 或自动触发标志
ANI T0 // 防抖处理
OUT T0 K10 // 10ms防抖定时器
MOV ASCII"MEAS:VOLT:DC?" D100 // 直接写入ASCII指令
MOV K13 D101 // 指令长度13字节
RS D100 D101 D200 K20 // 接收缓冲区预留20字节
这里使用了ASCII直接写入功能(GX Works2支持),比手动转换16进制更直观。接收缓冲区扩大为20字节,确保能容纳万用表返回的全部数据(典型返回如"+1.23456E+0\r\n"共13字节)。
3.2.3 数据解析进阶技巧
接收处理程序增强版:
ladder复制LD M8123 // 接收完成
MOV D200 D300 // 转存数据
CALL P0 // 调用解析子程序
// 子程序P0
LD SM400 // 常ON触点
FNC12 FLT D300 D310 // 将ASCII转为浮点数
EMOV D310 D320 // 工程值转换
新增的浮点转换指令(FNC12)可以直接将"1.23456E+0"这样的字符串转为PLC能处理的浮点数。D320中存储的就是可直接使用的电压值,单位是伏特。
4. 工程实践中的疑难解答
4.1 典型故障排查表
| 故障现象 | 可能原因 | 解决方案 |
|---|---|---|
| 通讯完全无响应 | 接线错误 | 检查TXD/RXD是否交叉连接 |
| 收到乱码 | 波特率不匹配 | 确认双方波特率一致 |
| 数据截断 | 接收缓冲区不足 | 增大RS指令的接收长度参数 |
| 偶发通讯失败 | 接地不良 | 检查GND连接,必要时单端接地 |
| 返回"-9.9E+37" | 万用表量程过载 | 检查被测信号是否超出量程 |
4.2 稳定性提升技巧
-
电源隔离:为PLC和万用表配置独立的隔离电源,我测试发现共地干扰会导致约0.5%的测量偏差。
-
数据校验:在PLC程序中添加简单的校验和验证:
ladder复制LD M8123 FNC10 SUM D200 K10 D400 // 计算前10字节的和 CMP D400 K123 // 假设校验和应为123 OUT Y0 // 校验通过指示灯 -
看门狗机制:添加通讯超时监控,5秒无响应则报警:
ladder复制LD M8000 OUT T1 K5000 LD T1 SET M100 // 触发报警 RST M8122 // 停止发送
5. 项目扩展应用
5.1 多仪表组网方案
通过RS232转RS485转换器,可以实现1台PLC连接多台8808A(最多32台)。需要修改:
- 万用表地址设置(
SYST:COMM:RS485:ADDR 1) - PLC程序中的设备寻址(在SCPI指令前加
@1等地址前缀)
5.2 数据记录与云传输
结合三菱的FX3U-ENET-L以太网模块,可以将测量数据上传到数据库。典型架构:
code复制8808A → FX3U → FX3U-ENET-L → 本地服务器 → 云平台
5.3 自动化测试集成
通过扩展以下功能,可构建完整测试系统:
- 用PLC的Y0-Y3控制继电器切换测量点位
- 通过D/A模块输出模拟信号校准万用表
- 用GX Works2的报表功能生成测试报告
在实际项目中,这套系统已经稳定运行超过2000小时,累计采集数据超百万条。最关键的心得是:工业通讯必须考虑防错和容错机制——我的程序里添加了三级超时判断(指令响应、数据返回、整体通讯),任何一级超时都会触发自动重试(最多3次)并记录故障代码,这对后期维护非常有用。