搞自动化的人,早晚都会碰上一件事:现场 PLC 和传感器跑得好好的,领导或客户突然问一句——“能不能让我在手机上随时看到数据?”而且这句话通常还带着“尽快”两个字。PLC 传感器对接手机 APP 实现无线监控,本质上已经不是一个做不做的问题,而是怎么又快又稳地做出来的问题。
这条路我走过不止一遍,踩过不少坑,也总结出了一套能直接复用的打法。这篇文章把完整的对接思路、方案选型、实操步骤和排查经验一次性讲清楚,适合设备厂商、工厂设备科、自动化项目集成商,以及想给自己家的设备加远程监控功能的个人开发者和爱好者参考。不管你是刚接触这个领域,还是已经折腾过几轮,都能在这里找到对应的落地方案。
1. 需求拆解:先搞清楚你要监控的到底是什么
1.1 三类最常见的监控目标
很多人一上来就问“怎么对接”,但我建议先回答“对接什么”。PLC 和传感器的监控需求,根据我的实际经验,大致可以分成三类。
第一类是纯数据监控。温度、压力、液位、流量这类模拟量信号,传感器通过变送器输出 4-20mA 或 0-10V 信号,PLC 的模拟量模块接收后换算成工程量,再把这些数值传到手机端展示。这类需求最普遍,通常只需要“看”,偶尔配合个报警推送就够。
第二类是状态监控。设备的运行/停止/故障状态、电机启停、阀门开关,这些是开关量信号。监控的核心往往不只是“此刻是什么状态”,而是状态变化这个事件本身。半夜设备突然故障停机了,谁第一时间知道?这才是状态监控要解决的关键问题。
第三类是控制需求。在手机端远程启动设备、调整参数,这类需求的门槛比前两类高不少,涉及现场安全和责任边界。我个人的建议是:初期先把监控做扎实,控制功能一定要慎重。尤其涉及人身安全、关键工艺参数、突然断电停机这类场景,必须先设计好安全保护策略,再考虑远程控制。控制一时爽,出事就是大事故。
1.2 动手前必须先回答的五个问题
我每接一个项目,会先在纸上列五个问题,回答完基本方案也就出来了。
第一个问题:现场有什么网络条件?厂区有没有局域网,有没有 WiFi,能不能布有线?如果都不行,就要考虑 4G 方案。这个问题直接决定你用 DTU 还是网关,也决定后续的通讯成本和稳定性设计。
第二个问题:PLC 支持什么通讯接口?常见的无非串口(RS485/RS232)和网口(以太网)两类。接口类型直接决定选什么型号的采集传输设备。
第三个问题:传感器是怎么接到 PLC 的?模拟量还是开关量?源头信号类型决定了数据点的定义方式,以及是否需要做工程量换算。
第四个问题:数据量和实时性要求是多少?需要监控多少个点位?多久刷新一次?点名多不多?这直接影响通讯波特率、上传间隔和平台选型。一句话,就一个温度值五分钟看一次,和五十个点位一秒刷新一次,方案复杂度完全不是一个量级。
第五个问题:手机端到底想看到什么?是纯数据、历史趋势、报警推送,还是带远程控制?这个问题的答案,直接决定你是在现成平台配配置就能搞定,还是需要投入开发资源。
这五个问题问完,方向基本就明确了。带着答案往下走,才不会在后面反复返工。
2. 方案选型:通往手机 APP 的三条主流路径
2.1 方案一:PLC + 4G 透传模块(DTU)+ 云平台
这是最经典、也最省事的一条路。DTU 的全称是 Data Transfer Unit,本质是一条透明的数据传输管道。它的一端通过串口或网口连接 PLC,另一端插 SIM 卡走 4G 网络连到云端平台。
DTU 做的事情说穿了很简单,就是把 PLC 串口发出的数据原封不动地搬到云端,再把云端下发的数据原封不动地搬回 PLC。它不解析内容,不关心这些字节是温度还是压力,只负责搬砖。正因为它“傻瓜”,所以配置也简单,稳定性也高。
为什么说这个方案最经典?因为它不碰 PLC 的控制逻辑,也不需要重写梯形图程序。你只需要把 DTU 的串口参数设成和 PLC 一致,设备就能通。手机端一般由云平台配套提供,很多平台自带现成的 APP 或小程序模板,绑定设备后拖几个组件就能生成一个监控页面。
这个方案适合什么情况?PLC 没有网口、现场没有局域网、想一两天内快速上线看数据。我做过好几个这种项目,从拿到设备到手机端看到数据,半天时间就够。
2.2 方案二:边缘网关 + MQTT 协议直连
网关比 DTU 聪明得多。DTU 是傻瓜管道,网关是带“脑子”的边缘计算节点。它能解析 Modbus 等工业协议,主动按照轮询配置去采集 PLC 的数据,然后转换成 MQTT、HTTP 这类物联网协议,上传到自己的 IoT 平台。
边缘网关方案的优势有几个:可以在本地做数据缓存,外网抖动时数据不丢,恢复后自动补传;一个网关能汇聚多台 PLC,一条产线的设备用一个盒子就能管起来;可以做本地报警判断,碰上紧急情况不依赖云端也能给出信号;协议适配能力强,串口、网口、IO 接口往往都有。
这里重点说一下 MQTT 协议。它采取发布/订阅模型,设备作为客户端把数据发布到某个主题,手机 APP 订阅对应主题就能收到数据。好处是省流量、实时性好、连接状态容易感知,非常适合设备到云端的通信。一个典型的 MQTT 数据报文,承载量也就几十个字节,比 HTTP 那种每次都要带一堆头部的协议轻量不少。
边缘网关方案适合什么情况?设备多、点位多、现场有局域网、对数据的实时性和完整性有要求。这个方案前期配置比 DTU 复杂,但后期扩展性和稳定性要好得多。
2.3 方案三:直接吃现成的工业物联网云平台
如果你的需求只是“手机上看数据”,完全没有必要从零开发 APP。现在市面上有很多成熟的工业物联网云平台,注册账号、添加设备、绑定网关,平台会自动生成可用的手机端应用,甚至直接支持微信小程序。
这类平台提供的功能通常包含设备管理、数据看板、历史曲线、报警推送(微信、短信、APP 推送),配置过程基本都是图形化操作,不写一行代码。上手周期一般一两天,遇到不会操作的,照着平台的帮助文档一步步点就行。
我见过一些设备厂商,产品卖出去之后被客户追着要远程监控功能,时间紧、预算低,就是用这类平台快速搭一个白标应用解决的。注意白标和深度定制是两回事,后面想完全按照自己的品牌风格定制页面交互,还是要回归到开发路线,但初期验证需求用平台效率最高。
2.4 三条路线怎么选:一张对比表看清楚
为方便你结合自己的情况判断,我把三条路线的关键维度整理成一张对比表:
| 对比维度 | DTU + 云平台 | 边缘网关 + MQTT | 快速接入现成平台 |
|---|---|---|---|
| 实施难度 | 低 | 中 | 最低 |
| 硬件成本 | 低 | 中 | 视平台收费 |
| 是否改 PLC 程序 | 通常不用 | 可能需配合调整 | 通常不用 |
| 数据安全性 | 一般 | 较好 | 取决于平台 |
| 离线缓存补传 | 无 | 有 | 看平台能力 |
| 适合场景 | 单机远程看数 | 多设备、高要求 | 快速验证、临时需求 |
个人倾向:一两个设备、快速交付,闭眼选方案一;设备多、数据重要,多花点预算也要上方案二;纯属试水验证需求,方案三最快。三条路不冲突,也可以先用方案三验证,再逐步升级到方案二。
3. 核心环节实操:从 PLC 接线到手机端显示的完整链路
3.1 PLC 侧准备:传感器数据如何变成可供读取的数据点
先拉通整条数据链路:传感器 → PLC → 网关/DTU → 云平台 → 手机 APP。每一个环节都有细节,任何一个对不上,最终手机屏幕上就是“无数据”三个字。
传感器接入 PLC,常见的是两种方式。
模拟量方式是连续物理量采集的标准做法。温度、压力、液位这类传感器的变送器输出 4-20mA 电流或 0-10V 电压信号,接到 PLC 的模拟量输入模块。PLC 采集到的原始值是一个整数,比如 0~4000 对应 4~20mA。程序里要做的经典工程量换算公式是:
工程量 = (原始值 / 量程上限) × (物理量程上限 - 物理量程下限) + 物理量程下限
举个例子,一个量程 0~100 摄氏度的温度变送器输出 4-20mA,PLC 在 4mA 时读到 0,20mA 时读到 4000。如果当前读到 2000,对应的工程量就是 (2000 / 4000) × (100 - 0) + 0 = 50 摄氏度。这个换算是把“电信号”还原成“物理意义”的关键一步,建议放在 PLC 程序里完成,手机端只负责显示。
开关量方式是状态信号的常见做法。设备到位信号、故障信号、运行信号,这些只有 0 和 1 两种状态的量,直接接 PLC 的数字量输入点。程序里把这些状态暂存到中间继电器 M 或数据寄存器 D 中,方便外设读取。
为了让网关或 DTU 能准确读到数据,特别建议在 PLC 程序里把需要监控的数据统一规划到固定寄存器区,做一张地址映射表。比如:
| 数据含义 | 寄存器地址 | 数据类型 | 备注 |
|---|---|---|---|
| 一号罐温度 | D100 | 16位无符号 | 实际值乘以10 |
| 一号罐压力 | D102 | 16位无符号 | 实际值乘以100 |
| 二号罐液位 | D104 | 32位浮点 | 高低字组合 |
| 循环泵运行 | M100 | 开关量 | 1运行 0停止 |
| 系统故障 | M101 | 开关量 | 1故障 0正常 |
这张表谁改谁知道价值。项目调试阶段改个地址,有表十分钟搞定,没表可能摸半天。后期运维换人,这张表就是交接的核心文档。
3.2 网关和 DTU 配置:每个参数都是坑,也都不是大坑
拿串口型 DTU 举例,配置时最关键的一步,是把 DTU 的串口参数设置得跟 PLC 完全一致。Modbus RTU 是串口通讯里最常见的协议,我见过太多次“通讯不上”,最后排查发现就是波特率不一致。
Serial 常见的匹配参数组合如下:
- 波特率:9600 或 19200,看 PLC 侧实际设定
- 数据位:8
- 停止位:1
- 校验位:无校验(大多数场合默认)
- 从站地址:PLC 的站号,比如 1
这四个参数只要有一个不一致,两端就“听不见”对方。听起来很基础,但现场着急上线的时候,越基础的问题越容易被忽略。我建议配置完先不要接 PLC,用电脑串口调试工具发一帧 Modbus 报文,能收到正确应答再接入 PLC 侧。
边缘网关的配置逻辑和 DTU 不是一个层次。以常见网关为例,基本会走这几步:
- 给网关通电,用网线把电脑和网关接入同一个局域网
- 浏览器输入网关的默认管理地址,进入配置页面
- 配置串口或网口底层参数,添加一个“设备”,选择 PLC 的品牌和型号
- 添加“数据点”,也就是要采集的寄存器地址,例如“温度 = 保持寄存器起始地址 100,数据类型 16 位无符号,字节序 AB”
- 设置数据上传方式为 MQTT,填上云平台服务器地址、端口、主题和鉴权信息
- 保存并应用配置,观察网关的状态指示灯和采集日志
一个特别容易踩的坑是数据格式。同样是读一个温度寄存器,里面存的是 16 位还是 32 位、是无符号还是有符号、字节顺序是高位在前还是低位在前,这些在网关配置里全都要设置正确。我第一次做这种对接时,温度读出来是个离谱的负数,排查半天,最后才发现是字节序选反了。寄存器里的两个字节本来应该是 A5 0F,平台按 0F A5 去解析,值自然就全乱了。
3.3 云平台配置与 APP 生成:零代码也能出可用页面
云平台那一端的操作,取决于你选的是哪家平台,但主流平台的流程高度相似:
- 注册并登录平台,创建一个产品或者项目
- 添加设备,拿到设备唯一标识,通常是 DeviceKey 之类的字符串
- 把这个设备标识填到网关或 DTU 的配置项里,相当于完成“设备上云”的握手
- 在平台的数据模型定义里逐个添加数据点,和网关采集的地址对应起来
- 创建手机端监控应用,把数据点拖到页面组件上,配置单位、小数位和刷新频率
- 配置报警规则,比如“一号罐温度大于 80 且持续 10 秒”,再选择推送方式
很多平台提供“零代码”的应用搭建能力,选模板、拖组件、绑定数据点,半小时就能出一个能看的监控页面。报警推送一般通过规则引擎配置触发条件,推送到微信、短信或者 APP 通知。这里有个心得:报警条件一定要加“持续时间”,比如持续 10 秒才算报警。不然现场一个干扰脉冲,就能让手机半夜三更响个不停。
3.4 数据流打通与四步测试流程
上线之前,强烈建议按下面的顺序完整测一遍,别等到现场设备全布好了,才发现链路哪个环节还是断的。
第一步:本地联调。电脑用网关自带的调试工具或者串口调试助手,先确认能正常读取 PLC 的寄存器值。这个阶段专门解决地址、数据类型、通讯参数这三类问题。本地都读不到,就不要急着上云。
第二步:网关到云平台联调。开启网关的调试模式,查看日志里 MQTT 消息有没有成功发出,平台端能不能收到。很多网关日志能直接看到原始报文,上报的主题、内容、时间戳一目了然。
第三步:手机端验证。打开 APP 或小程序,确认数据正常刷新、单位显示正确、报警能触发。这步重点检查小数位和量纲,一个温度显示成 500 还是 50.0,视觉感受完全不同。
第四步:长时间稳定性观察。至少连续跑 24 到 48 小时,重点关注掉线频率、数据断档时长、网关是否死机、流量消耗是否异常。这一关过了,再谈正式交付。
四步下来,链路里绝大多数问题都会提前暴露,现场交付就从容多了。
4. 常见问题与排查技巧实录
4.1 通讯不上或者频繁掉线
这类问题占比最高,按照我踩坑的经验,依次排查下面几项,八九不离十。
通讯参数不一致。波特率、校验位、站地址对不对?最可靠的办法是两端设备页面逐项核对,别凭记忆,也别听别人说“应该是 9600”,直接到 PLC 侧菜单里看实际值。
RS485 接线质量问题。RS485 是差分信号,A/B 两根线接反了直接不通;屏蔽层最好单端接地;传输距离超过百米,终端电阻一定要接上。很多现场“时通时断”的怪症状,最后都是接线压线松动或屏蔽层没接对造成的。
电源容量不足。4G 模块在发射瞬间的电流需求比平均功耗大得多,如果电源余量不够,就会出现一种典型现象:上电时指示灯正常,一旦开始传输数据就重启。这个坑我吃过,后来所有远传模块都单独配电源,再没犯过。
SIM 卡状态异常。信号强度、流量余量、是否被运营商限速,全部确认一遍。偏远现场信号差,优先选支持外接天线的模块。别小看天线位置,从设备机柜里挪到机柜顶部,信号强度可能差出一大截。
4.2 数据抖动、读数明显不对
数据跳动或者数值离谱,最常见的原因是数据格式理解错误。把 32 位浮点数当 16 位整数读,或者字节序搞反,读出来的值当然是乱的。解决办法是把数据点类型设对,涉及 32 位数据时,确保两个连续寄存器的高低位组合顺序正确。
另一个容易忽略的点是模拟量采集的滤波。现场变频器、电机启停会产生电磁干扰,传感器信号本身可能就有毛刺。如果 PLC 程序里没有做滤波或取平均值处理,上传到手机的数据就会乱跳。建议在 PLC 侧做一次平滑处理,宁可损失一点实时性,也要保证手机端看到的是稳定的值。
延迟问题则要看上传频率设置。实时性要求高的场景,可以把上传间隔调短到 5 秒,但要注意 4G 流量成本会上升;只是日常巡检的场景,30 秒甚至 1 分钟刷新一次完全够用。报警类数据尽量走事件触发机制,而不是靠周期轮询,这样既省流量又更快。
4.3 安全底线:远程监控不是装完就不管了
设备联网之后,安全这件事必须认真对待。我见过一些项目,把 PLC 的通讯端口直接暴露在公网,没有任何认证防护,这是非常危险的做法。生产设备不是普通摄像头,出了问题轻则停产,重则危及人身安全。
以下几个底线建议值得记住:
第一,不要让 PLC 直接暴露在公网。数据尽量走带鉴权的云平台中转,PLC 只和网关通讯,网关主动向外连接,现场侧不开任何入站端口。
第二,云平台账号务必开启强密码和二次验证。很多平台的默认弱口令没人改,这等于把设备房钥匙挂在门口。
第三,如果确实要远程调试 PLC,使用带加密通道的远程维护方案,操作完及时关闭调试口。
第四,涉及远程控制的场景,平台必须有操作权限分级,按角色分配控制权,所有控制操作留操作日志,做到有据可查。
监控是“看”,控制是“动手”,动手必须有规矩。
4.4 避坑清单:直接把经验给你
这些坑都是真金白银换来的,整理成清单,照着避:
- 千万不要跳过地址映射表直接开工。前期省十分钟,后期改数据点能让你怀疑人生。
- 模拟量换算尽量放在 PLC 程序里完成,手机端只负责显示。换到 APP 端做,换一个设备就要重新配一次,还容易出现单位不一致的问题。
- 现场网络条件不确定时,优先选择支持离线缓存和自动补传的网关。外网断了,现场数据不能丢。
- 报警阈值一定要加持续时间条件。瞬时波动触发误报,会把真正重要的报警淹没。
- 交付时把网关配置导出备份。半年后设备更换,直接恢复配置即可,不用从头再配一遍。
5. 一点实操体会,留在最后
做了几个这类项目之后,我最大的感受是:PLC 接手机 APP 这件事,真正的难点不在技术,而在需求边界。越早把“监控什么、多久看一次、谁来看、看到之后需不需要有人处理”这几个问题聊透,后面的方案就越清晰。很多项目折腾半天,最后发现客户其实只需要每天早中晚各看一次温度,根本不用高实时性的大平台。
技术选型上,我的建议很直接:只有一两台设备要加远程查看功能,选 DTU 加现成云平台,别自己写 APP;设备多、点位多、对数据可靠性要求高,就上边缘网关加 MQTT;纯粹验证想法,用零代码平台搭一个最快。
最后分享一个用了很久的小经验:不管选哪条路径,先做一个最小可用的“哑链路”——只传一个温度值,在手机屏幕上看到它随着现场加热变化而跳动——再把其他数据点逐步加进去。第一条链路通了,后面就是复制、粘贴、改地址的工作;第一条链路不通,配再多数据点也是白搭。每次做新项目,我都会刻意提醒自己先走通这一个点,这个习惯帮我省掉了无数次现场返工。