1. 先搞清楚一件事:产线 MES 终端不是普通电脑
1.1 MES 终端的实际角色
做项目实施的人都知道,MES(制造执行系统)夹在 ERP 和现场设备之间,管的是生产执行层面的工单派工、工序报工、物料领用、质量检验、设备点检这些事。而 MES 终端,就是操作工在产线上点鼠标、扫码枪、刷卡、看工单的那台机器。
主流形态大概有几种:Windows 工控机、安卓一体屏、瘦客户机加虚拟化平台(比如现在不少厂在推的国产终端虚拟化方案),以及直接运行在国产 Linux 发行版上的客户端。不管哪种形态,它的使用环境都是三班倒、连续开机、灰尘油污不断的车间,而不是空调恒温的办公室。
这个定位决定了它的系统设置思路和办公电脑完全不同。办公电脑坏了,员工可以换一台,最多耽误半天;产线终端坏了,往往就是整条线停线等系统恢复,停线一分钟的代价是以千、以万计数的。所以,MES 终端的设计目标不是"配置得漂亮",而是"无人值守也能稳定运行三年"。
1.2 为什么"装好客户端"不算完
我见过太多项目,软件实施团队把 MES 客户端装好、连上服务器、测试通过,就觉得大功告成。结果上线一周内,各种"神奇"问题陆续出现:
- 系统半夜自动更新重启,早班开班全体等开机
- DHCP 租约到期,终端 IP 变了,MES 客户端连不上服务器
- 屏保锁屏密码没人知道,夜班人员干瞪眼
- 扫码枪扫一次跳两行,因为输入法是中文状态,回车带了两次
- 屏幕休眠后鼠标键盘唤不醒,只能强制断电重启
这些问题没有一个和 MES 软件本身有关,全部是操作系统层面的设置没做好。客户端装好只是起点,系统设置才是决定终端能不能在产线稳定活下来的关键。下面我把这些年踩过坑之后沉淀下来的"上线前必做设置"完整列出来,照着做能省掉 80% 的现场救火。
2. 开机到进系统的这三十秒,决定全天顺不顺
2.1 自登录:少一次登录就少一次停机
产线操作工大多不是 IT 人员,让他们每天开机输密码、点登录,不但增加时间成本,而且密码一旦忘了、键盘切到中文输错,就是一次报修工单。更麻烦的是,如果终端加入了域,域密码过期、账户锁定,整个工位直接瘫痪。
正确做法是在终端上配置开机自登录,让系统启动后自动进桌面,并让 MES 客户端跟随开机自启。Windows 系统可以用两种方式:
第一种,图形化操作:Win+R输入netplwiz,取消勾选"要使用本机,用户必须输入用户名和密码",输入账号密码即可。这个方法在部分 Windows 10/11 版本上选项会被隐藏,此时用注册表方式更可靠。
第二种,注册表方式,在HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon下配置:
"AutoAdminLogon"="1" "DefaultUserName"="mesuser" "DefaultPassword"="你的密码" "DefaultDomainName"="" "AutoLogonCount"="1"注意AutoLogonCount是可选键,如果设了,系统会在指定次数后停止自登录,生产终端一般不要设。另外要提醒:自登录账号密码如果被后续的 Windows 更新或安全策略重置,自登录会静默失效,表现为终端重启后停在登录界面。所以上线后每周巡检时,要顺带确认一次自登录仍然生效。
MES 客户端的自启动也一样重要。常见做法是把客户端快捷方式放进启动文件夹,或者注册成 Windows 服务(Service),后者更稳,但要求 MES 客户端支持以服务方式运行且有对应的配置。如果客户端不支持,至少要在启动文件夹里放快捷方式,并确认客户端启动后自动跳到连接界面、自动重连服务器,而不是停在手动登录窗口等操作工点按钮。
安卓一体屏终端则更简单,在系统设置里关闭开机锁屏、关闭 PIN 验证,并将 MES 应用设为桌面应用(Launcher),开机直接进入工位界面。这里有一个经常被忽略的点:很多安卓终端默认 5 分钟后自动锁屏,产线场景要关掉,或者用系统设置里的"常亮模式"(Stay Awake)加插入的电源模式管理。
2.2 电源策略:产线终端最怕休眠和屏保
办公电脑可以 10 分钟关屏、20 分钟睡眠省电,产线终端绝对不行。休眠后唤醒失败、网络连接恢复慢、扫码枪 USB 设备需重新枚举——每一个都是停线隐患。
Windows 下用管理员权限执行以下命令,一次性把电源计划调到"永不休眠":
powercfg /change standby-timeout-ac 0 powercfg /change standby-timeout-dc 0 powercfg /change hibernate-timeout-ac 0 powercfg /change hibernate-timeout-dc 0 powercfg /change monitor-timeout-ac 0 powercfg /change monitor-timeout-dc 0把monitor-timeout也设为 0,是因为有些 MES 界面需要连续被值班人员瞟一眼确认状态(比如看板界面、异常报警弹窗),屏幕灭了会影响巡视效率。如果车间考虑液晶屏寿命,可以单独设置 15~30 分钟关屏,但一定不要设置休眠和锁屏。
屏保这一项,我见过最坑的案例:前任 IT 给终端设了个屏保,时间 10 分钟,并且勾选了"恢复时需要登录密码"。结果三个月后,夜班工人在凌晨 2 点用不了电脑,因为没人知道那个屏保密码是什么。最后整个工位停线,直到 IT 到现场强制重启。所以要么直接把屏保设为"无",要么就只保留纯画面屏保、绝对禁止勾选"在恢复时显示登录屏幕"。
2.3 更新管控:让 Windows Update 闭嘴,但不彻底关死
产线终端被 Windows Update 半夜重启,算是 MES 实施圈里段子级的经典事故。Windows 10/11 专业版在默认状态下会自动下载并安排重启,时间经常落在凌晨 3 点——正好是夜班生产时间。
对策分两步:
第一步,在组策略里把自动更新改为"只通知、不自动下载安装"。运行gpedit.msc,进入"计算机配置 -> 管理模板 -> Windows 组件 -> Windows 更新 -> 配置自动更新",设置为"已启用",选项选"2 - 通知下载并通知安装"。
第二步,禁用更新重启。如果已经安装了更新,系统会在非活跃时段调度重启,可以用组策略"对于已登录的用户,不自动重新启动"来兜底。更彻底的做法是禁用 Windows Update 服务(Wuauserv)和 Update Orchestrator Service,但这样会有安全风险。我个人建议是:产线终端保持"通知但不装",由 IT 在每月固定的停产窗口,比如月末保养日,集中补丁。这样既不会半夜重启,也不会长期裸奔。
同时建议把系统"活动时间"(Active Hours)设置为覆盖整个三班倒时间,比如 00:00 到 23:00,进一步压缩系统主动重启的窗口。这个设置可以在"设置 -> Windows 更新 -> 高级选项 -> 活动时间"里改。
3. 网络、时间、主机名:三个"看不见"却决定生死的设置
3.1 静态 IP 还是 DHCP?我的答案很直接
很多网络管理员习惯用 DHCP,觉得省事。但在产线场景,我强烈建议 MES 终端使用静态 IP,并建立 IP 台账。
原因很朴素:DHCP 租约默认 8 天,一旦核心交换机或 DHCP 服务器重启、租约数据库异常、地址池被占满,终端拿不到有效 IP,MES 客户端就断了。排查"为什么连不上服务器"的时候,你首先要排除的永远是 IP 层。静态 IP 虽然管理起来烦一点,但排障路径最短:ping 不通就是网线、交换机、网卡的问题,三层通了再看业务端口。
终端 IP 规划时要注意几点:
- 划一个独立的 VLAN 给 MES 终端,不要和生产设备、办公电脑混在一起,既安全又方便批量管理
- 每个工位的 IP、MAC、位置、设备型号登记台账,贴一张标签在终端背面
- 如果网络里有 DCS、PLC 等工业设备,注意不要把 MES 终端静态 IP 落在工业设备的保留段
- DNS 填写内网 DNS 或直接填写 MES 服务器的 IP,避免依赖外部 DNS 导致域名解析慢
既然说到环境变量,也顺便提一句:如果 MES 客户端依赖 Java 运行时、ODBC、第三方组件,系统环境变量(JAVA_HOME、PATH等)必须在部署文档里明确写死,不能每台机器临时配。因为现场实施时往往是一个人配一台,手一抖,下一台就配错了版本。环境变量这类设置,必须写进部署清单,逐台勾选。
3.2 时间同步:MES 数据追溯的隐形命门
MES 的核心价值之一是可追溯,工序报工、检验记录、设备点检都要打时间戳。如果终端时钟和服务器差了几分钟甚至几个小时,会出现一个很诡异的现场:产品已经完成了报工,但追溯查不到,或者在制品序列跨工序的时间线乱掉,品控根本没法看。
产线终端的时间同步,不要在终端上手动校准,要配 NTP 服务器自动同步。Windows 下用命令:
w32tm /config /manualpeerlist:"192.168.1.10,0x1" /syncfromflags:manual /update net stop w32time && net start w32time w32tm /resync这里的192.168.1.10换成公司内网 NTP 服务器地址(或者直接指向 MES 服务器,很多服务器都兼任时间源)。设置完用w32tm /query /status验证源服务器和上次同步时间。
还有一个更容易被忽略的:时间同步完不代表时区正确。确认每台终端的时区是(UTC+08:00),有些设备出厂默认 UTC 时区,导致日志时间比本地时间差 8 小时,数据时间戳全错。安卓终端也一样,在"系统设置 -> 日期和时间"里打开自动确定日期和时间、自动确定时区,并确认时区为东八区。
3.3 防火墙、hosts 与端口连通性:先测透再上线
终端连不上 MES 服务器,80% 是因为防火墙或端口问题。客户端装了,服务也起了,但服务器监听的是 8080、1433、1521 这类端口,终端防火墙默认全拦,客户端连不上,界面上只报一个笼统的"无法连接服务器"。
部署时统一用命令验证关键端口,Windows PowerShell:
Test-NetConnection 192.168.1.10 -Port 8080Linux 终端用:
nc -vz 192.168.1.10 8080如果 MES 应用服务器、数据库服务器是分开的,把涉及的端口全部列成一张表,逐台逐端口验证。这样实施时不会漏。
另外一个小技巧:在终端 hosts 文件(Windows 的C:\Windows\System32\drivers\etc\hosts、Linux 的/etc/hosts)里预写入 MES 服务器的 IP 与主机名映射。这样就算 DNS 服务器临时抽风,MES 客户端解析服务器主机名也不会失败。特别是在 Linux 终端上,DNS 配置不当时解析慢的问题很常见,hosts 文件一写,立竿见影。
4. 工位外设与显示:扫码枪、打印机、看板屏的一次到位
4.1 扫码枪:一个回车或多个回车的问题
扫码枪在 MES 工位上几乎是标配,但它的坑比想象中多。最经典的故障就是"扫一次跳两行"或者"扫出来的条码第一位丢了"。
先说跳两行。扫码枪本质上是模拟键盘输入,扫完条码后发送一串字符,再带一个后缀。工厂里常见的扫码枪默认后缀是"回车+换行"(CR+LF),在某些 MES 文本框里,回车被当成确认提交,多个回车或者回车时序不对,就会出现界面多跳一步或者重复提交。解决方法是把扫码枪的后缀改为只发送一个回车(CR),具体在扫码枪的配置手册里用配置码(Setup Code)扫描修改。多数主流品牌,比如斑马、霍尼韦尔、新大陆,都有"仅追加 CR""仅追加 LF"之类的配置条码,扫一下就行。
再说第一位丢失。这个坑十有八九是中文输入法惹的祸。扫码枪模拟键盘输入时,如果系统当前输入法是中文,第一个字母会被输入法吃掉,或者被转换成拼音组合,导致条码不完整。对策是:把 MES 终端操作工账号的默认输入法设为英文,需要输中文时手动切换。Windows 里可以在"设置 -> 时间和语言 -> 语言 -> 键盘"中,把 English (US) 键盘上移到首位,并将中文输入法的默认模式调整为英文。此招同样适用于刷卡器、键盘输入的场景。
4.2 打印机:默认打印机、脱机恢复与驱动版本
MES 工位常见两类打印:标签打印(斑马、TSC、佳博等条码打印机)和联单、单据打印(针式或热敏)。部署时先确认默认打印机正确,这个不起眼的设置能坑死人——工位上的操作工点打印,结果打到了隔壁线的打印机,会引发物料标签贴错的质量事故。
标签打印机的驱动设置里,有两点必须提前调好:
- 标签尺寸和介质类型:在驱动首选项里设置好标签纸规格、间隙传感器类型、打印浓度,不然首张打印位置偏移是常态
- 默认撕纸、切纸模式:连续打印时如果模式不对,标签会中间断张,贴标机扫码率直线下降
还有打印机脱机问题。网络打印机如果一段时间不用,会进入脱机状态,工位操作工不懂怎么恢复,又是报修。可以在系统服务里确认打印后台服务(Print Spooler)为自动启动,并且不要在调试时手动停掉服务后忘记重启。另外,多台终端共享一台网络打印机时,尽量保证各终端的打印机驱动版本一致,驱动版本混乱会导致某些终端打印乱码。
我之前还遇到过一种情况:MES 客户端以 Windows 服务方式运行时,服务账号没有打印机访问权限,导致服务里触发的打印任务全部静默失败。这个问题排查起来特别隐蔽,因为手动打开客户端测试打印是好的,一自动跑就失败。解决办法是给服务运行账号授予对应打印机的权限,或者在服务属性里确认账号有权限。
4.3 显示缩放与 DPI:C# 老客户端的经典翻车点
MES 圈里有个高频问题:"MES 看板是不是用 C# 开发的?"——因为很多 MES 的桌面客户端确实是 C#/WinForms 写的,而这些老程序的界面是固定像素设计的,对高分屏的 DPI 缩放适配很差。
具体表现:界面元素错位、下拉框点不中、按钮被裁切、字体发虚。一般发生在 1920x1080 分辨率、Windows 缩放设置为 125% 或 150% 的机器上。产线工控屏如果是 1366x768 或 1024x768 的老分辨率,反而没有这个问题。
解决办法有三个层级:
- 首选:在 MES 客户端程序的兼容性设置里,勾选"替代高 DPI 缩放行为,缩放执行:应用程序",让程序按自己的像素渲染,不跟随系统缩放
- 如果程序没有兼容性选项生效,尝试在程序 EXE 的同目录下添加
app.manifest,声明 DPI 感知 - 还不行,就把系统缩放级别固定为 100%,用低分辨率或自定义缩放适配老程序
这个过程需要实施人员在样机上一遍遍试,所以我会在第六章的验收清单里再次强调:显示缩放一定要在上线前逐台确认,并记录每台终端的分辨率、缩放值和适配结果。
看板屏是另一个容易被忽视的场景。MES 电子看板一般用大屏电视或显示器,通过 HDMI 或 VGA 从终端主机输出。电视屏幕必须开启"PC/显示器模式",关闭"过扫描"(Overscan),否则看板边缘内容会被裁掉一圈。同时,看板屏如果长期显示固定内容,要留意 OLED 屏烧屏风险。如果看板主机和操作终端是同一台,显示信号要设置为"复制"还是"扩展",取决于部署设计——我见到的多数方案是独立看板主机,和操作终端互不影响。
5. 权限与安全:既要开放,又要防呆
5.1 账号等级:操作工、班组长、IT 各归各位
产线终端的账号体系设计,我的建议是三个等级:
- 操作工账号(标准用户):只能运行 MES 客户端,桌面固定,不能装软件、不能改系统设置
- 班组长账号(标准用户 + 少量权限):可以打印补单、导出报表、操作异常处理界面
- IT/工程师账号(本地管理员):负责维护、装软件、改配置
关键点在于,MES 客户端如果是安装在C:\Program Files下,标准用户运行时可能会因为目录写权限不足导致日志写不进去、配置文件无法更新。很多实施团队对此的"标准做法"是把用户加入管理员组,一刀切,但这样终端安全防线就没了。
合理折中:MES 客户端安装时指定一个非系统盘目录,比如C:\MESClient,然后给操作工账号授予该目录的"修改"权限。这样操作工账号既不是管理员,客户端又能正常运行和写日志。这个细节一定要提前做好,不然后期改权限可比前期改目录麻烦得多。
5.2 USB 管控:锁住数据口,但别误伤扫码枪
产线终端的 USB 口,理论上要插扫码枪、读卡器、可能有 USB 打印机。但同样会有人往里插 U 盘,拷走工艺数据,或者带入病毒。工业现场常见的管控策略:
- 在组策略中启用"所有可移动存储类:拒绝读取/写入",把 U 盘和移动硬盘全部挡住
- 关闭自动播放(AutoPlay),防止恶意软件利用 U 盘 autorun.inf 传播
- 物理层面:对不用的 USB 口用封堵胶、箱体锁封死,只留操作必需的口
但这里有一个精细操作:扫码枪、读卡器属于 HID 输入设备,不受"可移动存储"策略影响,可以正常使用;USB 打印机属于打印机类,一般也不影响。如果用了某些国产化的 USB 管控软件,要特别注意它的过滤范围,别把扫码枪当成存储设备拦了。
实际操作中,我建议分两步走:上线初期先保留 USB 读取权限,等运行稳定、确认现场没有正当需求后,再收紧到完全禁止。直接一刀切可能反而导致操作工没法用某个临时读卡工具,给你打电话的频率直线上升。
5.3 远程运维通道:不装远程,你就等着天天跑产线
MES 终端分散在车间各处,面积大一点的厂,从 IT 办公室走到最远工位可能就要十几分钟。没有远程运维手段,一个小问题就要跑断腿。远程管理方案根据企业的安全要求选择:
- 局域网内:Windows 远程桌面(RDP)、VNC(TigerVNC/RealVNC)
- 跨地域多工厂:企业采购的远程运维平台、堡垒机,或者有合规授权的第三方远程工具
- 终端虚拟化方案:很多自带云终端管理平台,可以直接远程看屏、远程操作、集中推送设置,这种场景下终端本机的系统设置反而少很多,因为操作系统跑在服务器上
这里特别提一个 Linux 终端远程的经典坑:很多人在 Ubuntu/CentOS 终端上手动启动 VNC 服务,用的是vncserver :1,然后关闭终端窗口去干别的,回来就发现 VNC 连不上了。原因在于 VNC 进程跟着启动它的终端会话一起被杀了。正确做法是把 VNC 配成 systemd 服务,开机自启,用systemctl enable vncserver@1管理,而不是手动启动依赖一个终端会话。
Windows 远程桌面要注意的是:启用 RDP 后,确保系统防火墙只允许来自指定 IT 网段的 3389 端口访问,不要对整个车间网络敞开。另外,给远程运维账号设置强密码,定期轮换。
远程通道顺手解决一个问题:当操作工打电话说"界面卡住了、弹窗了",IT 用远程看屏功能先看一眼再决定是否上门。这个"先远程看再上门"的习惯能省下大量无效跑动。
6. 批量部署:镜像复制与上线验收清单
6.1 用镜像、模板把设置一次固化
所有前置系统设置,一旦在样机上调试完成,就不要每台终端手动重复了。手动配置必然出错——要么这台忘了关更新,要么那台忘了配时间源。正确做法是把调好的样机制作成系统镜像或模板,后续终端全部从镜像批量部署。
Windows 终端批量部署的标准流程:
- 在样机上完成所有设置和应用安装
- 准备应答文件,运行
sysprep /generalize /oobe /shutdown,让系统进入封装状态 - 用 DISM、Clonezilla 等工具把封装后的系统做成镜像
- 新终端装机时通过 PXE 网络引导或 U 盘启动恢复镜像
如果是瘦客户机、云终端方案,更简单:在管理平台上把样机配置保存为模板,远程批量下发到所有终端。这也是很多企业这两年转向终端虚拟化的核心动力——系统、软件、设置全部集中在服务器端管理,终端本体就是一个显示和输入设备,系统设置的工作量直接下降一个数量级。
但无论哪种方式,仍然建议"先小批量试点一周,再全厂铺开"。镜像里藏着的隐性 bug(比如某条策略导致某款扫码枪驱动异常、某台老显示器分辨率不认)通常会在试点阶段暴露。全厂一次性铺开再发现问题,代价就是几百台终端回炉。
6.2 终验清单:每台终端上线前过一遍
最后整理一份我实际使用的验收清单。每次终验,拿着这张表逐台打勾,没打勾的不允许上线:
| 检查项 | 通过标准 | 验证方法 |
|---|---|---|
| 自登录 | 断电重启后自动进桌面 | 模拟断电再上电,观察启动过程 |
| MES 客户端自启 | 桌面出现后自动进入连接界面 | 重启后观察客户端进程 |
| 电源策略 | 6 小时无操作不休眠不锁屏 | 设置短时间无人值守再回来看状态 |
| 更新策略 | Windows Update 为"通知下载" | 查看组策略生效情况 |
| 静态 IP | IP/MAC/位置台账登记无误 | ping 网关、ping 服务器 |
| 时间同步 | 与服务器时间偏差小于 1 秒 | w32tm /query /status |
| 时区 | 东八区 | 系统时间显示与实际一致 |
| 端口连通 | 所有关键端口可达 | Test-NetConnection逐端口扫 |
| 扫码枪 | 连续扫 50 次无丢码无重复 | 现场实测 |
| 输入法 | 默认英文,扫码不受干扰 | 实测扫码 50 次 |
| 默认打印机 | 指向本工位对应打印机 | 打印测试标签 |
| 显示缩放 | MES 界面无错位裁切 | 逐页面截图对比 |
| USB 策略 | U 盘被拦截,扫码枪正常 | 插入 U 盘验证 |
| 远程通道 | IT 网络内可远程操作 | IT 侧实测连接 |
| 环境变量 | PATH/依赖项与部署文档一致 | 运行客户端自检脚本 |
这张表看起来琐碎,但它是把上面前五章所有踩坑经验浓缩成的一次性动作。真正实施过 MES 终端项目的老手都清楚:上线后的运维成本,几乎全看你上线前的设置做得有多细。与其之后一天跑三次产线救火,不如在终端上线那几天多花半小时,把每台设备系统地过一遍。
我在实际项目里还留了一手:把这张清单的电子版和终端 IP 台账一起放在共享盘里,每次月度巡检时抽查几台核对。时间一长你就会发现,真正导致"设置漂移"的往往不是当初没设置,而是后来有人手动改过——比如某个工程师为了调试临时改了 DNS,或者某个班组长装了输入法。台账和清单的作用,就是帮你快速发现这种漂移,把问题消灭在影响生产之前。