偏心轮飞剪配上Codesys控制的组合,在连续产线的定尺剪切工位里其实非常常见。这个结构看着不复杂,真正要把剪切点掐准、让剪刃和高速运动中的材料不打架,程序里要处理的事比想象中多得多。这篇文章围绕偏心轮加滑块机构的飞剪展开,把Codesys里的运动控制核心逻辑、凸轮表设计、状态机流程和现场调试技巧完整拆开讲一遍。适合正在做定尺剪切、飞剪、追剪项目的电气工程师、运动控制工程师,也适合刚接触电子凸轮、想找一个真实案例入手的读者。
1. 偏心轮飞剪的机械原理,先搞清楚刀是怎么动的
1.1 偏心轮加滑块:把一圈旋转变成一个往返
偏心轮飞剪的核心结构是一个偏心轮和一个滑块。偏心轮的旋转中心与几何中心并不重合,两者之间的偏移量叫偏心距,通常用字母e表示。偏心轮旋转时,套在轮上的连杆或直接贴在轮侧的滑块会被带着做往复直线运动。换句话讲,偏心轮本质上就是一个短曲柄,它把电机输入的连续旋转运动转化成剪刃的上下直线运动。
很多第一次接触这个机构的人会问:为什么不直接用曲柄连杆,非要搞一个偏心轮?原因是飞剪现场往往空间紧张,偏心轮的径向尺寸可以做得很紧凑,而且偏心距可以通过更换偏心套或调整偏心位置来改变,这比修改曲柄长度方便很多。另外偏心轮结构承载能力强,适合剪切力大的钢板、线材、管材类产线。刀架装在滑块上,每转一圈,刀架就完成一次从上极限到下极限再回上极限的完整往返,也就是一个剪切周期。
从运动学角度看,当连杆长度足够长时,滑块位移x与偏心轮转角θ之间有一个近似关系:
x ≈ e × (1 - cosθ)
这个式子看着简单,但它说明了两个重要事实:一是偏心轮每转一圈,滑块走一个完整行程,行程范围大约是2e;二是滑块运动不是匀速的,在θ=90°和θ=270°附近速度最快,在θ=0°和θ=180°附近速度最低。飞剪程序里所有关于剪切点、同步速度的判断,最终都绕不开这几个角度位置。
1.2 剪切相位:同步区和回程区是两个完全不同的工况
飞剪和普通剪板机最大的区别在于,飞剪剪切时材料一直在往前走。如果剪刃只做垂直上下运动,那材料在剪切瞬间会被刀面挡住,轻则顶弯材料,重则直接撞坏刀座。所以飞剪一定要保证剪刃切入材料时,在材料运动方向上的分速度与材料线速度基本一致,等剪切完成后再快速退回,让开材料。
这样一来,偏心轮的一个旋转周期就被分成了两个逻辑区域:
- 同步剪切区:通常对应偏心轮转角的中段,比如θ在60°到120°之间。在这个区域内,剪刃随滑块运动,其水平分速度要尽可能接近材料速度,保证从剪刃接触材料到完全剪断的整个过程不产生相对滑动。
- 快速回程区:剪切结束后,剪刃要迅速脱离材料并回到初始位置,准备下一个剪切周期。这个阶段追求的是快,同时还要尽量平稳,避免回程抖动扫到材料表面。
如果只用普通电机带着偏心轮恒速转,这两个区域的速度分配是固定的,很难兼顾"同步区速度精确匹配"和"回程区快速不刮料"两个要求。这就是需要用Codesys这类运动控制系统做电子凸轮的根本原因。
1.3 用一组数字先感受一下速度关系
设材料线速度v=60m/min,换算下来是1000mm/s。偏心距e取50mm,那么在剪刃水平速度最大的位置,也就是θ=90°附近,剪刃水平速度可以近似写成:
v刃 ≈ e × ω
要让v刃等于材料速度1000mm/s,瞬时角速度ω就等于1000 ÷ 50 = 20rad/s,换算成转速大约是191rpm。
这个数字说明两个问题。第一,偏心轮的瞬时转速并不需要特别高,191rpm对大多数普通电机来说都轻松。第二,真正关键的是这个瞬时转速在剪切瞬间必须和材料速度严格对应,差一点就会造成剪切毛边、拉料或者剪不断。程序里做凸轮表时,主轴位置映射到从轴位置,本质上就是为了让剪刃在每一个角度位置上的速度都符合这条运动学曲线。
2. 为什么偏心轮飞剪要用Codesys做电子凸轮控制
2.1 连续剪切场景下,普通启停控制完全不可行
有朋友可能会问:材料每走一个定尺长度就停一下,剪完再启动,这样控制不就简单了吗?在一些低速、低节拍的产线上确实有人这么干,但代价是产线效率大幅下降。材料从启动到匀速需要加速时间,停止又要减速时间,每次启停都会在材料上留下拉伸或堆积的痕迹。
偏心轮飞剪存在的意义就是让材料始终匀速通过,剪刃在运动中完成剪切。这就要求控制系统必须在材料前进的动态过程中,实时计算剪切触发点,并且让剪刃在极短的时间内完成"加速到同步速度、同步剪切、快速退回"这一整套动作。普通继电器逻辑或者简单的定时器控制根本做不到这种精度,必须依靠运动控制器的电子凸轮或者电子齿轮功能。
2.2 电子凸轮与电子齿轮的取舍,为什么最终选凸轮
Codesys环境里实现主从轴同步关系,最常用的是电子齿轮指令和电子凸轮指令。电子齿轮适合主从轴转速保持固定比例的场景,比如一个轴转两圈另一个轴转一圈。偏心轮飞剪看起来也是主轴转一圈、从轴走一个往复,似乎用电子齿轮也行?
但实际细想就会发现不对。电子齿轮只保证速度比例关系,无法精细控制两个轴在特定角度范围内的位置关系。飞剪要求在剪切区剪刃位置与主材料位置严格对应,在回程区又希望剪刃不跟随材料、快速返回。这种"一段跟随、一段不跟随"的变比例关系,电子齿轮是做不到的。电子凸轮则可以把主轴角度和从轴位置写成一张一一对应的映射表,从轴在每个角度该在哪里、该以什么速度运动,全部由凸轮曲线决定。所以偏心轮飞剪这类设备,用电子凸轮是更合适的方案。
2.3 主轴怎么选:真实编码器主轴和虚拟主轴
CamIn指令需要指定一个主轴。偏心轮飞剪项目里,主轴的选择有两条路:
一是用测长轮上的增量编码器作为主轴。测长轮贴着材料滚动,材料走多少,编码器脉冲就转多少,主轴位置直接反映实际材料长度。这种方式的优点是实时性好,材料速度波动时也能自动跟随,定尺精度不容易受加减速影响。
二是用虚拟主轴。程序里按工艺设定速度生成一个虚拟位置信号,主轴每走一定距离,代表材料前进一定长度。这种方式在材料速度比较恒定、产线启停不频繁的场景下非常好用,因为它不会受编码器打滑、干扰、轮径磨损这些因素干扰,程序跑起来非常干净。
在实际项目中,我个人更倾向于优先用真实测长编码器做主轴的方案,因为产线材料速度很难做到绝对的稳定,尤其是前后有牵引辊波动的时候。虚拟主轴适合仿真测试和后期做优化对比,真正投产后以编码器主轴为准比较稳妥。
3. 偏心轮飞剪Codesys核心程序模块拆解
3.1 轴使能与回零,角度基准是命根子
偏心轮飞剪的剪切点依赖偏心轮的绝对角度位置。断电重启后,如果程序不知道偏心轮在哪个角度,那第一刀就会剪偏。所以轴回零是整个程序的第一步,也是最不能省的一步。
使用Codesys运动控制库时,轴使能和回零代码大致如下:
// 轴A作为刀架轴,使能并回零 MC_Power_0.Axis := Axis_Cutter; MC_Power_0.Enable := TRUE; MC_Power_0(); MC_Home_0.Axis := Axis_Cutter; MC_Home_0.Execute := bDoHome; MC_Home_0.Position := 0.0; // 回零后把该位置定义为0度 MC_Home_0();回零方式建议采用"原点开关+编码器Z相"组合。偏心轮轴上装一个接近开关,把它调整到曲柄的机械零点位置,每次回零先找开关,再停在Z相脉冲上。这样即使更换电机或者机械重新装配,角度零点也不会漂移。
有一点经常被忽略:回零完成前,程序必须禁止一切自动剪切动作。很多现场事故就是工人忘记回零、手动点点动了一下,然后自动启动直接冲刀。所以状态机初始化条件里必须加上"轴已回零"这一项。
3.2 凸轮表设计:角度到位置的映射要平滑
偏心轮飞剪的电子凸轮表,输入是主轴位置,输出是刀架轴位置。若以角度为横坐标,滑块位移为纵坐标,一个完整周期就是0到360度,对应的刀架位置从0到最大行程再回到0。
凸轮表的生成有两种方式:
第一种是直接按运动学公式计算。把偏心轮角位移代入x ≈ e(1-cosθ)公式,生成一组角度-位置点。这种方式的优点是物理意义清楚,适合理解和初步调试。
第二种是在Codesys凸轮表编辑器里手工调整关键点,然后用样条插值或B样条拟合让曲线更平滑。生产线实际投运时,由于存在机械间隙、刀架安装高度偏差、材料厚度变化,纯理论凸轮表往往需要微调剪切区那一段的斜率。
下面是一段用ST语言生成凸轮表数组的参考逻辑:
FOR i := 0 TO CAMPOINTS - 1 DO dTheta := INT_TO_LREAL(i) * 360.0 / INT_TO_LREAL(CAMPOINTS); CamProfile[i].Master := dTheta; dPos := e * (1.0 - COS(dTheta * PI / 180.0)); CamProfile[i].Slave := dPos; END_FOR凸轮表设计有三条血的教训:
- 起始点和结束点速度必须连续,否则每次进入凸轮都会有一个位置跳变,机械上表现为"咯噔"一下。
- 剪切区曲线不能太陡,因为太陡意味着加速度大,刀架冲击力大,直接影响刀刃寿命和剪切断面质量。
- 回程段要预留足够的机械间隙,避免剪刃退回时刮到已经剪断的材料断面。
3.3 剪切状态机:等待、同步、剪切、返回
飞剪程序不能只是一个凸轮表挂在那里永远循环,因为剪切动作是由定尺信号触发的。每次材料走到设定长度,程序才把刀架轴切入凸轮,完成一次剪切后再切出。所以状态机是必须的。
一个典型状态机如下:
CASE stateCut OF IDLE: IF bCutTrigger THEN bCutTrigger := FALSE; stateCut := SYNC; END_IF SYNC: MC_CamIn_0.Execute := TRUE; MC_CamIn_0.Axis := Axis_Cutter; MC_CamIn_0.Master := Axis_Material; // 测长主轴 MC_CamIn_0.CamTable := CamProfile; MC_CamIn_0(); IF MC_CamIn_0.InSync THEN stateCut := CUTTING; END_IF CUTTING: // 凸轮进入同步区,剪刃正在接触材料 IF bCutFinished OR MC_CamIn_0.EndOfProfile THEN MC_CamOut_0.Execute := TRUE; stateCut := RETURN; END_IF RETURN: MC_CamOut_0.Axis := Axis_Cutter; MC_CamOut_0(); IF MC_CamOut_0.Done THEN MC_CamOut_0.Execute := FALSE; stateCut := IDLE; END_IF END_CASE这套状态机里最关键的是同步与剪切之间的切换时机。如果进入凸轮的时机太早,刀架会在空中空跑一段,浪费时间;太晚,材料已经超过剪切点了,剪刃追不上。所以实际项目中,触发CamIn的"提前量"要根据凸轮表周期和当前材料速度动态修正。
3.4 定尺长度计算与剪切触发
定尺长度控制是飞剪控制里最容易出现“剪出来的每一段不一样长”问题的环节。原理其实很简单:用一个累计长度变量ContinuousLength,不断累加测长轮反馈的位置增量。每次累计量达到一个定尺长度L,就发出一次剪切触发,并把累计量归零。
参考代码如下:
dDeltaLen := (dPosNow - dPosOld) * dScale; // 编码器增量换算成mm dPosOld := dPosNow; dContinuousLength := dContinuousLength + dDeltaLen; IF dContinuousLength >= dSetLength THEN bCutTrigger := TRUE; dContinuousLength := dContinuousLength - dSetLength; END_IF注意这个减法处理,它比直接清零更合理。如果材料速度波动导致本次超差一点点,余量会留到下一段去补偿,不会出现“一段长一段短”的锯齿现象。
还有一个工程细节:如果材料有接头、焊缝或者套色标记需要避开剪切点,那单纯的定尺触发就不够了。此时需要加一个外部标记信号,用高速锁存输入把它对应的位置记录下来,剪切触发条件改成"位置到达标记点再加上设定长度"。
4. 现场调试与参数整定
4.1 机械参数到程序参数的映射
我见过不少调试组到了现场,张口就问"电机转速设多少",其实这个问题的答案要从机械图纸里找。偏心轮飞剪的程序参数设置,第一步是把机械参数整理成一张表。
| 参数 | 符号 | 典型取值 | 程序里的作用 |
|---|---|---|---|
| 偏心距 | e | 50mm | 计算凸轮表行程和速度 |
| 连杆长度 | l | 300mm | 修正运动学模型(有限长连杆时) |
| 偏心轮减速比 | i | 1.5:1 | 电机转速换算到偏心轮转速 |
| 测长轮直径 | D | 100mm | 编码器脉冲当量换算mm |
| 编码器线数 | p | 1000线/转 | 位置反馈增量计算 |
| 材料线速度 | v | 60m/min | 计算同步速度和CamIn提前量 |
| 设定定尺长度 | L | 500mm | 触发位置计算 |
这些参数中,测长轮直径D和编码器线数p共同决定了脉冲当量。比如编码器1000线,驱动器4倍频之后每转4000脉冲,测长轮周长314mm,那每个脉冲对应的材料长度就是314÷4000=0.0785mm。如果这个值算错,定尺长度会成比例地偏大或偏小,而且不管你怎么调凸轮表都调不好。
4.2 凸轮曲线平滑性调整实操
凸轮表建好以后,先在Codesys的视图中打开速度曲线和加速度曲线,目测有没有突变点。正常的凸轮曲线速度过渡应该是连续的,加速度不能出现尖峰。
调整时优先动中间的关键点,不要试图用微调每一个点来凑曲线。通常套路是:先保证剪切区中点的斜率正确,即剪刃水平速度与材料速度相等;再调整回到起始点的回程段曲线,让它均匀地收回来;最后整体做一次样条平滑处理。有些老工程师会把剪切区前后的两个点手动压低一点,故意留出一点点速度差,让剪刃切入材料时有一个轻微的"冲切感",而不是严格同步切入。这样做的好处是减少刀口的挤压变形,坏处是控制不好时容易产生毛刺,需要根据实际剪切断面来权衡。
4.3 按这个顺序做模拟调试,能少走一半弯路
偏心轮飞剪的调试不能一上来就让它高速剪切。我在现场的习惯是先做离线模拟,再低速空跑,最后才带料剪切。
离线模拟阶段:关闭真实轴,把主轴和刀架轴都设为虚拟轴,用强制变量模拟测长编码器脉冲,让状态机完整跑几圈,观察定尺触发、CamIn到InSync的时序、CamOut完成情况。这一步能抓出大部分逻辑漏洞。
低速空跑阶段:把材料速度降到额定速度的10%以下,让刀架空剪切几次,用示波器功能抓一下凸轮的主从位置曲线,确认没有位置跳变。此时还不要放材料,避免刀撞坏。
空跑无误后再恢复生产速度,先剪几段废料,测量每段长度差,用统计数据判断该调触发补偿量还是凸轮曲线。
5. 常见问题与排查技巧实录
5.1 定尺长度忽长忽短
这是飞剪项目里最常见的投诉。排查思路先看两个地方:测长轮是否打滑、编码器脉冲数是否稳定。测长轮打滑往往是因为压紧力不够或者轮面磨损,位置反馈少了,剪出来的材料就偏长。排除机械问题后,再看程序里的脉冲当量是否准确,尤其是换了测长轮直径后有没有同步更新参数。
如果以上都正常,那就要检查凸轮表的剪切区是否稳定,以及每次CamIn的起始点是否一致。起始点不一致会导致每次剪切的位置基准漂移,长度自然不稳定。
5.2 剪切瞬间出现顶料或憋刀
现象是剪切时材料被刀座顶着变形,有时会听到明显的撞击声。原因通常是剪刃水平速度低于材料速度,导致剪刃挡住材料。优先检查凸轮表在剪切区中点的速度是否等于材料线速度。这里要注意单位换算,凸轮表里的速度是"从轴位置变化量/主轴位置变化量",要乘上主轴的实际速度才是真正的剪刃速度。
排除理论曲线问题后,再看同步区覆盖的角度范围是否够长。如果剪切过程需要10ms,材料以1000mm/s速度走,那同步区的水平行程至少要有10mm,否则剪刃还在加速阶段就已经碰到材料了。
5.3 每次进入凸轮瞬间轴报跟随误差过大
这个报错十有八九是凸轮表起始点速度不连续,或者CamIn触发的时机不对。起始点速度不连续时,控制系统必须瞬间给电机一个很大的加速度去追上凸轮曲线,自然就超差报警。
另一个容易被忽视的原因是主轴和刀架轴的单位不一致。主轴是材料长度单位mm,刀架轴也是mm,但凸轮表横坐标却被填成了角度,两者映射关系错位,跟随时就会差出一个固定偏移量。
5.4 回程阶段抖动,材料表面被划伤
回程抖动多数是凸轮表回程段加速度过大引起的。偏心轮机构本身有往复惯性力,回程曲线如果太快,刀架在上极限附近会产生机械振动。处理方法是把回程段的凸轮曲线改成对称的S型曲线,让速度先增后减,而不是一直加速到终点再突然反向。
还有一个机械层面的原因容易被程序工程师忽略:滑块导轨间隙过大或者润滑不良,回程时滑块受惯性力影响产生横向摆动。这个在程序上再怎么调都治标不治本,得让机械配合重新调整间隙。
5.5 现场调试的几点习惯
最后聊一聊调试这类设备时我自己一直坚持的几个习惯。
调任何参数之前,先把凸轮表、状态机、定尺计算的当前值全部截图存档。飞剪问题往往是多因素耦合,改了参数后现场变好,但不知道是哪个改动起了作用,这种情况我遇到过太多次。有了存档,至少可以快速回退。
调试时不要只盯着剪切点那一段波形,把整个凸轮周期的速度、加速度曲线都看一遍。很多时候剪切点附近看起来完美,但问题恰恰藏在回程段的某一个拐点上。
带料剪切时,第一次试切的速度不要超过设计速度的30%。先确认剪切断面是否整齐,再逐步提速。提速过程中重点观察定尺长度的离散度,如果离散度随速度增加而变大,说明系统动态性能已经到极限了,优先优化凸轮曲线和伺服增益,而不是继续加速度。
偏心轮飞剪的Codesys程序,说难并不难,核心就是搞清机械运动关系、做好一张平滑的凸轮表、再加一个严丝合缝的状态机。真正决定设备能不能稳定跑的,往往是对同步区速度匹配的理解和对这些细节的耐心程度。