1. 工业图像实时采集的痛点与FTP方案优势
在工业自动化现场,视觉检测系统常常面临一个尴尬局面:智能相机拍完照片后,操作人员要么得跑到工控机前查看结果,要么需要额外开发一套上位机软件来显示图像。这两种方案都存在明显缺陷——前者效率低下,后者开发成本高。我在一个汽车零部件检测项目中就遇到过这个问题,产线工人每天要来回跑几十次查看检测结果,不仅累还容易出错。
这时候MCGS触摸屏配合FTP服务器的方案就派上用场了。实测下来,这套方案有三个突出优势:零额外硬件成本(利用现有网络)、开发周期短(省去上位机开发)、实时性足够(从拍照到显示最快能控制在1秒内)。具体到我们那个项目,改造后检测效率提升了40%,工人再也不用离开工位就能看到实时图像。
2. 系统搭建前的准备工作
2.1 硬件选型要点
不是所有MCGS触摸屏都支持完整FTP功能,建议选择TPC7062Ti及以上型号。这个系列自带双网口,我在橡胶制品检测线上实测,用独立网口连接智能相机时,图像传输稳定性比共享网络高出30%。相机端推荐使用Basler ace系列,它们的FTP触发拍照功能相当稳定,配合MCGS脚本能实现毫秒级同步。
2.2 软件环境配置
需要准备两个关键组件:
- FileZilla Server:轻量级FTP服务器,占用资源不到50MB
- MCGS组态环境:版本建议6.2以上,老版本对PNG格式支持有问题
这里有个坑要特别注意:FileZilla的被动模式端口范围要设置为30000-30010(在设置→被动模式里修改),否则MCGS可能连不上。去年在东莞某电子厂就遇到过这个问题,排查了整整两天才发现是端口范围设置太大导致防火墙拦截。
3. FTP服务器详细配置指南
3.1 用户权限精细控制
在FileZilla里新建用户时,一定要勾选"文件写入"和"文件删除"权限,但千万别给"目录删除"权限——我有次误操作导致整个图像库被清空。推荐这样设置目录结构:
/FTPRoot /Upload # 相机上传目录 /Display # MCGS读取目录 /Backup # 历史存档3.2 自动清理脚本配置
在FileZilla的"自动banIP"设置里添加这段脚本,可以防止相机频繁上传导致的连接数爆满:
If UploadCount > 50 Then BanIP 300 # 封禁5分钟 End If配合Windows任务计划,设置每天凌晨3点清空Backup文件夹,这样既保证存储空间够用,又不会误删新文件。
4. MCGS触摸屏的深度配置
4.1 网络参数优化
在设备窗口→网络配置里,把TCP超时设为3000ms,重试次数设为3次。这个参数经过多次实测最稳定:某家电企业的流水线上,设置2000ms时偶发超时,调到3000ms后连续运行30天零故障。
4.2 内存图像管理技巧
使用"内存位图"控件时要注意:
- 缓存数量建议设5-10张,具体根据图像大小调整
- 启用"异步加载"选项,避免界面卡顿
- 在"图像显示完成"事件里添加释放内存的脚本:
function OnImageLoad() FreeBitmap(OldImageID) -- 释放上一张图像 end5. 智能相机端的关键设置
5.1 触发拍照配置
以Basler相机为例,在Pylon软件里要设置:
- 硬件触发→上升沿触发
- FTP设置→传输模式为"触发后立即上传"
- 文件名规则用"DateTime_Seq.jpg"格式,避免重名
5.2 断点续传方案
相机网络不稳定时,建议在相机SD卡做本地备份。用这段Python脚本可以自动同步缺失的文件:
import ftplib def sync_files(): ftp = ftplib.FTP('192.168.1.100') ftp.login('user','pass') local_files = os.listdir('/backup') remote_files = ftp.nlst('/Upload') for f in set(remote_files)-set(local_files): ftp.retrbinary(f'RETR {f}', open(f'/backup/{f}','wb').write)6. 全流程自动化脚本解析
6.1 文件监控脚本
这个循环脚本放在MCGS的"循环策略"里,每500ms执行一次:
function CheckNewFile() file_list = FTP_GetFileList("/Upload") if #file_list > 0 then newest = file_list[#file_list] FTP_Download("/Upload/"..newest, "/Display/current.jpg") FTP_Delete("/Upload/"..newest) UpdateImage("画面1.图片控件", "/Display/current.jpg") end end6.2 异常处理机制
在脚本里添加这些判断能大幅提升稳定性:
-- 检查网络连接 if not Network_IsConnected() then ReconnectNetwork() Sleep(2000) return end -- 检查存储空间 if GetDiskFreeSpace() < 10 then -- 剩余空间小于10MB DeleteOldFiles("/Backup", 30) -- 删除30天前的文件 end7. 现场调试实战经验
去年在深圳某SMT贴片机项目上,我们遇到了图像延迟的问题。后来发现是FileZilla的传输模式没设对,改成二进制传输后问题解决。具体参数调整如下表:
| 参数项 | 错误配置 | 正确配置 | 效果对比 |
|---|---|---|---|
| 传输模式 | ASCII | 二进制 | 延迟从2s降到0.3s |
| 并发连接数 | 50 | 20 | 稳定性提升40% |
| 缓冲区大小 | 32KB | 256KB | 吞吐量提升3倍 |
另一个常见问题是图像撕裂,解决方法是在MCGS脚本里加入双缓冲机制:
-- 先在后台加载新图像 LoadImageToBuffer("temp_buffer", "/Display/new.jpg") -- 再快速切换显示 SwitchImageDisplay("main_display", "temp_buffer")这套系统在多个项目现场运行后,我总结出三个黄金法则:网络隔离(相机、HMI、FTP服务器最好用独立交换机)、定时重启(每周自动重启一次FTP服务)、分级存储(热数据放内存,冷数据及时转存备份)。只要把握这三点,系统基本可以稳定运行数年不出大问题。