很多做设备维护的朋友问过我同一个问题:现场的西门子S7-1200已经在跑了,手边没电脑,能不能掏个手机就把关键点位的数据看了,甚至改个参数。以前我的回答是“得先装个专用工具”,后来干脆自己写了一套东西。这个项目就是拿C#在VS2019里搭一套手机端组态APP,让手机通过无线WiFi直接跟S7-1200 PLC通信,组态的画面、点位、报警都能在工程文件里改,不用改一行代码。整套源代码工程不只包含APP端,还包括通信封装、组态工程解析和界面运行时,适合搞工控上位机、接私活做设备监控、或者想把手里的S7-1200项目做成手机可看的朋友。
先别急着要源码,我要先泼一盆冷水:手机组态APP和普通的上位机软件完全不同,通信链路变长、现场环境比办公室恶劣得多,很多问题不是代码写不出来,而是整个架构没想清楚。这篇文章我把这个项目的设计思路、通信链路、组态数据模型、关键代码和联调踩坑全部复盘一遍,基本能当一份“复现手册”用。
1. 这套系统的本质:不是写死页面,而是做“可用组态运行时”
1.1 组态APP和写死功能的APP差在哪
很多初学C#的人做PLC监控,最常见的做法是窗体上拖一个TextBox,然后在定时器里不断读DB块,把它填进去。界面简单、点位少的时候完全够用。但一旦到了现场,你会发现需求永远是:把压力显示的控件挪个位置、把某台设备的报警阈值改一下、把电流值从这页挪到那页。这时候如果界面是写死的,每次都要重新编译APK再装一遍,客户还催得紧,基本就是灾难。
组态这个词在工控里的意思,就是“把用户能改的东西全部外置成配置”。我们做手机端监控,不能只做画面,要做一套能解析配置文件的运行时。工程文件里面定义了什么变量、什么画面、什么控件样式,APP启动后就按文件渲染出来,数据源指向哪里就去哪里读。这样一来,现场改点位名称、加一个仪表盘、换一个数据刷新周期,都不需要动代码,只要把新的工程文件发到手机上就能生效。
1.2 这个项目的目标场景和适合谁用
我当初定这个项目范围时,目标场景锁定在以下几个地方:
- 设备调试现场:PLC程序还在调,工程师蹲在设备旁边,用手机就能看DB块里的关键值,不用开电脑连博途。
- 售后远程协助:老板打电话问你设备运行数据,你手机连上现场WiFi就能看到当前温度、压力、设备状态。
- 小型产线巡检:一天走好几条线,每条线配一个WiFi终端,手机轮着连,比拿着对讲机问主控室省事得多。
- 做非标设备的公司:给客户交付设备后,顺带送一个手机监控APP,前提是可维护、可改配置、不产生重复开发成本。
所以说,这套代码的定位不是“又一个串口调试助手”,而是一个“带组态能力的远程监控终端”。如果你需要的只是临时连一次PLC看看数据,不必用这么完整的架构;但如果是给多个现场做通用监控,组态化思路才能救你。
1.3 系统里的三个角色,缺一不可
一套能跑起来的手机监控方案里,看似只是“手机读PLC”,实际包含三个角色:
- S7-1200 PLC:数据源头。通常用自带PROFINET口或CP扩展口,运行在以太网协议栈上。
- WiFi接入链路:让S7-1200的以太网数据包走无线网络,并保证手机处于同一二层网络或可路由网络。
- 手机端的C#运行时:连接PLC的通信服务、组态工程解析器、画面渲染引擎和UI刷新逻辑。
这里的第二点特别重要。S7-1200本体没有WiFi,你要是直接说“手机通过WiFi连PLC”,中间必然有一个无线桥接设备。这个设备怎么选、怎么接、怎么配,直接决定你后面写代码时是爽快还是难受。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. S7-1200没有WiFi口,无线链路到底该怎么做
2.1 四种无线接入方式,哪种适合你的现场
我在标题里写“无线WiFi通信”,不是说PLC插了根天线就行。S7-1200的RJ45口走的是工业以太网,要变成无线,常见有四种做法:
| 方案 | 硬件组成 | 稳定性 | 成本 | 适合场景 |
|---|---|---|---|---|
| 工业无线客户端/AP桥接 | PLC网线接无线终端,手机连同一AP | 高,工业级 | 中 | 固定产线、设备本体监控 |
| 西门子IWLAN模块 | 如CP 1243-1 WLAN,扩展在PLC左侧或由网络管理 | 很高,但配置门槛高 | 高 | 西门子成套系统、移动设备上下线 |
| 家用/商用路由器做WiFi到有线网桥 | PLC插路由器LAN口,手机连路由器SSID | 一般,受环境和电源影响 | 低 | 实验室、调试间、展厅演示 |
| IoT网关中转 | 网关通过有线读PLC,再通过WiFi/4G提供数据和页面 | 高 | 中高 | 远程监控、多协议转换 |
我自己的项目在开发阶段用的是第三种,家用路由器把PLC网线和手机拉到同一个局域网的网段。现场测试版本用第一种,一台工业级无线客户端/AP,既能当无线终端,又能给PLC透传数据包,手机连接后实测定点刷新100ms以内是稳定的。
必须强调一句:如果PLC控制的是有安全风险的设备,比如电机启停、气缸动作,无线链路绝对不建议作为唯一控制通道,尤其是手机这种可能锁屏、断WiFi的终端。无线通信适合监视和参数整定,关键安全信号走硬接线或者独立安全PLC。
2.2 通信协议选型:S7comm、Modbus TCP和OPC UA怎么选
无线链路打通之后,下一个问题是用什么协议跟S7-1200对话。
- S7comm:西门子自己的S7通信协议,默认走TCP 102端口,S7-1200通过“允许来自远程对象的PUT/GET通信”开启外部访问。C#里面用社区生态比较成熟的S7库,能直接读DB、M区、I/O区。
- Modbus TCP:S7-1200通过功能块或固件支持,协议公开、调试简单,但要做数据映射,PLC程序里得把变量搬到一个专门的Modbus保持寄存器区。
- OPC UA:S7-1200高版本固件自带OPC UA服务器,跨平台和安全模型更好,但手机端要做证书管理,开发复杂度比前两者高一些。
这个项目里我选的
