前阵子刚交付了一个智能显示器上的HMI开发项目,从需求分析到现场调试前后折腾了三周。这套系统其实是给一条老产线做设备升级,原来用的是文本显示器和一堆按钮,操作员要跑去变频器面板上看电流和频率,调度室想看产量数据还得靠人工记录。改造之后用一台带触摸的智能显示器,配合博途(TIA Portal)里的HMI组态,把所有设备的运行状态、关键参数、报警信息和班产量全部集中到一个界面上,操作员在触摸屏上就能完成启停、参数修改和故障确认。这篇文章我把整个项目的设计思路、组态流程和调试过程中踩过的坑完整梳理一遍,给正在做或者准备做HMI开发的朋友一个可以直接参考的方案,尤其是用西门子PLC和变频器组合、想把变频器参数显示到HMI里的场景,你基本可以照着我这套路子落地。
1. 项目整体设计与方案选型
1.1 需求拆解:为什么要换智能显示器
这个项目最开始的诉求其实特别简单:客户觉得操作员整天跑去看变频器面板太麻烦,想把频率、电流这些参数显示到一个大屏幕上。但如果只是做一个“参数显示器”,那方案就太多了。真正让项目复杂度上来的是后面几个附加需求:第一,报警信息要能归档,出问题时能查历史记录;第二,几个关键设备要支持触摸操作,比如启停、急停复位、参数设定;第三,数据要和PLC打通,不能额外加一套独立的仪表系统。
所以“智能显示器”这个词在我的理解里,并不是单纯指一块屏幕有多高清,而是指显示终端本身具备独立的运行系统、有网络通信能力、能承载组态软件生成的运行画面,并且可以和PLC、变频器、伺服等设备在同一个网络里直接通信。和传统文本显示器相比,它的优势在于画面可以做得复杂且直观,数据是实时的,逻辑判断交给PLC,显示和交互交给HMI,各干各的,稳定可靠。
1.2 HMI软件和硬件选型的思路
这里先说结论:我选的是西门子TP900 Comfort Panel,组态软件用的是博途TIA Portal V17里的WinCC Comfort,PLC是S7-1200系列。选这套方案不是因为它最便宜,而是因为整个车间本来就以西门子产品为主,PLC、变频器、网络设备都是西门子生态,用同一套软件组态可以减少大量兼容性排查时间。
如果你也在做HMI选型,我建议你用下面这个逻辑来判断,而不是走“哪个牌子熟就用哪个”的老路:
- 先确认PLC品牌,HMI和PLC同品牌通常通信最省事,不需要额外驱动授权;
- 再确认是否需要高级功能,如果只是显示和按钮,普通Comfort面板就够;如果要Web访问、移动端监控、更复杂的脚本,就考虑Unified系列或WinCC Professional;
- 最后看现场环境,高温、粉尘、振动环境要选防护等级高的面板,显示屏尺寸按操作距离决定,一般操作距离1米左右选10寸以上比较合适。
这次项目一开始客户提过能不能用普通安卓平板做显示,被我否了。原因很简单:工业现场需要长时间不间断运行,商用平板散热、寿命、抗干扰都不可靠,而且和工业以太网协议(如Profinet)之间的通信要么不支持、要么需要额外网关设备,稳定性完全没有保障。
1.3 通信方案的权衡:为什么选了Profinet
系统里有PLC、变频器、触摸屏三大部分,通信方案我对比了三种:
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Profinet | 实时性好,博途原生支持,一个网络搞定所有设备 | 需要网口和交换机,配置稍复杂 | 新项目或设备改造,推荐首选 |
| Modbus TCP | 兼容性极广,几乎所有设备都支持 | 数据映射麻烦,实时性一般,需要自己建映射表 | 混合品牌设备,老设备改造 |
| HMI直连变频器 | 绕过PLC,HMI直接用驱动协议读写变频器 | 画面逻辑复杂,预警和互锁难做,只适合简单场景 | 没有PLC的小系统 |
最终选了Profinet,原因很直接:PLC用S7-1200自带的Profinet口,变频器用G120的Profinet接口板,触摸屏也带Profinet口,三者直接进同一台交换机,不需要额外网关和协议转换,数据链路最短,实时性有保障。Modbus方案虽然配置上看着简单,但每个寄存器都要手动映射,项目大了以后维护成本非常高。
2. 核心细节解析与HMI组态要点
2.1 变量体系设计:先混乱后崩溃的教训
很多第一次做HMI的人上来就建变量,画面做到一半才发现变量重复、命名混乱、类型对不上,返工量巨大。我在这个项目里尝过教训之后,总结了一套变量分层方法,现在做每个项目都这么干。
变量分三类管理:外部变量(连接PLC和驱动的)、内部变量(HMI本地计算和画面切换用)、画面变量(只在单个画面内有效)。外部变量命名我统一用“设备名_信号名_数据类型”的格式,比如Mixer_Motor_Current_REAL、Conveyor_Start_CMD_BOOL。画面切换和弹窗控制用内部变量,比如Screen_Main_CurrentPage_INT。这样变量表一眼扫过去就知道这个变量是干什么的、在哪里用、什么数据类型。
数据类型对应关系也是踩坑高发区。博途里BOOL、INT、REAL、WORD、DWORD之间的匹配如果不注意,HMI连接上以后会出现数据不对、显示乱码、甚至通信超时。我的习惯是:所有模拟量统一用REAL,所有状态字统一用WORD或DWORD,所有开关量统一用BOOL。PLC侧在传变量给HMI之前,先在PLC里把格式转换好,绝不在HMI侧做复杂转换。比如变频器的电流,变频器报文里是十六进制数,我先把报文值通过公式转成实际电流值(单位A),存到PLC的一个REAL变量里,HMI只负责显示这个REAL变量,这样HMI组态逻辑非常干净。
2.2 画面结构规划:按操作员的使用习惯分层
画面结构决定了操作员每天用这个系统顺不顺手。我见过有些项目把所有控件堆在一个页面上,那操作员光找按钮就要半天,误操作概率极高。这次项目我分了三层:
第一层是总览画面,开机默认显示,包含所有设备的运行状态彩色指示、当前报警数量、当日产量、关键设备的实时电流和频率。这一层只做监控,不做操作,防止误触。
第二层是单机操作画面,每个设备一张画布,包含该设备的启停按钮、急停复位、参数设定框、当前状态、历史报警。实际操作员90%的时间都在这一层,所以这里按钮要大、参数显示要清楚、误操作要有二次确认弹窗。
第三层是系统画面,包括报警归档查询、趋势曲线、设定参数总表、用户管理。这层基本只有班长和工程师会去打开,界面密度可以高一点。
画面之间用导航按钮切换,切页用内部变量记录当前页,这样掉电重启后能恢复到上次停留的画面,操作员不用每次开机都点回去,这个细节客户反馈特别好。
2.3 变频器参数显示到HMI的三种实现路径
“西门子PLC怎样将变频器参数显示到HMI中”这个问题经常有人问,实际上有几种不同做法,我在这里把三种主流路径都讲清楚,你根据现场情况选。
路径一是PLC和变频器走Profinet实时通信,PLC通过报文周期性读取变频器的运行数据(频率、电流、电压、状态字),把数据放到PLC变量里,HMI再通过Profinet从PLC变量读取显示。这是我最推荐的方式,实时性好,逻辑都集中在PLC里,HMI只做显示和对PLC变量的读写操作,安全可靠。
路径二是PLC和变频器走Modbus RTU或Modbus TCP,PLC作为Modbus主站轮询变频器寄存器,把读到的数据放到PLC变量再给HMI。这种方式适合老变频器,或者现场没有Profinet接口的情况。缺点是要自己组报文,地址映射靠查手册,调试稍微费时间。
路径三是HMI直接连接变频器,工程里不经过PLC。博途的WinCC支持部分驱动协议,可以直接把变频器添加为HMI的通信伙伴。这个方案在只有一个HMI和一台变频器、没有PLC的小系统里很省事,但如果系统里有互锁逻辑、顺序控制,纯靠HMI做逻辑是不行的,我基本不推荐在复杂场景这么干。
3. 实操过程与核心环节实现
3.1 工程搭建与通信配置
我以这次项目为例,完整走一遍组态流程,你按照步骤操作基本不会走偏。我用的是TIA Portal V17,其他版本界面略有不同但逻辑一致。
第一步,新建项目,添加设备。在项目树里双击“添加新设备”,选择PLC型号S7-1214C DC/DC/DC,再添加HMI设备TP900 Comfort。设备添加完后,博途会自动生成一个Profinet网络,我手动把三个设备的IP地址分配好:PLC是192.168.0.1,HMI是192.168.0.2,变频器是192.168.0.3,子网掩码都是255.255.255.0,设备名称分别设为plc_1200、hmi_panel、g120_drive。
第二步,组态Profinet网络。在“网络视图”里把三个设备的Profinet接口拖到同一条线上,设备名称和IP地址在以太网地址属性里设置。这一步最容易出问题的是IP地址冲突或者忘记设置设备名称,导致后面下载程序时搜不到设备。建议在博途里先做“扩展的下载到设备”,在线搜索时确认每个设备都出现在列表里,再继续下一步。
第三步,组态变频器报文。双击网络里的G120设备,在“设备视图”里选择“报文配置”,我选了标准报文1(PZD-2/2,即两个字的过程数据),这个报文包含控制字、设定频率、状态字、实际频率,对大多数应用足够。分配好I地址和Q地址,比如I地址从IW64开始,Q地址从QW64开始,记下这个地址,后面PLC编程要用。
3.2 PLC侧数据处理:把报文值变成工程值
这一步是整个变频器参数显示的关键,因为报文里的频率和电流都是十六进制整数,不是我们日常看的Hz和A,必须转换。我现在用的G120报文1里,实际频率是0~4000(十六进制)对应0~50Hz,实际电流是0~4000对应0~额定电流,具体比例查G120参数手册。
我在PLC里建了几个DB变量来存变频器数据:G120_ActualFreq_REAL、G120_ActualCurrent_REAL、G120_StatusWord_WORD、G120_ControlWord_WORD。然后写了一个FC块,每次循环把IW64里的原始值转成实际值:
// 读取变频器报文原始值 "G120_StatusWord" := %IW64; "G120_RawFreq" := %IW66; "G120_RawCurrent" := %IW68; // 频率转换:4000(hex) = 16384(dec) 对应 50.0Hz "G120_ActualFreq" := INT_TO_REAL("G120_RawFreq") * 50.0 / 16384.0; // 电流转换:假设变频器额定电流为 22A,4000(hex) 对应 200% 额定电流 "G120_ActualCurrent" := INT_TO_REAL("G120_RawCurrent") * 2.0 * 22.0 / 16384.0;你在自己项目里要根据实际额定电流修改系数,别照抄。这个FC块放在OB1里循环执行,每扫一个周期刷新一次数据,HMI拿到的是PLC里已经转好的工程值,显示就没问题了。
PLC往变频器写设定频率也是一样的道理,反向转换:把设定频率REAL值除以50再乘以16384,写入QW66。控制字按G120手册要求,启动是047E,停止是047F,我在HMI上用两个按钮控制PLC的BOOL变量,PLC程序里按下启动按钮就把控制字设为16#047E,停止设为16#047F。
3.3 HMI画面组态实操
打开设备HMI,在“画面管理”里新建三个画面:Screen_Overview、Screen_Motor1、Screen_System。以Motor1画面为例,我从工具箱拖了几个关键控件进来:
I/O域用来看变频器频率和电流,这个控件是HMI显示变量的标准方式。拖进来后,双击打开属性,在“过程”选项卡里选择“过程变量”,点后面的按钮,从变量表里选G120_ActualFreq_REAL。显示格式设为小数1位,单位填Hz。注意属性里有个“线性缩放”,如果你直接让HMI显示PLC里的工程值,缩放比例就设为1:1,千万别在这里再做一次转换,不然你会看到数值翻了好几倍。
按钮控件做启动和停止。我把“启动”按钮的“事件”里添加“置位位”功能,变量选Motor1_Start_CMD_BOOL,值为true;“停止”按钮添加“复位位”功能,变量选Motor1_Stop_CMD_BOOL,值为true。按钮的“允许操作”选项一定要勾上,很多人做完画面发现按钮是灰色的点不动,十有八九是这个选项没勾。
报警视图和趋势视图我放在系统画面里。报警视图连的是PLC里的报警变量,需要在PLC侧组态报警文本;趋势视图选择要显示的变量,博途会帮你在运行系统里自动生成时间曲线。趋势视图的采样时间我设了1秒,数据保留24小时,够查班产量和设备状态用了。
3.4 编译下载与联合调试
全部组态完成后,在项目树里分别右键PLC和HMI,选择“编译”,再“下载”。下载前确认PG/PC接口选的是正确的网卡,博途一般会自动识别,但如果你电脑同时装了虚拟机,网卡多了以后容易选错,导致下载报错。
接下来是很多人头疼的仿真环节。我在这台开发机上同时装了PLCSIM和HMI仿真运行系统,实测联调顺序是这样:先把PLC程序下载到PLCSIM(启动仿真器后在里面下载),此时PLCSIM里PLC处于运行状态;再在博途项目树里右键HMI设备,选择“仿真”,会弹出一个运行窗口,这个窗口就是模拟的触摸屏画面。如果HMI仿真能正常启动且画面里的变量显示实时变化,说明整个链路通了。
联调的时候我习惯把博途的“监视表格”打开,同时监控PLC的变量表和HMI的在线变量。比如我在HMI上点了启动按钮,盯着监视表格里Motor1_Start_CMD_BOOL有没有变true,变频器的控制字有没有变成047E,一步一步定位问题,效率极高。
4. 常见问题与排查技巧实录
4.1 博途HMI仿真按钮灰色点不动怎么解
这个问题在热词里排得挺靠前,我也遇到过。仿真按钮是灰色,一般是下面几个原因:
- 项目里压根没添加HMI设备,只建了PLC,这种情况下博途的HMI仿真入口自然不可用,解决方法是添加HMI设备并完成组态;
- HMI设备没有编译,博途要求先编译生成运行系统文件才能仿真,右键HMI设备选择“编译”,看编译输出有没有报错;
- 运行系统版本和画面组态不匹配,如果你用了某个新版本才支持的控件,而当前运行系统版本太老,仿真也会被禁用,解决方法是把运行系统版本升级到和组态版本一致。
还有一个容易被忽略的因素是许可证。WinCC Comfort的高级功能是需要授权文件的,如果你在电脑上装了完整版但授权没激活,仿真功能会处于灰色状态。博途底部的“许可证管理”里可以看到哪些组件有授权,缺哪个补哪个。
4.2 仿真按钮能点但运行起来无反应
这个现象比灰色更隐蔽:仿真能启动,运行窗口也弹出来了,但画面上所有变量都是#####,按钮点了没反应。我这边排查的顺序是这样的:
第一,看HMI连接有没有建立。双击项目树里的“连接”,确认HMI和PLC之间的连接存在,且IP地址没写错。特别是用了PLCSIM仿真时,HMI仿真默认通过PLCSIM接口通信,不需要走物理网卡,如果你手动把连接改成网卡通信,反而连不上。
第二,看PG/PC接口设置。在博途菜单“项目设置”里,把HMI仿真的通信接口改为“PLCSIM”,而不是“Real Ethernet”。不然的话,仿真器去找真实PLC当然找不到。
第三,看Windows防火墙。有时候仿真运行时,系统防火墙会拦截PLCSIM和HMI仿真之间的数据交互,导致通信超时。我遇到过不止一次,把博途相关进程加入防火墙例外就正常了。具体操作:控制面板——Windows Defender防火墙——允许应用通过防火墙,添加S7-PLCSIM和WinCC Runtime的进程。
4.3 HMI变量显示#####或数值异常
这个我在调试变频器参数时踩过一次大坑。HMI上频率显示正常,电流却一直是0,查了半天发现不是通信问题,而是PLC侧报文地址写错了。G120报文1的排列是:控制字(QW64)、设定频率(QW66)、状态字(IW64)、实际频率(IW66)、实际电流(IW68)。我在PLC里把电流的I地址记成了IW70,结果读出来是零。所以遇到数值异常,先到PLC监视表格里看原始变量对不对,如果PLC侧对,那就是HMI连接错误;如果PLC侧就错,那就是报文地址或转换系数的问题。
数值显示成#####通常是数据类型不匹配,HMI变量是INT,PLC变量是REAL,两者连不上;或者显示位数设置太短,比如实际值超过9999,而你只留了4位显示,我一般把I/O域显示长度留到6位以上,宁可宽松不要溢出。
4.4 HMI Panel Image Updater下载和面板更新
项目交付时,现场的面板固件版本太老,博途下载时提示运行系统版本不兼容,需要更新面板镜像。这时候用到的工具就是西门子的HMI Panel Image Updater。
我第一次接触这个东西也挺懵,后来反复用了两次就清楚了。它的作用是把面板的系统镜像(包含操作系统和运行系统)更新到指定版本,相当于给触摸屏刷机。流程是这样的:
从西门子工业在线支持网站下载HMI Panel Image Updater工具,再下载对应面板型号的镜像文件(.img或.upd格式),把面板和电脑用网线直连,用ProSave把面板设为“更新模式”,再打开HMI Panel Image Updater选择镜像文件,点击开始,等进度条跑完,面板会自动重启,重启后就是新版本了。
这个操作有个必须注意的点:镜像更新会把面板里的所有数据清空,包括许可证、IP地址、程序文件。所以更新前一定要备份原有项目,更新后重新下载程序和设置IP。我建议在工厂交付前就把面板版本统一到和博途一致的版本,避免后期一台一台刷系统,费时费力。
4.5 现场和仿真不一致的隐藏坑
最后说一个不太容易察觉但很重要的坑:仿真环境里HMI和PLC都在电脑上,通信路径是虚拟的,几乎不会丢包;到了现场走真实网线,通信延迟和丢包就会暴露出来。我在现场调试时遇到过画面偶尔卡顿、按钮按下去要两秒才响应,排查下来是交换机的端口速率不匹配和网线太长导致信号衰减。
解决办法:现场网络交换机尽量选工业级,端口速率统一设100Mbps全双工,不要用自适应;网线不要超过80米,超过就加交换机中继;HMI和PLC不在同一网段的话,要检查路由器的子网掩码配置,别让广播报文把网络堵了。这些看着是网络工程的事,但在HMI项目里不解决,客户验收的时候体验会非常差。
5. 一点经验总结(按我的习惯)
项目做完回头看,最值钱的不是我会拖几个控件、配几个变量,而是那一套不会写在官方手册里的排错思路。做HMI开发,本质上是把PLC的逻辑、变频器的数据、操作员的操作习惯这三件事揉到一块。你如果手里也是PLC和变频器的组合,先把通信打通、数据验证正确,再去做好看的画面,顺序一定不能反。我习惯先把所有要显示的变量在HMI上全部显示出来,一条一条核对数据对不对,全部对了才开始做布局美化,这样可以避免“画面做得很好但变量全错”的尴尬局面。
调试工具方面,博途的在线监视功能绝对是排查利器,不要等到现场才抓瞎。在办公室里用PLCSIM加HMI仿真把逻辑全部验证过,去现场就只做硬件接线和通信确认,一般半天就能收工。就算要现场改逻辑,也可以笔记本直连CPU在线修改,速度比你一趟趟跑触摸屏快得多。
如果后续要在这个基础上扩展,建议往两个方向走:一是把HMI的运行数据定时上传到MES或者上位机数据库,让管理层能在办公室看到产量和OEE;二是加一个远程访问模块,让设备厂商能通过网络远程看画面,减少出差成本。这两个方向西门子都有成熟的方案,网上资料很多,你按需去选就好。这次的项目就到这儿,上面这些经验希望能帮你少踩几个坑。