最近帮客户调一套博能传动伺服的多轴同步设备,机器是六轴轮转结构,原来用 PLC 发脉冲跑,跑到高速段从轴一直抖,位置误差肉眼可见。后来把控制链路整体改成 PROFINET 通信,用 105 报文把博能驱动器的 DSC 功能激活,同步性能完全是两个世界。这篇文章不写虚的,把我调试过程中反复验证过的东西一次说清楚:DSC 到底解决了什么问题、105 报文的通信结构长什么样、博能传动伺服要怎么配,以及我在现场用波形和参数一点点把多轴同步拉稳的全过程。适合正在做多轴设备集成、被伺服抖动和不同步折磨的电气工程师,尤其是刚从中低端脉冲方案往总线伺服方案迁移的人。
1. 多轴同步为什么难:抖和滞是从哪来的
1.1 先看三个控制环:位置环、速度环、电流环各管什么
伺服驱动系统不管哪个品牌,原理上都跑着三个闭环:电流环、速度环、位置环。电流环在驱动器内部,管电机绕组的力矩输出,响应最快;速度环在驱动器上一层,负责让电机实际转速贴着给定转速走;位置环通常放在驱动器或者 PLC 里面,负责把最终位置误差压小。
这套层级结构有点像工厂里的三层管理:位置环是厂长,每天布置“今天干到哪”,速度环是车间主任,盯着“现在每分钟干多少”,电流环是一线工人,直接出力。厂长管理不能越级,中间任何一级反应慢了,末端活就干不齐。
多轴同步设备真正关心的是位置环,而位置环的性能又被下面的速度环和电流环卡着。如果底层速度环带宽不够,位置环给一个速度指令,电机要慢半拍才跟上;如果电流环有饱和,大加减速的时候力矩不够,速度就会掉。所以我们调同步之前,先要把单轴的“地基”整明白,不然上层怎么调都是白费。
1.2 脉冲、模拟量、普通总线方案为什么天生不同步
很多老设备是 PLC 发脉冲控制伺服,比如三菱 FX3U 带 MR-JE 这种经典组合。用脉冲方案时,PLC 通过高速输出口发脉冲串,驱动器把脉冲数转换成电机转角。这套方案便宜、简单,但天然有同步瓶颈。
脉冲方案最大的问题是“相位差”。同一台 PLC 用两个高速输出口发脉冲给两个轴,两个口的硬件触发时刻不一定完全一致;而且脉冲频率越高,从站响应越快,但接收端的倍频处理和电子齿轮计算都各有各的延迟。多轴一联动,这个误差就叠加出来了。走模拟量控制更不用谈,电压指令抗干扰差,一个 0~10V 的信号在长线传输上稍微压降,转速给定就开始漂。
普通总线方案比脉冲好一点,比如 PROFIBUS DP、普通 PROFINET 的标准报文,能把速度设定值和实际值周期传上来,但位置环如果放在 PLC 里,PLC 读到的编码器位置已经经过了从站、总线、主站堆栈等多层传输,数据到达的一瞬间,电机已经在往前跑了。位置环拿到的永远是“过期的位置”,这就是滞后的来源。
1.3 抖和滞的本质:采样时刻不一致与总线延迟
我见过很多人遇到多轴抖动,第一反应是加伺服增益,结果越加越振,最后只能降刚性妥协。其实抖和滞是两码事:滞是延迟造成的跟随偏差,抖是共振或者采样不齐造成的周期波动。
在多轴系统里,两个轴如果不在同一个时间点采样位置,哪怕只是相差半毫秒,高速运动时位置差就可能被放大成明显误差。举个数值例子:轴以 3000 rpm 转,也就是每秒 50 转,假设电机每转 262144 个脉冲,那半毫秒就是 6553 个脉冲的偏差。这个数量级在贴装、印刷、飞剪这些高精度场合完全不可接受。
所以多轴同步的真正核心不是“谁的指令给得好”,而是“所有轴能不能在同一时刻看位置、在同一时刻收指令”。DSC 功能解决的恰恰就是这个,它要求整个网络必须跑在同一把时钟下面,把所有轴的采样点和输出点拉到同一个节拍上。
2. DSC 动态伺服控制到底是什么,105 报文好在哪
2.1 别搜错:此 DSC 不是延迟信号消除法
我在查资料的时候发现一个特别容易混淆的点:网上搜 DSC,会出来很多“DSC 延迟信号消除法”,那是信号处理领域的一套理论,跟咱们伺服总线里的 DSC 没有关系。在 PROFIdrive 和伺服驱动这个语境下,DSC 全称是 Dynamic Servo Control,动态伺服控制。
DSC 解决的核心问题就是前面说的延迟。它让驱动器按照总线同步时钟,在每个通信周期固定的锁存点采集编码器位置,然后在下一个周期开始,直接把这一份位置值塞进报文里交给 PLC。PLC 不需要再单独等待驱动器内部的处理时间,位置环拿到的反馈和实际电机位置之间的时间差被压到极限。
这套机制和“图像伺服”“视觉伺服”是两码事,但可以互补。视觉伺服解决的是“工件到底在哪”的问题,DSC 解决的是“指令下去了,轴有没有在同一时刻跟上”的问题。做视觉引导多轴贴装、飞拍定位这种设备时,底层走 DSC 报文,上层再挂视觉,效果才会理想。
2.2 105 报文的数据结构里到底有什么
105 报文是 PROFIdrive 里专门配合 DSC 使用的一种周期过程数据组合。它不是物理上的“一条报文”,而是每个通信周期固定交换的一组 I/O 数据。以我调试博能传动伺服时用的典型结构为例:
| 方向 | 信号 | 含义 | 说明 |
|---|---|---|---|
| PLC → 驱动器 | STW1 | 控制字 1 | 使能、急停、复位等控制位 |
| PLC → 驱动器 | NSOLL | 速度设定值 | 32 位,按驱动器定义的量纲发送 |
| 驱动器 → PLC | ZSW1 | 状态字 1 | 驱动器当前状态反馈 |
| 驱动器 → PLC | NIST | 速度实际值 | 32 位实际速度 |
| 驱动器 → PLC | G1_XIST1 | 位置实际值 | 编码器位置,DSC 的关键反馈通道 |
对比常见的 102 号普通速度报文,105 报文的区别非常明显:102 报文只传控制字、状态字和速度值,位置反馈要么不传,要么另外走非周期读取,PLC 每次拿位置都要额外等时间;105 报文把位置实际值 G1_XIST1 直接并进同一个周期,PLC 在一个通信周期里既能拿到位置反馈,又能给出速度设定值,省掉了整整一个来回的等待。
不同的驱动器和不同的 GSDML 版本在字节排布上可能会有差异,比如有的固件版本会在报文里多加几个状态扩展字,但核心思路不变。拿到设备第一步不是直接组态,而是先打开设备手册里的过程数据列表,对照看一下哪些字是控制字、哪些字是速度值、哪些字是位置值,心里有底再下手。
2.3 IRT 等时同步:多轴同步的地基
105 报文要想真正发挥 DSC 的威力,必须配合等时同步模式来跑。在西门子博途里叫 PROFINET IRT,等时实时通信,也叫同步域。
IRT 和普通实时通信的区别在于,它靠硬件来完成时间同步,普通交换机是不能用的,必须用支持 IRT 的交换机或者直接采用星形直连。所有从站共享同一把全局时钟,通信周期被切成固定的时间片,每个轴在同一时刻采样编码器、在同一时刻把速度设定值锁存到输出。
我打个比方:普通总线像是大家各自戴手表约时间,各人的表多少有点快慢,站在起跑线上出发时刻总有偏差;IRT 等时同步是直接把所有人拉到同一个钟下面,裁判一开枪,六轴同时起步。没有这层时钟同步,即使选了 105 报文,位置反馈通道也有,但采样点不在一个节拍上,同步精度照样拉不上来。
3. 博能传动伺服启用 DSC 和 105 报文的完整配置
3.1 硬件接线与通信接口定义要提前核对
之前调试过一类国产伺服,通讯口定义和松下 A4 那套非常接近,控制信号在 CN1、编码器在 CN2、通讯口在 CN3,博能传动驱动器上也差不多,都会在端子旁边印 X1、X2 之类的编号。但千万不要照着别的品牌端子定义想当然,接错一根 24V 或者脉冲指令线,轻则通讯不上,重则烧接口。
我把接线前的检查总结成几条:
- 电源端子确认主回路和控制回路分开供电,控制回路用 24V 开关电源,不要和接触器共用一个电源。
- PROFINET 口一般有两个 RJ45 端口,标注为 IN 和 OUT,用于菊花链连接,确认自己的链路方向。
- 屏蔽层要可靠接地,网线用带金属屏蔽层的工业成品线,现场变频器和大功率电机多的时候,屏蔽接地比换昂贵网线管用得多。
- 伺服驱动器的 PE 端子必须和电柜共用接地铜排,很多通信掉线问题其实就是接地电位差在作怪。
3.2 博途里添加 GSDML 并选择 105 报文
博能传动伺服接入西门子博途,第一步是把 GSDML 文件装进博途的硬件目录。这个文件在驱动器附带的光盘或官网支持页面能下载到,安装方式和其他厂商驱动器的 GSDML 一样:在博途菜单的“选项→管理 GSD 文件”里导入,之后在硬件目录的 PROFINET 节点下就能看到博能传动的设备。
组态步骤可以照这个顺序来:
- 从硬件目录拖出博能传动伺服驱动器,放到 PROFINET 网络上。
- 分配设备名称和 IP 地址,设备名称必须和驱动器面板/软件里设置的名称一致。
- 在设备视图中打开接口,选择传送区类型,下拉菜单里找 105 报文或者带有 DSC 字样的报文。
- 如果有多个轴,把每个轴分别挂到同一个 PROFINET 同步域下,并勾选等时同步模式。
- 为 CPU 创建等时同步中断 OB,比如 OB61,将通信周期设定为 1ms 或 2ms,根据轴数和 CPU 负载决定。
- 把过程数据映射到全局 DB 或者直接使用 I/O 地址,方便 OB61 里读写。
有一点要提醒:不是所有 CPU 都支持 IRT 等时同步,老款 1214C 这种 CPU 虽然可以走 PROFINET,但 IRT 能力很有限;想要多轴 DSC 跑得漂亮,建议直接上 1500 系列,并且留出足够的 CPU 余量。通信周期越短,CPU 在每个周期内要做完位置环运算的压力越大,一旦超时就无法保证等时。
3.3 驱动器参数设置:报文类型、编码器分辨率和速度单位
组态只是把“坑”挖好了,能不能跑起来,驱动器的参数也得跟着改。博能传动伺服驱动器的参数一般分两组:一组是通信参数,一组是控制参数。
通信参数里重点设三样:
- 设备名称:必须和博途里分配的名称一字不差。
- IP 地址:默认地址要和 PLC 在同一网段,如果驱动器支持自动获取,也可以在博途里统一分配。
- 报文类型:选 105,有的固件里叫“带 DSC 的速度控制”,别选成普通的 102 或标准报文 1。
控制参数里重点盯编码器分辨率。以汇川 MS1H4 为例,在驱动器里能看到默认编码器线数是 262144,这个数值代表电机每转一圈反馈 262144 个脉冲。很多人问这个数值能不能改,我的建议是:除非你换了第三方的电机或外接编码器,否则别去动它。这个数硬件决定,不是软件可以“提高”的精度;把它改小,位置反馈分辨率下降,改大了驱动器直接报编码器故障。
换到博能传动伺服,道理一样。用 105 报文跑时,位置实际值 G1_XIST1 的单位就是这些脉冲数,因此 PLC 位置环里一定要知道“一个脉冲对应多少机械距离”,换算错误会表现为位置偏差恒定,但不是抖动。
速度设定值 NSOLL 的量纲各家定义不同,常见的有两种:一种是 0x4000 对应 100% 额定转速,另一种是直接按 0.001 rpm/LSB 发。这必须在手册里查清楚,然后在 PLC 功能块里做一次比例换算,别把 100% 当成 16384 就完了,有的轴可能直接冲出去。
3.4 在 PLC 里跑一个位置环的示例写法
选 105 报文之后,位置环可以由 PLC 来做,驱动器只跑速度环和电流环。我在现场用的逻辑不复杂,就是每个等时中断里读一次实际位置,计算位置误差,乘位置环增益,再加上速度前馈,得到速度设定值,最后限幅发给驱动器。
伪代码大致是这个意思:
// 在等时中断 OB 中执行 // 单位约定:位置用脉冲,速度用内部速度单位 posAct := drvIn.G1_XIST1; // 读 105 报文里的位置实际值 posErr := posRef - posAct; // 位置误差 velFF := vRefFeedforward; // 速度前馈,来自上位运动规划 velSet := Kp * posErr + velFF; // 位置环输出 drvOut.NSOLL := LIMIT(velSet, -vMax, vMax); // 限幅后发速度设定值 // STW1 控制字使能位保持置位 drvOut.STW1 := 16#000E; // 按实际使能逻辑配置这里 Kp 的量纲不是随便拍出来的。如果位置单位是脉冲,速度单位是“脉冲/毫秒”,那 Kp 的单位就是 1/ms,数值大致是 0.1 到 5 这个范围,具体看机械刚性和负载转动惯量。前馈非常重要,纯靠 Kp 压误差会有滞后,前馈把规划速度提前叠加进去,跟随误差能下降一大截。
这个示例只是最简单的 P 加前馈,实际工程上还会加积分、加加速度前馈、加滤波。但核心思路是:DSC 把反馈通道做稳了,你在 PLC 里写的位置环才能真正反映现场机械状态。
4. 实战调试:波形、增益和同步误差的整定思路
4.1 先单轴整定:把速度环和电流环调稳再谈位置环
我习惯的顺序是:先不接总线,用驱动器自带面板或调试软件点动单轴。把电流环和速度环调稳,再切到总线模式做多轴同步。这个顺序不要跳,因为在总线上调如果波形乱,很难分清是通信问题还是单轴参数问题。
单轴调试时重点看速度环的增益和积分时间。速度环增益加大,电机对速度给定响应更快,但增益大到一定程度,系统会开始振荡,声音发闷、电流波形出现等幅振荡,这时必须退回来。积分时间的设置要兼顾消除稳态误差和低频振荡,积分太短,轴会出现低频喘动,听起来像在“呼吸”。
博能传动伺服调试软件里通常能看波形,和看伺服波形是一个思路:给定转速、实际转速、转矩电流三个通道放一起,做几次阶跃加减速,观察实际转速有没有超调,电流有没有瞬间顶到限幅。如果把电流环和速度环比作一个人的肌肉和神经,这一步就是把神经反应速度调到肌肉刚好能承受的程度。
4.2 用伺服波形看什么:给定跟随、跟随误差与电流
很多工程师调伺服只用驱动器面板看几个数字,我建议把示波器功能用起来,无论是博能传动调试软件自带的记录功能,还是 PLC 的 Trace 功能,都行。波形能告诉你数字参数表看不出的动态过程。
第一步看给定跟随:给一个梯形速度曲线,把速度设定值和实际速度叠在一起,看实际速度是否落后,加减速段有没有明显凹陷。实际速度在加速段总是低于给定,这是正常的,因为转矩建立需要时间;但凹陷太深说明速度环增益不够,或者电流已经到限幅。
第二步看位置跟随误差:如果是 PLC 做位置环,把位置误差曲线拉出来看。位置误差是一条平直线,说明系统处于稳定跟随状态,只是有固定滞后,靠前馈可以压掉。位置误差上下波动,说明轴在抖,需要回头查速度环滤波和机械共振。
第三步看电流波形:转矩电流如果夹着明显的周期性尖峰,多半是机械问题,比如丝杠螺距误差、联轴器偏心、导轨摩擦力不均。这些机械缺陷靠 DSC 消除不了,调增益反而会把周期性扰动放大,最后只能修机械或者加滤波。
4.3 双轴同步的调试顺序和参数经验
同步联动不是直接开满增益就行。我调博能传动双轴时是一步一步来的,顺序供参考:
- 先把两个轴都接入同一个同步域,确认两个轴反馈的时钟节拍一致,最简单的方法是在 PLC 里同时读两个轴的 G1_XIST1,连续采几十个周期看变化时刻是否对齐。
- 用电子齿轮或者上位运动规划给出同一个速度目标,先脱开负载空跑,看位置误差是否稳定。
- 逐步提高位置环 Kp,每次加 20% 左右,观察同步误差的振动幅度,一旦出现高频振铃就退回上一档。
- 加入速度前馈,看稳态同步误差有没有被压平。
- 带负载跑真实工艺曲线,观察加减速和匀速段的误差变化。
这套流程的核心是“破坏后再恢复”:每次增益变化,都要故意跑一段高速加减速,让问题暴露出来。如果在低速匀速状态下一切都好,不代表高速同步没问题,因为高速下延迟和机械共振的影响会被放大。
4.4 一张表总结增益、滤波、前馈的调整方向
现场调参最怕没有方向,乱试。我把常见的现象和调整方向整理成一个表:
| 现象 | 优先检查/调整方向 | 经验说明 |
|---|---|---|
| 末端抖动、高频振动 | 速度环增益降低,速度反馈滤波加大 | 先查机械共振点,必要时启用陷波器 |
| 低频喘动、周期起伏 | 速度环积分时间加大 | 积分作用太强会引起低频振荡 |
| 同步误差呈固定斜坡 | 加大速度前馈,检查采样时刻 | 通常是位置环滞后,不是增益问题 |
| 位置过冲、停车浪摆 | 减小位置环 Kp,适当增加阻尼 | 位置环增益太高,系统呈欠阻尼 |
| 负载突变后恢复慢 | 提高速度环增益,检查电流环限幅 | 负载惯量大时还需要做惯量辨识 |
| 单轴正常,双轴对不上 | 查同步域、总线周期、CPU 任务超时 | 不要调参数,先查时钟和程序扫描 |
参数表只是参考,每台机械的惯量、刚度、阻尼都不一样。我始终强调:带载调试时,参数记录要做版本管理。改一组参数拍一张波形,否则最后轴调稳了都不知道自己改了什么。
5. 常见问题与排查技巧实录
5.1 105 报文激活后电机不使能怎么办
这是我把普通报文换成 105 之后最常遇到的第一个问题,现象是博途里看状态字一直是“未就绪”,控制字发了,驱动器却没有吸合抱闸。
排查思路要按顺序来:
- 检查控制字 STW1 的使能位是否同时置位。PROFIdrive 使能不是某一个位能搞定的,通常要 STW1 的 0、1、2 位配合,还要满足驱动器的内部使能逻辑。用博途在线监控,看驱动器的 ZSW1 停留在哪一位,就能倒推卡在哪一步。
- 检查驱动器面板有没有报警,比如编码器故障、通讯超时。如果驱动器已经报“通讯中断”,先查网线和设备名配置。
- 检查急停回路和抱闸控制。105 报文控制字只是给出了运行许可,外部 24V 急停回路没有接通,驱动器同样不会使能。
有一个细节要提:换成 DSC 报文之后,我遇到过控制字已经全部置位,但驱动器使能仍然闪断,最后发现是通信周期和驱动的监控时间不匹配。驱动器默认的通讯超时周期太短,PLC 扫描稍微一卡,驱动器认为总线断了,自动撤使能。这种情况把驱动器的通讯监控时间适当调长就解决。
5.2 速度设定值换算不对:单位与编码器分辨率
用 105 报文之后,速度给定不再是从前脉冲方案的“每转脉冲数”,而是直接发数值。很多从三菱 MR-JE 转过来的工程师会在这卡住,原因是以前用 FX3U 发脉冲时,需要通过 PA05 设置每转脉冲数,PA21 设置指令脉冲形式;现在换成速度值,PA05 的概念已经不参与速度链了。
速度设定值发出去之后如果发现轴转得离谱,先怀疑量纲换算。比如你以“0x4000 = 100% 额定转速”为约定,但写成了 0x0400,转速就只剩 1/16,动起来特别肉。查手册里的 NSOLL 缩放表,确认是满量程对应关系还是带符号的固定比例。
另一个容易错的是位置单位换算。105 报文里的 G1_XIST1 来自编码器分辨率,如果驱动器里默认 262144,而电机的实际编码器是 17 位 131072,位置环算出来的距离就会翻倍。改编码器参数前要确认电机铭牌,不要乱动默认值。
5.3 多轴还是不同步:查时钟而不是查增益
如果参数已经调得很保守,位置前馈也加了,双轴同步误差还是让人不满意,十有八九是时钟问题。
我实测最典型的情况是:两个轴都挂了 105 报文,但其中一个轴的报文周期和另一个不是同一个同步域,或者 CPU 的等时中断 OB 被其他更高优先级的任务抢占,导致本该每 1ms 执行一次的位置环偶尔变成 2ms 执行一次。这种偶发的“打嗝”用示波器看误差曲线时,会表现为周期性毛刺。
解决办法是回到博途里重新检查同步域,确认所有从站都挂在同一个 IRT 域下,并监控等时中断 OB 的运行时间。如果 OB 运行时间超过通信周期的百分之七八十,就需要优化程序,把不必要的数据处理挪到普通循环中断里,给位置环留出足够余量。
还有一种容易被忽略:两个轴之间如果走的是普通交换机而非 IRT 交换机,硬件层面上就破坏了时钟同步。PROFINET IRT 必须用支持硬件同步的交换机,普通交换机转发会造成纳秒级到微秒级的不确定性,多轴同步精度直接崩。
5.4 通信掉线和干扰:接口定义与接地
最后聊一个老生常谈但是最常见的问题:通信掉线。现象是运行一段时间后 PLC 报从站故障,驱动器报通讯超时,有时候重新上电又好了。
这种问题大概率不是配置问题,是现场干扰或者接地问题。检查接口定义时注意两端跳线是否规范,参考一些通用伺服驱动的通讯接口定义,IN 和 OUT 不要接反;网线屏蔽层要两端接地,但设备本身如果存在地电位差,反而要单端接地。
我处理过一个现场:龙门架双驱,驱动器和变频器共用进线,一加速就掉线。后来加装隔离变压器给驱动器控制回路单独供电,网线换屏蔽工业线,接地铜排重新打磨紧固,问题就消失了。伺服调试到最后,很多瓶颈不是算法也不是参数,而是物理层的抗干扰能力。
还有一点,博能传动和汇川、三菱、安川这些品牌的调试软件风格虽然不同,但做对比排查时思路是通用的。比如汇川伺服 MS1H4 的编码器参数、安川驱动器里速度环增益的参数号,看起来各不相通,实际都围绕“位置环、速度环、电流环、通讯周期”这几个维度。会用一种,换品牌只是重新查参数号的问题。
调试那台设备到最后,我把六轴通信周期压在 1ms,同步误差稳定控制在个位数脉冲以内,客户在触摸屏上看着跟随曲线从原来的“波浪线”变成“直线”,也觉得不可思议。我自己的体会是:DSC 和 105 报文把 PLC 和驱动器之间的交流延迟压缩到了极致,这是系统能同步的基础;但机械间隙、联轴器弹性、供电波动这些物理问题,报文解决不了。所以调试顺序永远是先修机械,再稳时钟,最后才放心加增益。否则每一步调参都像是在地基没打牢的楼上装修,表面再漂亮也撑不住。