做这套设备程序的时候,很多人一听到“三个步进加三个伺服”,脑子里的第一反应是:脉冲轴用PLC直接输出,伺服轴走总线,两边是两套完全不同的控制逻辑,程序也得写两遍。实际上用汇川H3U做这种混联结构,是可以把三个步进和三个伺服统一收进一套模板里的,关键是你怎么设计PLC程序模板和触摸屏程序模板。这篇文章就把我近几年折腾H3U配CANlink伺服加脉冲步进的经验完整拆开来讲,从选型逻辑、程序架构、触摸屏画面到现场调试的坑,一口气说清楚。
1. 当初为什么选了H3U加CANlink:这套组合的真实动机
1.1 六个轴的实际负载构成
先看这台设备的轴结构。三个步进主要负责低速、定位精度要求没那么苛刻的动作——比如料带输送、推料、横移换向;三个伺服则负责高速、高重复定位精度的关键工位,比如裁切、压合、精密对位。这种“重载精定位走伺服,轻载粗定位走步进”的配置在中小型自动化设备里非常常见,不是因为买不起六个伺服,而是步进在低速大扭矩场景下确实够用,且整套电气成本能压下来不少。
我当时算过一笔账:三个伺服用CANlink总线方案,驱动器本体比脉冲型贵一点,但省掉了三路高速脉冲输出口和对应的接线、屏蔽、抗干扰处理;而三个步进如果也走总线,步进驱动器的成本反而会比脉冲型贵不少,而且低速脉冲控制本身没有丢步的通讯延迟问题。最终定下来就是标题里这个方案:三个伺服走CANlink,三个步进走H3U本体脉冲。
1.2 为什么伺服非得走CANlink,而不是直接给三路脉冲
H3U自带的高速脉冲输出口足够带三个步进,但如果你把三个伺服也全挂到脉冲口上,问题就来了:高速脉冲线长距离传输的抗干扰能力差,频率一高就容易丢脉冲,而且伺服的位置反馈、力矩数据、绝对值编码器信息、报警代码想传回PLC就会非常麻烦,要么多布一堆IO线,要么靠通讯口单独组网。
CANlink是汇川在CAN总线基础上做的高实时性同步协议,伺服挂在上面,H3U作为主站可以周期性下发速度/位置指令,同时收回每个伺服的位置反馈、电流、报警信息。对于三个伺服的高频同步动作来讲,CANlink总线的实时性比RS485的Modbus通讯强得多,数据交换周期可以做到亚毫秒级。实际用下来,H3U的CANlink主站带三个SV660系列伺服,总线上数据更新非常稳,没有出现过中断或延迟抖动导致的轨迹偏差。
1.3 H3U在这个项目里到底扛不扛得住
H3U属于汇川的中型高性能PLC,最大支持4轴200KHz高速脉冲输出,自带两个通讯口加一个CANlink主站口。有的人可能觉得H3U的价格都够买两个小型PLC了,为什么要用一台H3U扛六个轴?这里的关键不是通道数量,而是程序模板的统一性。你用一台H3U,六个轴的动作规划、联锁逻辑、配方切换、报警汇总全部在一个程序里完成,轴与轴之间的互锁延时不需要靠PLC之间的通讯中转,逻辑上更安全,调试时也不需要同时开两个编程软件去盯两套程序。
而且H3U支持结构化编程,可以建功能块、用结构体传参,这对我后面做轴控制模板帮助非常大。如果用小型PLC,数据区紧张、功能块能力受限,三轴三伺服的模板就很难抽得干净。
2. 硬件拓扑和轴分配:动手写程序前最该画清楚的图
2.1 整机电气核心配置
先给出一份按这套方案落地时的硬件清单,照着配基本不会错。H3U本体是主控,三个步进驱动器用脉冲方式挂在Y0、Y1、Y2三路高速脉冲口上,三个伺服驱动器全部挂在CANlink总线上。触摸屏选了汇川的IT系列,这样和H3U的通讯可以直接用内置的驱动,走以太网或串口都行。
| 部件 | 型号取向 | 备注 |
|---|---|---|
| PLC主控 | H3U系列 | 本体自带CANlink主站、3路高速脉冲输出 |
| 伺服驱动器 | 汇川SV660系列 | 三台,全部设CANlink从站 |
| 伺服电机 | 对应750W级别 | 根据负载选型 |
| 步进驱动器 | 脉冲型任意主流品牌 | 三台,共阴/共阳接法按驱动器要求 |
| 步进电机 | 57或86机座 | 看扭矩和转速需求 |
| 触摸屏 | IT系列 | 以太网线连接H3U |
| CANlink终端电阻 | 120R | 总线两端各一个 |
2.2 CANlink站号分配和伺服参数设置
三个伺服在CANlink上要占用独立的站号,一般在驱动器面板上设置或者通过调试软件写。我习惯把三个伺服按设备工位定义为1号、2号、3号站,在PLC里建立一个轴映射表,通过轴号去索引对应的从站地址,而不是在程序中到处写死站号。
伺服侧需要重点设的参数是通信协议和站号、电子齿轮比、刚性等级、使能方式。CANlink伺服和PLC建立通讯之后,驱动器面板上可以看到总线状态。曾经遇到过站号拨码误设导致两个伺服冲突的情况,现象是两个伺服都不动,PLC报警通讯超时。排查方法是把所有伺服断电,逐个上电看驱动器的通讯指示灯状态,确认当前总线上的节点清单。
2.3 三个步进轴的脉冲分配和外接IO
步进轴的脉冲输出分配在H3U的Y0、Y1、Y2,由于还有一个第三轴占用了其中一路高速口,所以程序里要留意H3U高速输出口与高速计数口之间的复用关系。方向信号按分配表接Y4、Y5、Y6,脉冲方式选择“脉冲加方向”,这是最通用的接法。三个步进驱动器的使能信号我没有直接接到PLC输出口,而是通过中间继电器统一控制,原因是步进驱动器使能口电流不大但有些品牌高电平有上拉要求,直接用晶体管输出可能驱动能力不足。
三个步进轴的原点、正负限位全部进入PLC的普通输入点。这里有一个值得注意的点:步进轴的原点开关和伺服轴的原点开关类型不一样,步进开关建议用常开感应开关,伺服近点信号则要配合Z相脉冲使用。IO分配时我把步进轴的原点和限位分开排在X0到X10之间,并且每一轴的限位都留了常开常闭两种注释,方便现场根据机械结构改动。
3. PLC程序模板的核心:把六个轴的控制逻辑收进功能块里
3.1 为什么H3U能把模板写得这么规整
H3U的编程软件支持轴控制库和结构化文本,这是模板能做好的前提。早期写三轴程序,很多人会把每个轴的使能、回零、点动、定位代码复制三份,改改软元件地址。这样做项目周期短还好,但如果后续要加轴、改逻辑,你会发现改一个动作要同步修改三处甚至更多,非常容易漏。
我在这套模板里的做法是:建立一个统一的轴功能块,把轴类型(步进或伺服)、脉冲输出口或总线站号、原点模式、软件限位、加减速默认值全部定义为结构体输入,功能块内部封装回零、使能、点动、绝对定位、相对定位、暂停、停止、报警触发这些基础动作。外部调用时,只需要分别实例化六个功能块,再给每个功能块填对应的轴参数。后面新增一个轴,不是复制一堆程序,而是新建一个功能块实例,填参数即可。
3.2 一个轴功能块里的四个基础动作
一个轴功能块内部,我划分了四个核心动作:使能、回零、定位、点动。每个动作都有自己的启动条件、执行状态、完成标志和错误输出。
使能动作在H3U里对应脉冲轴的使能标志或者CANlink伺服使能指令。对步进轴而言,使能就是输出一个高电平给驱动器,反向使能就是拉低;对伺服轴而言,使能要发送总线指令,同时还要等待伺服驱动器返回使能完成状态。我们在功能块内部做了一个等待超时判断,如果2秒内没有收到使能完成信号,立即触发报警。这个超时保护在总线伺服上非常重要,因为CANlink如果断电、掉站,你单纯发指令根本不会知道伺服的状态。
回零动作的设计是这个模板和普通程序最不一样的地方。步进轴和伺服轴的回零逻辑完全不同,后面单独开一节讲。功能块里我只预留了回零模式这个选择参数,调用时按轴类型传入不同的模式编号,内部对应不同的回零时序。
定位动作分绝对定位和相对定位两种,输入目标位置、速度、加减速时间。功能块内部会根据当前位置和目标位置计算运动方向,调用H3U的定位指令或总线位置指令。这里有一个细节:H3U的脉冲轴定位指令需要的是脉冲数,而实际设备工程师在触摸屏上填的是毫米单位,所以我在功能块里加了一个电子齿轮换算系数,统一把毫米转成脉冲数,伺服轴则通过CANlink的位置单位处理,屏蔽掉底层单位差异。
点动动作主要用于手动调试,功能块内部会去判断轴方向输入,然后按设定速度持续输出。为了防止手一抖就撞机,点动速度在功能块里做了两档限制:调试速度和允许最大速度,触摸屏上如果填入超过设定上限的点动速度,功能块会自动忽略并保持在上限值。
3.3 轴状态机:不要用一堆怪异的置位复位撑起整层逻辑
如果用梯形图写六个轴的自动流程,最简单粗暴的做法是每个轴一个“运行中”标志,再叠加互锁条件和完成条件,最后用SET/RST把流程串起来。但六个轴的流程一旦复杂,尤其是伺服和步进要联动的时候,这种做法的维护成本几乎是灾难级的——你可能为了加一个暂停逻辑,把十个输出点的时序都改掉。
我的模板里给每个轴配了一个状态机,状态从0到6依次是:空闲、使能中、已使能、回零中、已回零、运行中、报警。H3U里可以用整数寄存器存储每个轴的状态,在功能块内部用一个CASE语句或者跳转指令实现状态切换。外部自动流程只需要判断目标轴当前状态是否为“已回零”或“已使能”,再给出下一步运行条件,六个轴的流程就变成了六个条件判断的组合,互锁逻辑全部集中在主程序里的一个“自动流程矩阵”区域,不再散落在每个轴的起保停电路里。
3.4 报警体系和安全互锁
报警体系在PLC模板里我分成两层:轴级报警和设备级报警。轴级报警由功能块内部触发,比如运动超时、跟随误差超限、通讯断站、驱动器报警代码读取等;设备级报警由主程序处理,比如气压不足、门禁打开、急停触发、多个轴同时要求动作等。
设备级安全互锁方面,我的做法是设置一个全设备安全运行字。急停、门禁、气压三个信号中任何一个无效,安全运行字置为不可运行状态。所有轴的自动流程、手动点动、回零动作,都必须在安全字允许状态下才能执行。这样做的意义在于:即使轴功能块正常,外部逻辑误触发,只要安全字没放开,轴就不会动。层面越靠下的保护越可靠,这个思路值得在所有模板里保持。
4. 触摸屏程序模板:操作工看到的是整机,工程师看到的是参数
4.1 IT触摸屏的画面结构分层设计
触摸屏程序模板我没有按“一个页面写完所有内容”的常见做法来,而是分成了五层结构:开机引导层、监控层、操作层、参数层、维护层。
开机引导层只在屏上首次上电显示,用来做运行前条件检查,包括急停是否复位、模式选择开关是否在手动位、伺服总线是否在线。这个页面容易被人忽略,但实际在车间里非常实用。操作工不需要理解PLC内部逻辑,只要看这页打勾了没有,就知道下一步能不能启动设备。
监控层是设备正常运行时的主画面,展示六个轴的当前位置、速度、运行状态、报警摘要。操作层放的是手动模式下的轴操作按钮和自动模式下的启动、暂停、停止。参数层放的是六个轴的位置、速度、加减速、原点偏移、电子齿轮等工程参数的配置。维护层放的是IO监控、伺服报警历史、PLC软元件强制,这部分我设置了密码权限,防止误操作。
4.2 配方和产品切换的核心机制
三个步进加三个伺服的设备,很多情况下不只是跑一个固定的动作。产品换了,六个轴的行程、速度、定位点都可能不同。如果每个参数都靠操作工手工输入,很容易漏改或者输错一个数字。
触摸屏模板里我做了配方功能:一组配方对应一套完整的六个轴参数。配方下载到PLC时,不是直接覆盖PLC的当前运行参数,而是先写入一个配方缓冲区,PLC在收到“配方同步请求”后才把缓冲区数据整体搬到运行参数区。这样做的好处是避免参数在写入过程中被半执行,防止设备在切换配方时发生动作突变。
配方数据我用的是IT触摸屏的配方功能,配方数据存到屏的掉电保持区里有风险,后来我把配方表放到PLC的保持寄存器里。触摸屏负责编辑和显示,PLC负责存储,双方通过通讯同步。即使触摸屏坏掉换新屏,配方的数据也不会丢。
4.3 触摸屏和H3U的变量映射规则
触摸屏和PLC通讯,变量地址映射是模板真正省时间的地方。我按照轴号和参数类型固化了变量地址规则:轴的启动、停止、回零、清除报警变量放在固定编号区段;轴的位置、速度、加速度、原点偏移等运行参数也按轴号连续排列。这样在IT屏上新建画面时,同一类的控件只需要复制粘贴,改一下变量末尾的轴号数字即可。
很多人做触摸屏变量时喜欢直接映射到H3U的D寄存器地址,比如D100、D101,但这样做画面多了以后容易重复和遗漏。我采用的是“标签变量+映射地址”的方案,在触摸屏里先建立轴1速度、轴1位置这些标签,然后把标签映射到PLC的具体D地址。这样做的好处是画面里的控件引用的是标签名,万一PLC地址调整,只要改标签映射即可,不用重做整个画面。
5. 步进和伺服之间最关键的五个差异,模板里必须分开处理
5.1 回零逻辑完全不同,不能共用一套代码
三个步进轴用的是增量式步进电机,断电后位置信息不保持,上电必须回原点。步进回零的逻辑相对简单:先低速往原点方向找近点开关,开关触发后立即减速停止,然后以更低的爬行速度反向找退出信号,最终把这个位置设置为原点。步进回零的精度很大程度上取决于近点信号的重复精度和爬行速度,我的模板里步进轴的爬行速度默认给到5mm/s,要求高的可以调到2mm/s。
伺服轴用的是绝对值编码器,理论上断电后位置不丢,可以不需要每次上电都回零。但在实际项目里,我还是建议伺服上电后做一次手动回零或者利用原点偏移校准。因为机械装配时,零点位置往往要配合传感器信号做一次实际的机械找零,而绝对值编码器的原点偏移只能把编码器零点定义为机械原点的相对参照。模板里伺服的原地回归模式不是走近点开关,而是直接根据编码器绝对位置加一个原点偏移量来设定原点。
两种回零逻辑如果硬写成一段,回零速度和动作时序都会冲突。我直接在轴功能块里用“原点模式”参数区分,步进轴走近点搜索流程,伺服轴走绝对位置偏移校准流程,互不干扰。
5.2 速度规划和末端精度的差异
步进电机的速度范围一般在低速下有优势,高速时力矩会迅速跌落,超过额定转速后丢步概率显著增加。模板里步进轴的速度参数默认上限设得比较保守,同时在加减速处理上用了较平缓的斜坡。如果你发现步进轴在高速定位时偶尔跑不到位,先别怀疑PLC丢脉冲,十有八九是速度上限超了电机能承受的范围。
伺服轴的响应带宽高,高速和高精度都能兼顾,电子齿轮比可以设得比较大。伺服定位在程序里有比较关键的一步:到位判断。总线伺服在位置指令完成后,需要读取伺服的实际位置反馈,和指令位置做差,然后判断是否在允许误差范围内。脉冲轴没有这个判断机制,指令发出去了就视为到位。所以我在模板里对伺服轴的定位完成条件做了双重校验——指令位置到达且跟随误差小于设定值。
5.3 报警形态不同,统一输出还是分开处理
步进驱动器的报警通常是IO信号,接线到PLC的输入点,故障类型一般只有过流、过热、失步这几种,信息量有限。伺服报警信息更丰富,从CANlink总线可以直接读出报警代码,比如过载、编码器异常、主回路欠压、过行程等。模板里我把步进报警和伺服报警分开收集:步进报警按IO输入点映射到轴功能块报警输入,伺服报警通过总线读取驱动器的报警码存储区,再根据报警码映射出中文说明文字。
触摸屏报警画面里,两种报警显示风格做了区别。步进报警显示在“步进报警”页签,伺服报警显示在“伺服报警”页签。技术员查看时能快速定位问题区域。如果不加区分全混在一个报警列表里,伺服光一个过载报警就会把真正的步进失步信息刷没,排查起来很费时间。
5.4 掉电保持和上电恢复策略不同
步进轴的位置断电后保留在PLC的掉电保持寄存器里,但它的实际机械位置已经丢了,因为电机没有位置反馈。因此设备上电时,步进轴必须无条件回零。伺服轴位置在驱动器端掉电保持,PLC端如果也做了保持,上电后可以直接根据当前实际位置恢复出机械坐标。这里最容易出现的坑是:你PLC里伺服位置保持了,机械被人手动推过,再上电时伺服位置显示的还是原来保存的位置,实际已经错了。我的办法是让PLC在上电后的第一条总线上,无条件读取三个伺服的绝对位置覆盖本地保持值,以实际位置为准。
5.5 动态轨迹同步的取舍
三个步进加三个伺服从严格意义上来讲,步进轴和伺服轴如果在同一时间配合完成一个动作,精度会受到步进轴的同步性能限制。因为步进轴是脉冲控制,H3U高速脉冲输出本身精度不差,但步进电机启动时的失步风险会导致动态偏差。我的模板里一般把需要严格同步的轴控制尽量安排在三个伺服之间,步进轴只做顺序动作,不做插补同步。这个设计取舍要在程序架构定下来的时候就想清楚,否则后期改成同步控制会非常被动。
6. 现场调试笔记:模板之外的活儿才是真正决定设备好不好用
6.1 CANlink伺服轴首次调试的完整链路
首次给三个伺服通电并接入CANlink总线时,我习惯按这个顺序走一遍,能避开很多低级问题:先断开全部伺服的总线连线,单台伺服上电,用面板手动设置站号并确认驱动器版本和PLC的CANlink协议版本能匹配;然后把三台伺服分别单独接到总线上,一台一台确认PLC可以读到各自的驱动器型号和报警状态;最后三台全部挂上,测总线数据循环周期和实际控制响应。
很多现场人员拿到设备就慌着去调伺服增益,其实第一步应该是把“通讯链路”走通。如果驱动器都连不上,调什么都白搭。我当时第一次调这套模板时,卡在伺服使能后不回位置上,排查到驱动器参数里的“位置指令来源”没有从面板模式改成CANlink总线模式,导致指令给了,驱动器却当成面板给的速度指令来响应,轴基本不动。
6.2 步进轴“偶尔丢步”的真实原因
三个步进轴的调试中,最常见的故障是“点位偶尔不准”。一开始我也以为是脉冲频率太高或者驱动器电流不够,后来查下来发现,干扰和接线问题的比例远远高于参数问题。步进脉冲线如果和动力线走同一个线槽,尤其是伺服电机的动力线,脉冲信号非常容易被干扰,导致驱动器收到错误的脉冲串。
我把三根步进脉冲线全部换成双绞屏蔽线,屏蔽层在PLC端单端接地,并且和伺服动力线分开走线,丢步现象明显减少。另一个点是步进驱动器的脉冲信号的电气规格,H3U晶体管输出高电平如果和驱动器要求的电平不匹配,需要串电阻或通过高速光耦隔离,不能直接拿PLC的输出脚硬接。这个我吃过亏,后来在模板的接线图里特意标了步进脉冲信号须经光耦隔离。
6.3 模板复用时最容易被忽略的修改点
这套模板做完第一台设备后,后面再换机型或者给别的设备用,最需要注意的是三件事:一是轴映射表里的站号和脉冲口分配,不同设备的伺服电机装配顺序可能不一样,不能直接沿用上一台的轴定义;二是每个轴的电子齿轮换算系数必须重新计算,丝杠导程、减速比、编码器线数都不一样;三是触摸屏配方表里的参数上下限,上一台设备允许的速度范围不一定适用于新机型,如果配方数据超过PLC侧的上限保护值,会出现参数写入不生效这种看似很莫名的问题。
模板本身能帮你省掉大部分重复造轮子的工作量,但现场机械参数还是得逐轴核对。我一般会做一张“六轴参数确认表”,设备首台装配完成后,由电气和机械一起核对签名,再导入模板发挥正常作用。
6.4 一些个人习惯上的补充
调试过程中我强烈建议把PLC内部轴状态机引到触摸屏监控页面上,调试的时候一边看机械动作,一边看状态机跳转,能很快定位是哪一步没满足条件导致上不去。还有一个习惯是把伺服的历史报警按次数做统计,放在维护页底部,这样设备使用一段时间后回访,能直接看出哪个轴报警最频繁,提前做预防性维护。
另外,模板做完之后一定要做一次断总线的试验。把三台伺服中的任意一台的总线线拔掉,观察PLC报警是否及时、页面是否报出对应轴号、伺服是否安全停止。这个试验不做,万一现场总线接触不良,设备可能以半故障状态运行,非常危险。
写到这,这套H3U加CANlink伺服加脉冲步进的模板思路基本算是讲透了。核心就一句话:程序模板不是把轴控制代码复制六份,而是把轴的共性抽出来做成功能块,把步进伺服的个性用参数隔离,把触摸屏的操作习惯和设备维护需求揉进页面逻辑里。不管后面换什么机型,甚至从三轴三伺服变成四轴四伺服,这套框架都不会过时,要改的只是轴映射表和配方参数。希望这份经验能帮到正在做类似设备的同行。