
现在做中小型自动化设备经常要面对一个问题PLC 和触摸屏怎么配才能既好开发又不留后患。我最近在做的中型装配设备上主力控制单元选的是汇川 H5U人机界面配了同门的 IT7070。这两个放在一起并不只是因为同品牌兼容更是因为模块化开发的思路恰好能被这套组合完整落地。这篇实录会从头讲落地过程包括选型、组态、模块化编程、HMI 画面设计以及现场联调踩过的坑。如果你正在考虑中小型单机设备或产线工位的控制方案这份记录可以参考。整套系统做下来我的感受是硬件选型决定项目难度的上限而程序结构决定调试时间的长短。H5U 和 IT7070 的组合在中型偏小的设备上确实合适接下来我按实际推进顺序把完整过程捋一遍。1. 选型逻辑为什么 H5U 和 IT7070 能搭成一套实用组合1.1 控制对象与硬点梳理选定型号之前先把控制对象摸清楚。我面对的是一台小型装配设备工艺流程包括上料、定位、压装、检测、下料五个环节听起来不算复杂但把点位摊开看并不少两个伺服轴负责载台的移动和压装深度四只气缸负责夹紧和推料二十来个光电传感器分布在各个工位再加上启动、停止、急停、双手启动按钮和状态指示灯数字输入大约需要二十点数字输出十六点左右。另外还有几路变频器我打算用总线方式控制省去一大堆模拟量线。这个规模属于典型的中型偏小设备。用微型 PLC 会显得资源紧张程序写深一点内存就不够上大型控制系统从成本和体积看又完全是浪费。H5U 正好落在中间本体自带一部分输入输出不够的可以通过扩展模块补齐整体配置比较灵活。我在做 I/O 清单的时候特意留了百分之十五的备用点后来改需求时派上了大用场。1.2 H5U 身上的几个关键指标H5U 吸引我的地方不只是价格而是它的控制架构。第一它支持 EtherCAT 主站伺服驱动器可以直接挂在总线下面省掉传统脉冲输出的接线和高速计数器配置。第二运动控制和逻辑控制放在同一个工程里轴的点位、速度、加减速曲线和普通开关量逻辑可以在一个软件环境里统一编写不需要单独再搞一个运动控制器然后用通信和 PLC 来回传数据。第三它提供 Modbus TCP 通信接口HMI、上位机、视觉系统都能比较方便地对接。实际开发中EtherCAT 带来的便利比想象中明显。普通脉冲控制一个轴就要占用 PLC 的高速输出口两个轴就要考虑输出口够不够、接线端子是否牢固换成总线控制后所有轴相关的参数都能在组态里查看和修改。调试时在软件里监控伺服的实时电流、位置和报警代码比带个万用表在柜子里量信号方便得多。1.3 IT7070 在组合里扮演的角色IT7070 是 HMI 里的一个 7 英寸型号正好适合这类单机设备。7 英寸屏装在设备操作面板上不占地方显示的信息量又足够用。它支持以太网口和串口和 H5U 在同一个局域网里通过 Modbus TCP 通信配置起来很直接。组态软件里画面编辑、变量关联、报警、配方这些常规功能都有中小型设备的现场需求基本覆盖得住。有些人会觉得触摸屏越大越好但我的看法是屏幕尺寸要跟操作员距离和安装空间匹配。7 英寸屏上放五六个按钮、几个数据显示框已经是合理密度做出来的画面干净直接。IT7070 这个尺寸恰恰能把“该显示的显示不该显示的收起来”这件事做好。1.4 选型时的真实考虑选同一家的 PLC 和 HMI最大优势是开发阶段少踩通信坑。H5U 和 IT7070 之间的 Modbus TCP 地址规则一致PLC 侧配置好寄存器地址HMI 侧直接引用两边软件里都有对应的数据类型和数据区说明不用像跨品牌那样反复查协议文档、试地址偏置。项目现场如果出现问题不用在两个供应商之间来回扯皮自己就能定位。我也做过跨品牌触摸屏接 H5U 的项目不是说完全不行而是 Modbus TCP 需要手动确认站号、寄存器类型、字节顺序这些细节联调时间会多出不少。如果客户没有指定面板品牌我会优先建议配套 HMI如果客户已经有固定供应商H5U 开放 Modbus TCP 从站通常也接得上。1.5 预算与备件管理的中长期影响这套组合在成本上属于比较可控的方案。成套采购通常比分开买不同品牌的 PLC 和 HMI 更划算而且备件种类减少之后仓库压力和维护培训工作量都会降下来。现场电工只要熟悉一套软件、一套操作习惯排查故障时不需要同时理解两种完全不同的编程环境。对于设备厂和最终用户来说这都是实实在在的隐性收益。2. 工程搭建从零建立 H5U 与 IT7070 的通信链路2.1 软件准备与 IP 规划动手写程序之前先把开发环境准备好。H5U 使用汇川的 PLC 编程软件IT7070 使用配套的 HMI 组态软件两个软件需要分别安装。电脑上最好固定一个网段建议把电脑网卡 IP 设置成和 PLC、HMI 同一网段比如电脑 192.168.1.100。如果用自动获取 IP设备一多很容易跳成不同网段在线监控时连接不上。我习惯做一张 IP 地址表把 PLC、HMI、伺服驱动器、视觉相机、上位机全部列进去。整个过程里我特别强调不要用 192.168.1.1 这个地址很多设备的默认网关都喜欢占用它容易冲突。合理的做法是 PLC 用 192.168.1.10HMI 用 192.168.1.20电脑用 192.168.1.100后面留出一段给可能的扩展设备。2.2 新建 H5U 工程并配置通信参数在 PLC 编程软件里新建工程时选择 H5U 对应型号。建完工程后第一步不是写逻辑而是配置硬件组态把 EtherCAT 总线上挂的伺服驱动器扫描出来确认站号和拓扑结构把扩展 I/O 模块的地址分配好在网络配置里把 Modbus TCP 从站功能打开规划通信数据区。H5U 的数据寄存器以 D 区为主位元件以 M 区为主。HMI 读写 D 区对应保持寄存器读写 M 区对应线圈。这个对应关系后面容易出错我在联调时踩过后面专门讲。通信数据区建议集中在连续的地址段比如 D100 到 D200 作为 HMI 读写区不要东一个西一个地乱分布否则变量表维护起来很痛苦。2.3 IT7070 工程与设备绑定HMI 侧新建工程时选择 IT7070 型号。进入软件后先添加 PLC 设备协议选择 Modbus TCP填好 H5U 的 IP 地址和站号。然后开始建变量每个变量要选择类型、读写权限和对应寄存器地址。启动按钮对应的可以是 M0模式选择对应的可以是 D0轴当前位置对应的可以是 D10 和 D11 组成的双字。HMI 的变量和 PLC 变量不是同步自动生成的需要手动建立关联。如果 PLC 里已经定义了符号变量可以在 PLC 软件里导出变量表再通过 HMI 软件导入减少手工录入产生的地址输入错误。我第一次做的时候是手工一个个敲的后来发现变量一多敲错一个地址要查半天强烈建议用导入功能。2.4 第一次联机的测试清单通信配置完成后不要直接写满屏画面先做一轮最小化联调。我在 PLC 里放了一个测试用的 D100初始值写 0HMI 上放一个按钮和一个数值显示按钮按下时把 D100 写 1释放时写 0屏幕上能看到对应变化。测试清单并不长但每一项都要过PLC 侧强制 M0HMI 上对应的指示灯亮HMI 按钮置位 M0PLC 在线监控里看到 M0 为 ON工程里写一个立即数到 D100HMI 数值显示一致拔掉五秒网线HMI 报警提示通信中断重新插上网线后自动恢复。这轮测试通过后面画面和程序的对接就不会有通信层面的幺蛾子。3. 模块化编程把设备功能拆成可复用的程序块3.1 模块划分的基本思路H5U 支持 IEC 61131-3 的编程语言程序组织可以按任务和功能块来。我建议不要用一个大梯形图罩住所有逻辑而是把每个工艺设备封装成独立功能块。前面提到的上料、定位、压装、检测、下料五个环节每个环节建一个功能块功能块内部保留自己的状态、定时器、报警判断对外只暴露输入和输出接口。模块划分遵循三个原则输入输出参数只暴露必要信号内部变量全部私有化每个功能块内部维护自己的状态机不依赖外部全局步号报警信号汇总到统一的报警区不在功能块里直接写 HMI 控件。这样做的好处是调试时单独监控其中一个功能块不会影响其他部分修改某个工位的动作时不用翻找无关程序段。3.2 一个轴控功能块的接口设计以伺服轴控制为例如果把所有轴参数都暴露出来功能块的引脚会失控。我设计了一个FB_AxisCtrl功能块输入侧只保留使能、命令类型、目标位置和目标速度输出侧只保留准备、忙、完成和错误码。代码示意如下FUNCTION_BLOCK FB_AxisCtrl VAR_INPUT bEnable : BOOL; iCmd : INT; // 0: 停止, 1: 回零, 2: 绝对定位, 3: 相对定位 rTarget : LREAL; // 目标位置单位 mm rSpeed : LREAL; // 目标速度单位 mm/min END_VAR VAR_OUTPUT bReady : BOOL; bBusy : BOOL; bDone : BOOL; wErrorID : WORD; END_VAR内部实现包括命令切换、定位触发、到位判断、超时报警。操作员在 HMI 上只需要修改速度和位置伺服增益和加减速等参数留给工程师在软件里调。接口收敛之后主程序调用这个功能块只需要五行代码现场维护者理解起来非常快。3.3 用状态机替代散落的置位复位自动流程如果靠一排 SET 和 RST 指令实现程序是会运行的但改起来非常痛苦。一个工位内部的状态切换适合用状态机来表达空闲、启动、执行、完成、异常。每个状态下只执行该做的事情条件满足后跳转到下一个状态。用 H5U 的结构化文本写状态机很顺手。大致结构如下CASE nState OF 0: // 空闲等待启动命令 IF bStart AND bSafe THEN nState : 10; END_IF; 10: // 上料气缸伸出 Q_LoadCylinder : TRUE; IF DI_LoadCylinderInPlace THEN nState : 20; END_IF; 20: // 等待定位完成 ... END_CASE;把每一步都编号调试时在 HMI 上显示当前状态号设备停在哪个环节一目了然。需要临时跳过某个步骤时直接修改状态号即可复现问题不用一条条查置位条件。3.4 配方与数据结构的设计要点多品种生产几乎是必然需求配方在 H5U 里可以用结构体数组实现。比如定义一个配方结构体包含配方名称、轴位置、轴速度、气缸延时、检测阈值等字段再定义一个数组下标就是配方号。参数通过 HMI 配方画面对外呈现选中配方号后把整组参数写入 PLC 当前缓存区。配方存放位置要注意。普通寄存器断电会丢失工艺参数必须放到 PLC 的掉电保持区。我在实际项目中吃过亏设备断电重启后操作员设置的几十个参数全部恢复默认值后来把配方区域改成掉电保持区才解决。经验就是工程规划阶段就把“工艺参数放保持区临时变量放普通区”写进代码规范不要等现场出问题再改。3.5 任务划分与数据区防冲突H5U 支持多种任务配置不同周期的任务可以承载不同类型的逻辑。我的做法是普通逻辑和工艺状态机放在基础任务里报警扫描放在独立任务HMI 快速刷新需要的变量单独建立一个通信数据刷新段。这样整体扫描周期稳定不会因为某个环节的定时器阻塞拖累全部逻辑。数据区防冲突容易被忽略。HMI 写 D0 的时候如果 PLC 程序里同一个扫描周期也写 D0两边就会互相覆盖结果飘忽不定。解决方法是把数据区明确分区D100 到 D150 是 HMI 写入区PLC 只读D200 到 D250 是 PLC 状态区HMI 只读每个区用途写进文档禁止混用。4. HMI 画面组织让操作员看得懂、点得准4.1 页面层级与操作流程设计IT7070 是 7 英寸屏分辨率有限更需要在页面数量和控件密度之间做取舍。我习惯把画面分成四层主画面、自动运行画面、手动调试画面、参数与报警画面。主画面显示设备整体状态、当前模式、产量、故障标志和启停按钮自动运行画面显示流程状态和轴位置手动调试画面用于单独动作参数与报警画面负责配方修改和历史记录。操作员平时只盯主画面和自动运行画面不需要翻页就能完成日常操作。页面的切换按钮统一放在右上角每个页面保持相同的导航位置避免操作员换到另一页后找不到返回按钮。按钮尺寸要比手指实际接触面积略大间距足够方便戴手套操作。4.2 权限管理与安全边界现场操作员、工艺员、工程师的权限应该分开。IT7070 支持多级用户配置我做了三级权限操作员只能启动停止、自动手动切换工艺员可以修改速度、位置、延时等工艺参数工程师才能进入配方管理和系统设置。权限控制在 HMI 端完成PLC 只接收最终命令。这样做的好处是 PLC 侧逻辑不会因为权限判断增加复杂度安全边界比较清楚。有一点要注意权限认证只在 HMI 上做远程操作时生效如果有人在电控柜里用电脑直接连接 PLC 修改程序那属于工程调试范畴不在操作员权限管理范围内。4.3 报警信息的呈现与归档报警功能不能只做一个红色指示灯就结束。我的做法是PLC 把所有报警统一编码写到报警区 D300HMI 根据报警编码查表显示对应文本。报警码 10 表示“上料超时”报警码 11 表示“压装位置偏差”报警码 12 表示“气压不足”。HMI 端只负责显示和归档判定逻辑全部在 PLC 里完成。报警处理有几个细节要做到报警发生时蜂鸣器响操作员确认后消音但记录保留报警原因恢复后自动清除故障未恢复前不允许直接启动设备同一信号要加上升沿和延时滤波不能每秒触发一条报警。IT7070 的报警控件支持历史记录数据源头从 PLC 写入掉电后记录是否保留需要提前确认。4.4 数据记录与趋势显示7 英寸屏不适合长时间曲线分析但显示短时趋势完全够用。我在 HMI 上放了两个趋势图一个显示当前轴位置一个显示压力或温度变化。操作员能在现场直观地看到轴运动和状态波动很多机械问题还没上报就能发现苗头。长时间数据记录不建议存在屏里。如果客户要求报表最好让上位机通过 Modbus TCP 直接读取 PLC 数据区或者用 HMI 扩展存储导出 CSV。PLC 端维护一张不断更新的数据表上位机只读这张表接口清晰还不会拖累控制逻辑。5. 联调实录我在现场踩过的几个坑5.1 HMI 写入变量不生效问题出在地址类型联调第一天就遇到奇怪现象HMI 按钮按下去按钮本身会变色但 PLC 里的启动信号始终没有变化。排查过程从 HMI 端开始先确认按钮动作有触发再检查变量地址最后在通信报文层面定位到问题HMI 里把位元件地址的类型选错了把 M 区当成了保持寄存器区而 H5U 的 M 区对应的是线圈必须用位地址访问。解决方法是把 HMI 变量表重新整理D 区全部按保持寄存器配置M 区全部按线圈配置地址类型逐项核对。经验教训是不要手工在 HMI 里敲大量变量最好把 PLC 侧符号变量表导出以后导入 HMI。导入后依然要抽查三五个地址确保偏置和类型完全一致不能只看变量名。5.2 EtherCAT 从站偶发掉线干扰问题查了一整天设备运行了几个小时后驱动器突然报警通信故障PLC 报 EtherCAT 从站丢失。第一次复现没有规律重新上电又能跑但过一段时间又丢站。我用电脑在线监控查看从站状态变化时间点发现掉线总是集中在上料气缸动作和压装电机大电流启动的时间段附近。排查链路是这样走的先检查网线水晶头压接质量没问题再检查伺服驱动器的屏蔽层接地发现动力线和 EtherCAT 网线走在同一个线槽里距离只有十几厘米大电流输出时对网线产生了干扰。处理方法是动力线和通信线分开走线网线重新压接并加强屏蔽层接地再把 EtherCAT 同步周期从 1ms 放宽到 2ms。工艺上并不需要 1ms 的同步精度放宽周期后系统稳定多了。5.3 轴回零位置慢慢偏移问题出在电子齿轮比自动运行了一个班次后开始发现压装轴的位置精度在下降起初以为是机械丝杆间隙最后把问题定位到伺服轴配置上。这个轴没有用绝对值编码器每次上电都需要通过光电传感器找原点如果电子齿轮比设置不精确执行机构在每个加工循环里的实际位移就和指令值不一致误差不断累积。排查思路不是直接调机械而是先把电子齿轮比重新算了一遍。电机旋转一圈对应编码器反馈 P 个脉冲丝杆导程是 L 毫米位置指令单位是毫米时电子齿轮比的分子分母要按照 P 除以 L 来设计整数比。手册上有些参数给出的是简化小数实际驱动器要求分子分母都是整数。重新计算并下发参数后再做了一次低速找原点位置重复精度恢复正常。5.4 报警记录刷屏问题出在信号抖动还有一个容易被忽视的问题一个光电传感器因为机械抖动在几秒钟内反复通断报警记录里出现了好几十条“料不到位”。PLC 扫描周期比传感器抖动快得多每次扫描都触发报警条件HMI 就把每一条都当成独立报警记录下来。解决思路是在报警判定之前加去抖处理。接近开关、光电开关、限位信号进入 PLC 后先做一段 20 到 50 毫秒的滤波或者使用上升沿加定时器只有信号稳定超过设定时间才允许触发状态变化。报警输出到触摸屏时不要直接使用瞬时位采用锁存型报警位按下复位按钮才清除。这样报警记录从几十条降到两三条操作员看起来也不会慌。5.5 掉电重启后参数丢失保持区配置要提前做设备调试到后期客户要求断电重启一天后再验证。我第二天到现场发现操作员前一天在 HMI 上设置的轴参数全部恢复默认值。判定为配方数据没有存放在掉电保持区断电后普通寄存器被清零。处理方式是重新规划数据区把配方参数、累计产量、报警记录、校正值全部移到 H5U 的掉电保持区普通运行变量继续留在普通区。从那之后我在每个项目里都要求先做一份“数据存放表”哪些数据需要掉电保存一一列清楚。保持区和普通区的选择在工程阶段就定好比现场改程序省事很多。6. 模块化带来的维护收益与后续扩展6.1 新工位复制效率明显提升项目交付后没多久客户提出要加一个检测工位。因为程序已经拆成独立功能块我只需要把检测工位的功能块复制一份修改内部 IO 地址和判定逻辑然后在主流程的状态机里增加一步调用HMI 上加一页画面联调时间比预期缩短了一半。模块化真正的收益不在第一次写程序的时候而在需求变化和设备复制的时候。程序结构清晰新增功能不会把原有逻辑搅乱单个功能块出了问题也只影响对应工位不会让整机程序崩掉。6.2 快速定位现场故障有了功能块和状态机现场故障排查变得直接。设备停在某个状态时HMI 上能直接显示当前状态号。比如状态号停在“等待定位完成”轴却没有动作首先查伺服使能、目标位置和驱动器报警范围被压缩得很小。现场电工按状态号对照文档查问题十分钟内能定位大多数故障。我还在 PLC 里加了一个“监控字”把所有关键条件的当前状态打包到几个寄存器里HMI 上做一个调试页面按位显示。这样就算工艺逻辑复杂操作员也能看出是传感器没到位还是气缸动作没完成不用拿编程软件到现场找。6.3 预留上位机与 MES 对接接口设备要接入产线管理系统这是很多项目早晚会遇到的需求。我在 PLC 里维护了一个“数据交换区”把产量、报警、当前配方、设备状态统一放到连续地址段上位机只读这个区域不读取分散的工艺变量。这样上位机开发方不需要理解整个 PLC 程序只要拿到一张数据表就能做对接。通信异常时 PLC 逻辑不受影响。上位机断开了设备继续按本地逻辑运行不会因为 MES 没有响应而停机。接口修改只需要改数据交换区的表格不用动工艺代码这对设备厂来说是最稳妥的对接方式。6.4 后续可以扩展的方向H5U 和 IT7070 这套组合在远程运维方面也有发展空间。通过工业网关把 PLC 数据传到远程监控平台设备厂商可以在办公室里看到现场设备的运行状态、报警记录和关键参数提前判断故障苗头。IT7070 本身负责本地人机交互远程监控尽量走独立的数据通道彼此不要互相干扰。程序语言方面采用结构化文本和功能块写法将来如果项目升级到其他支持 IEC 61131-3 的平台代码迁移成本比纯梯形图低很多。至少对我来说模块化的代码结构让维护变成了组态和数据表管理而不是每次都要重新读懂一整段逻辑。最后再分享一个我自己的体会做这类组合开发最值钱的工作不是写代码而是早期把 IP 地址表、变量清单、数据存放表和页面结构定清楚。只要通信通路建好、模块边界划清设备交到客户手里以后改起来和查起来的效率会远超同类的“一锅炖”程序。H5U 和 IT7070 这对组合本身不复杂复杂的永远是工程习惯。