干工控这么多年,被上位机折腾的次数可不少。很多项目现场其实并不需要一整套上位机,只是想把触摸屏上的报警记录、产量数据、配方文件定时同步到工控机里,方便月底统计、故障追溯和生产报表汇总。以前遇到这种需求,我第一反应是写一个C#或者LabVIEW上位机,后来发现完全是杀鸡用牛刀,开发周期长、现场维护麻烦,客户换一台电脑就得重新装一堆环境。后来我换了个思路:用MCGS触摸屏自带的文件管理能力,对接工控机上搭好的FTP服务器,让触摸屏按策略自动把文件传过去,彻底把上位机这个中间环节砍掉了。这套方案我在几个现场实跑过,稳定省心,而且核心配置熟练之后5到10分钟就能搞定。这篇文章就把完整的搭建思路、操作步骤和踩坑记录整理出来,给同样被"要不要做个上位机"困扰的朋友做个参考。
1. 为什么我决定告别上位机,改成MCGS触摸屏+FTP
1.1 传统上位机方案到底卡在哪
很多人一听到"文件自动同步",下意识就觉得必须写个上位机软件。早期我也这么干:用Visual Studio开发个C#程序,界面放上数据显示、文件上传、日志查询几个窗口,再通过Modbus TCP或者OPC从MCGS触摸屏里读数据,最后把数据写入工控机数据库。这套东西做完确实功能完整,但问题也接踵而来。
首先是开发成本。一个稍微像样的上位机,光界面布局、按钮逻辑、异常重连、数据校验这些基础功能,至少得花两三天。如果还要做权限管理、报表导出、历史曲线,周期直接奔着一两周去。更麻烦的是后期维护,现场工控机系统版本五花八门,今天客户换台电脑,明天系统更新个补丁,后天.NET环境出问题,都得你远程处理。
其次是资源占用。上位机常驻工控机,占用内存、CPU不说,还要处理杀毒软件拦截、系统休眠、网络掉线等一系列问题。很多现场工控机同时跑着PLC编程软件、组态软件、数据库,再塞一个上位机进去,运行卡顿是常事。
最后是杀鸡用牛刀。需求如果只是"把几个文件定时从触摸屏拷到工控机",为这个专门做一个上位机,性价比实在太低。这也促使我重新思考:文件同步这件事本身是标准诉求,为什么不能用一个标准协议解决?
1.2 MCGS触摸屏+FTP的思路是怎么来的
FTP是文件传输协议,几乎所有操作系统和工控设备都支持,它天然就是解决"文件从A到B"的。MCGS触摸屏虽然主要干HMI的活儿,但它本质上有嵌入式系统、有存储空间、能跑脚本策略,所以完全可以把它当作一个轻量级的边缘节点来用。
我最终采用的架构很简单:工控机上搭建FTP服务器,开放一个专用目录;MCGS触摸屏里的工程通过循环策略,定时检测本地生成的数据文件、报警记录、配方文件,发现新文件就通过FTP上传到工控机指定目录。整个过程中,没有专门的上位机进程,没有数据库连接,没有复杂的通讯协议,只有一个标准的FTP连接。
这个方案最大的优势是:MCGS触摸屏本身就在现场运行,不需要额外增加硬件;FTP服务器是标准服务,可靠性高;文件传输是否成功,直接在服务器目录里能看到,出了问题排查路径非常短。
1.3 这套方案适合什么场景、不适合什么场景
先说适合的:报警记录定时归档、产量数据每日汇总、配方文件按版本备份、设备参数快照导出、交接班记录上传。这类需求的特点是数据量不大、实时性要求不高、文件格式固定,只要保证"每天能传上去"就行。
不适合的场景也有:如果你需要实时曲线监控、多设备数据汇总到数据库、远程下发控制指令、复杂的报表定制,那该用上位机还是用上位机。FTP文件同步只是"替代上位机"里的一个具体场景,不是万能方案。
我的判断标准是:需求里只要出现"文件""日志""报表""备份"这些词,优先考虑触摸屏+FTP;出现"实时""在线""交互""数据库""曲线"这些词,再考虑上位机。
2. 开工前准备:网络规划与工控机FTP服务器搭建
2.1 网络拓扑和IP规划
动手之前先把网络理清楚,这一步省不了。现场一般有PLC、MCGS触摸屏、工控机,我习惯单独划一个工业以太网段,避免和办公网络混在一起。
设备IP规划参考如下:
| 设备 | IP地址 | 说明 |
|---|---|---|
| 工控机 | 192.168.1.10 | 运行FTP服务器,作为文件接收端 |
| MCGS触摸屏 | 192.168.1.20 | 作为FTP客户端,定时上传文件 |
| 交换机 | 192.168.1.1 | 管理IP,普通工业交换机即可 |
只要保证工控机和触摸屏在同一个网段且能互通就行。IP地址不要用自动获取,固定IP省得重启后地址变了导致同步失败。如果现场已经存在PLC网段,可以复用,但要注意别和办公网冲突。
2.2 用FileZilla Server快速搭建FTP服务器
工控机上搭FTP服务器,我推荐FileZilla Server,免费、轻量、稳定。Windows自带的IIS FTP也能用,但配置起来相对啰嗦,FileZilla Server的图形界面更直观。
安装的时候选择Standard模式,监听端口保持默认的21。安装完成后打开管理界面,第一次会让设置一个管理密码,填一个自己记得住的就行。
接下来创建用户并指定目录,具体步骤:
- 在左侧菜单找到"Users",点击"Add"添加用户。
- 用户名建议用mcgssync这种带功能含义的名字,勾选"Enabled"启用。
- 设置密码,比如Mcgs@2024,强度别太低。
- 切换到"Shared folders",添加共享目录,例如D:\FtpShare\Logs,作为FTP的根目录。
- 权限配置上,只勾选读取、写入、删除、追加这几项,不要给"全部"权限,避免客户端把服务器上的系统文件也改掉。
这里有几个容易忽略的细节:
FTP用户和Windows系统用户是两回事,不需要在Windows里创建同名账户,FileZilla Server的用户是独立的。
共享目录路径尽量用纯英文,中文路径在部分FTP客户端和MCGS脚本里可能出现编码问题。
根目录权限建议单独设置:上传目录给完整权限,其他目录只给只读权限,防止误删。
2.3 Windows防火墙放行FTP端口,含被动模式
FTP服务器搭好后,十有八九会遇到"能连接但列不出目录"或者"上传到一半卡死"的情况,根源基本都是防火墙只放了21端口,没有放被动模式端口。
FTP协议和普通HTTP不一样,它在传输数据时会另外开一个动态端口。主动模式下服务器主动连客户端,被动模式下客户端连服务器的某个随机端口。FileZilla Server默认使用被动模式,端口范围可以在"Edit"->"Settings"->"Passive mode settings"里设置,比如填50000-50100。
然后在Windows高级安全防火墙里建两条入站规则:
| 规则类型 | 端口/程序 | 动作 | 说明 |
|---|---|---|---|
| 端口 | TCP 21 | 允许连接 | FTP控制连接 |
| 端口 | TCP 50000-50100 | 允许连接 | FTP被动模式数据连接 |
如果现场装了三六零、火绒这类第三方安全软件,也要把FileZilla Server.exe和端口加入白名单。我在现场遇到过几次,Windows防火墙明明放行了,还是连不上,最后发现是第三方杀毒把FileZilla Server进程拦了。
2.4 把FTP服务设为开机自启动
工控机经常面临断电重启,如果FTP服务器没有自启动,触摸屏上传文件就会失败。FileZilla Server安装的时候选择作为Windows服务运行,重启后服务会自动起来。
安装完以后,到Windows服务管理器里找到FileZilla Server,把启动类型设为"自动(延迟启动)"。这里有个小技巧:不要用"自动"直接用"自动(延迟启动)",因为工控机开机后网卡初始化需要时间,FTP服务启动太早可能出现绑定端口失败,延迟启动能避开这个问题。
如果已经装成了普通应用也没关系,把快捷方式扔进启动文件夹,或者用任务计划程序创建开机触发任务,效果差不多。但我个人还是建议重新装成服务模式,服务方式更干净,不依赖用户登录。
3. MCGS触摸屏侧的文件同步策略配置
3.1 触摸屏本地数据文件的生成
MCGS触摸屏侧的第一步,是确保需要上传的文件已经在本地生成。MCGS组态工程里有报警记录存盘、数据存盘、配方管理这些功能,路径一般指向触摸屏的存储区,比如\Storage\DataLog、\Storage\Report。
我一般会在工程里预先规划好目录:
- \Storage\DataLog:报警记录和事件日志
- \Storage\Report:产量日报、交接班记录
- \Storage\Recipe:配方文件备份
文件内容既可以通过MCGS自带的存盘策略生成,也可以用脚本把变量按固定格式写入文本。比如产量统计,每班结束时把班次、产量、合格率写入一个CSV文件,方便后续用Excel打开分析。
这里要注意,MCGS触摸屏的存储空间有限,尤其是老型号,Flash可能只有几百兆。建议定期清理本地文件,或者在上传成功后把原文件移动到备份目录,避免存储满了导致设备运行异常。触摸屏Flash频繁写入会缩短寿命,所以文件不要写得太频繁,正常业务一天几个文件完全没问题。
3.2 在MCGS工程里添加FTP传输策略
接下来是核心一步,让触摸屏主动连接FTP服务器并上传文件。
MCGS嵌入版工程里,运行策略这块一般会提供循环策略、事件策略、启动策略。我习惯新建一个循环策略,周期设为60秒或300秒,脚本里做这几件事:检查本地文件是否存在、建立FTP连接、上传文件、关闭连接、处理已上传的文件。
脚本逻辑大致如下,具体函数名以你手里的MCGS版本脚本手册为准:
' 检查本地文件是否存在 If FileExist("\\Storage\\DataLog\\Report_20250611.csv") = 1 Then ' 建立FTP连接 FTPOpen("192.168.1.10", 21, "mcgssync", "Mcgs@2024") ' 上传文件到指定目录 FTPPut("\\Storage\\DataLog\\Report_20250611.csv", "/2025/06/Report_20250611.csv") ' 关闭FTP连接 FTPClose() ' 上传成功后把本地文件改名,防止重复上传 FileMove("\\Storage\\DataLog\\Report_20250611.csv", "\\Storage\\DataLog\\Backup\\Report_20250611.csv") EndIf有些MCGS版本没有独立的FTP脚本函数,而是在策略里放一个"FTP传输"构件,通过属性窗口配置服务器、端口、用户名、密码、源文件路径、目标路径。配置项和我上面说的大同小异。
脚本的思路比语法更重要。我在这里加了FileMove这一步,就是为了防止同一个文件被反复上传。如果不移动文件,下次循环策略执行时文件还在,又会上传一次,生成重复文件。这个细节很容易被忽略。
3.3 目录与文件名规则设计
文件传到服务器上之后,如果命名不规范,后期翻找历史数据会非常痛苦。我的经验是按"设备号/日期/班次"的层级来组织。
远程目录建议按年/月建文件夹,比如/2025/06/,每天一个子目录或者直接以日期作为文件名前缀。文件名用英文和数字,避免中文和特殊字符,因为FTP传输时的编码处理在不同设备间可能有差异,中文文件名偶尔会出现乱码。
命名参考:
- 产量数据:Report_20250611_A_Line01.csv,其中A代表白班,Line01代表产线。
- 报警记录:Alarm_20250611.csv
- 配方备份:Recipe_20250611_0800.csv
如果现场有多台触摸屏,一定要在文件名或者目录里加上设备号,比如/Device01/2025/06/Report_20250611.csv。不然多台设备同时上传同一天的文件,会互相覆盖。
另外,触摸屏的时钟一定要准。FTP服务器目录按日期归档,如果触摸屏时间不对,文件就传到了错误的日期目录下。可以定期和工控机做时间同步,或者在工程启动策略里读一次服务器时间校正。
3.4 下载工程与在线调试
配置完成后,把工程编译下载到触摸屏,然后别急着让客户验收,先在现场做一次完整的在线调试。
MCGS触摸屏调试助手在这里非常有用,它能看到当前工程运行状态、变量值、策略触发情况。下载工程后,打开调试助手,强制触发一次上传策略,观察返回状态:
- 连接失败:先检查IP地址、端口、用户名密码。
- 登录失败:大概率是FTP用户权限或者密码问题。
- 路径不存在:检查远程目录是否已经创建,FileZilla Server一般不会自动创建多级目录。
- 上传成功:到工控机FTP目录里看文件大小是否和本地一致。
如果手头有电脑,可以先用FileZilla Client连接一下工控机的FTP服务器,确认服务器本身没问题,然后再查触摸屏侧配置,这样能快速判断问题出在哪一端。
4. 联调测试与常见问题排查
4.1 第一次联调怎么测
第一次联调试,我建议按下面顺序走一遍:
第一,确认网络物理链路。检查网线、交换机指示灯,在电脑上ping触摸屏IP和工控机IP,先确认基础网络通不通。
第二,确认FTP服务器状态。把FileZilla Server管理界面打开,切到会话日志窗口。让触摸屏触发一次上传,观察服务器日志里有没有连接记录。日志里能看到客户端的IP、登录用户名、文件上传指令,定位问题特别有效。
第三,测试异形情况。手动拔掉触摸屏和工控机之间的网线,等几十秒再插回去,看触摸屏策略是否能在网络恢复后自动重连。很多设备第一次能连上,断网之后要重启才恢复,这个问题一定要在验收前测出来。
第四,检查文件完整性。上传完成后,对比源文件和目标文件的大小,有条件的话可以比对文件内容的哈希值,防止传输过程中文件损坏。
4.2 常见问题速查表
现场跑久了,我整理了一份高频问题清单,大部分情况都能对上号。
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| FTP无法与服务器建立连接 | IP不通、服务器未启动、端口错误 | 先ping通,再看服务状态,最后查端口 |
| 能连接但登录失败 | 用户名密码错误、用户未启用 | 在FileZilla Server里重新设置用户密码 |
| 登录成功但列不出目录 | 防火墙没放行被动模式端口 | 放行TCP 50000-50100 |
| 上传失败,提示550 | 远程目录不存在、无写入权限 | 服务器上手动创建目录,检查共享权限 |
| 文件传了一半卡住 | 被动端口不够用、网络波动 | 扩大被动端口范围,缩短循环策略周期 |
| 上传后文件大小为0 | 本地文件为空、文件被占用 | 查看触摸屏本地文件内容,检查写文件逻辑 |
| 重复上传相同文件 | 没有做文件移动或删除处理 | 上传成功后移动或删除源文件 |
| 日期目录不对 | 触摸屏时钟不准 | 做时间同步,确认RTC电池正常 |
| 传上来的文件名乱码 | 文件名包含中文 | 改成英文/数字命名 |
这张表我打印出来贴在现场控制柜里,运维人员照着排查,大部分问题都能自己解决,不用总找我远程。
4.3 几个容易踩的坑
第一个坑:FTP服务器绑定到了错误的网卡。工控机上可能同时有多个网卡,一个连办公网、一个连工业网。FileZilla Server默认监听所有接口,但如果手工配置了监听某个IP,一定要确认这个IP是工业网段的IP,否则触摸屏根本连不上。
第二个坑:反复尝试连接导致FTP服务器临时封IP。FileZilla Server有防暴力破解机制,连续登录失败多次会临时封禁IP。现场调试时如果密码输错几次,后面即使改对了也连不上,需要在服务器设置里把封禁时间调短,或者把触摸屏IP加入白名单。
第三个坑:循环策略周期太短。有的朋友为了"实时同步",把循环策略设成5秒一次。结果触摸屏频繁访问FTP服务器,服务器日志刷屏,文件还没写完就被上传了个半成品。同步周期我建议至少30秒以上,文件生成尽量避开策略执行时间。
第四个坑:本地文件占用导致读取失败。如果文件正被MCGS运行环境写入,脚本读取时可能拿不到完整内容。解决方法是先把数据写入临时文件,写完后再重命名为正式文件名,避免FTP上传时读到被锁定的半成品。
第五个坑:FTP是明文协议,用户名和密码在网络里是裸奔的。这套方案只建议在隔离的工业内网使用,千万别把FTP端口映射到公网。现场如果必须远程访问,优先考虑走工业远程网关,不要在公网上裸跑FTP。
5. 用了一段时间后的几点心得
5.1 这套方案的维护成本
项目验收后,这套MCGS触摸屏+FTP的方案几乎处于"零维护"状态。客户不需要懂上位机,不需要打开什么工程师站,文件自动到了工控机目录里,Excel直接打开就能看。就算现场换了一块触摸屏,只要把工程下载进去、IP设置成原来的,几分钟就恢复工作。
工控机上的FTP服务器也很耐用。FileZilla Server作为服务方式运行,我见过最长的现场连续跑了两年多没重启过。唯一需要留意的是磁盘空间,建议在服务器上做一个磁盘告警,或者定期清理历史文件,防止目录堆满后新文件传不进来。
5.2 它不能替代上位机的地方
虽然标题喊着"告别上位机",但我必须泼点冷水。文件自动同步这个场景可以被MCGS+FTP完美替代,但不代表所有上位机都可以下岗。如果客户需要的是复杂的数据分析、多设备联动控制、触摸屏上做不了的高级算法、或者是给管理层看的驾驶舱式大屏,那些还是老老实实上上位机。
我自己的判断标准很简单:数据流方向是"现场 -> 文件 -> 归档",就直接用FTP;数据流方向是"控制指令 -> 设备 -> 状态反馈",就离不开上位机。
5.3 后续还能怎么扩展
这套方案稳定跑起来之后,还可以往几个方向顺手扩展一下。比如在工控机上写一个定时任务,每天把FTP接收目录里的文件按日期压缩打包,转存到NAS或者备份盘。再比如加一个文件监控脚本,发现当天该到的报表没到,就自动给生产主管发一条消息提醒。多台触摸屏的场景,也可以建一个总的接收目录,每台屏一个子目录,用设备号区分。
最后说句大实话,工控领域很多时候不是越复杂越好,而是越可靠越好。一个简单到不能再简单的FTP同步,能省下一整套上位机的开发和维护成本,在现场稳定跑上几年,就是好方案。如果你也正纠结"要不要做一个上位机",先停下来盘一下需求,也许答案就在这个不起眼的FTP服务器里。