☰
三菱PLC六轴伺服非标程序架构与现场调试经验
2026/10/20 6:47:32 网站建设 项目流程

干这行十几年,我最怕看两种程序:一种是刚入行写得花里胡哨的“演示品”,各种指令堆上去,看起来高级,上机就露馅;另一种就是标题里这种——“非标三菱PLC伺服六轴程序,已在实际设备上批量应用,六轴伺服,成熟可靠”。这种程序我拿到手,通常先点根烟,慢慢翻,因为它里面的每一个子程序、每一段注释,都是从现场的一次次报警、一次次撞机、一次次客户催货里熬出来的。

这次分享的案例源自一套已在多台设备上批量跑通的六轴伺服控制系统,主机为三菱Q系列PLC,六个轴全部采用三菱MR-J4系列伺服驱动,整体控制精度和响应速度都经过了长时间运转验证。我不打算把整本程序代码贴出来,那既没必要也不合规,我更想把整个程序的“骨架架构”、每个关键模块的“为什么这样写”、以及现场调试时的“坑和捷径”拆开讲清楚。这篇文章适合正在做非标设备电气控制、想借鉴成熟六轴伺服框架、或准备从单轴/两轴往多轴联调方向走的工程师,看完之后你至少能知道自己改程序时该动哪里、不该动哪里。

1. 这套六轴伺服系统的整体构成与选型思路

1.1 六轴设备到底在干什么

先说这台设备干的活,方便后面对号入座。它本质上是一台多工位物料搬运与定位装配设备,六个伺服轴的分工大概是这样:

  • 轴1(X轴):负责物料在多个工位之间的水平搬运,行程最长,负载最大,用的是大惯量电机。
  • 轴2(Y轴):负责升降动作,垂直方向,带配重气缸,伺服主要管精确位置和加减速。
  • 轴3(Z轴):负责夹爪开合和进出料动作,小惯量、高响应。
  • 轴4(旋转轴):负责工件方向翻转或角度定位,带减速机。
  • 轴5(辅助升降轴):配合轴2做二级定位,或者两个工位之间的高度差补偿。
  • 轴6(送料/推料轴):负责把物料从料仓推送到工作位,动作简单但节拍快。

这样的结构在3C装配、小家电生产线、汽车零部件分拣上很常见。它最大的特点不是单个轴有多难,而是六个轴之间动作交错、节拍紧密,任何一个轴晚到或者早退,轻则撞工件,重则撞机架。所以程序的第一个核心不是“怎么让一个轴动得精准”,而是“怎么让六个轴配合得像一个人的手脚”。

1.2 为什么偏偏是三菱PLC加伺服

选三菱这套组合,与其说是情怀,不如说是非标行当的“最大公约数”。我在很多项目里也用过其他主流品牌的PLC加总线伺服,各有各的好,但在六轴这种规模里,三菱的Q系列加MR-J4确实有几个难以替代的点:

  • 整套生态无需额外转换:PLC自带定位指令集(ABS/DDRVI/DDRVA等),伺服驱动器侧通过SSCNET III或高速脉冲接口对接,不需要额外买运动控制卡,也不用中间加第三方的协议转换模块,省掉了至少两成的通信故障源。
  • 内置定位表与当前值管理的成熟机制:三菱Q系列PLC内部有专用的定位缓冲存储区,每个轴都有一片独立的控制数据区,程序只需要往里面写目标速度、目标位置、加减速时间,后面的脉冲发送、到位信号处理、当前值更新全部由系统固件完成,比用高速计数器自己拼一个定位功能要稳定得多。
  • 故障信息丰富到“白痴级”:驱动器报警代码、编码器异常、过载、欠压、位置偏差过大,全部有明确编号。在批量设备维护上,每一条故障都能直接对应到设备手册的操作指引,现场电工不用对着示波器猜问题。

从我个人的角度看,选这套平台还有一个隐性好处:市场上懂三菱伺服调试的工程师存量太大,设备交付到客户厂里,随便一个驻厂电工都能看懂报警信息,备件供应也方便。非标设备讲究的是“能用、好修、不挑人”,这从需求源头上就决定了方案走向。

2. 程序设计前的核心准备工作:轴参数与运动学换算

2.1 六个轴的脉冲当量与电子齿轮比怎么定

拿到机构图纸之后第一步不是写程序,而是给每个轴算“电子齿轮比”和“脉冲当量”。这一步错了,后面程序写得再漂亮也是空中楼阁。

三菱MR-J4伺服驱动器的电子齿轮比由参数PA06(分子)和PA07(分母)设定,它解决的问题是:PLC发一个脉冲,电机到底转多少角度。这里我需要解释一个核心概念——指令脉冲分辨率。常规做法是让每个脉冲对应0.01mm或0.001mm的机械移动量,这样后面写定位坐标时,直接用人能读懂的毫米单位去算脉冲数。

假设轴1(X轴)丝杠导程为10mm,减速机速比为1:1,伺服电机编码器分辨率为131072脉冲/转(17位)。你希望脉冲当量为0.01mm,那么电机转一圈需要走10mm,对应需要1000个机械毫米脉冲当量,即电机转一圈PLC需要发送的指令脉冲数 = 10 / 0.01 = 1000个。但编码器反馈是131072个脉冲/圈,驱动器必须把1000个指令脉冲对应到131072个反馈脉冲,所以电子齿轮比分子/分母 = 131072 / 1000,化简后P A06=16384,PA07=125。

这个计算一定要自己动手做一遍,不要照抄别的设备参数。我见过不止一次,程序里看到电子齿轮比是1:1,但机构其实带了3:1减速机,结果定位距离整整差了3倍,现场百思不得其解,最后量了一晚上机械行程才发现问题。

2.2 虚拟轴与软限位的关键作用

六轴系统里有一个绝大多数新手会忽视的设计:软限位。机械硬限位是最后一道保命防线,但程序里的软限位才是日常防护的主力。

三菱QD75或Q系列的定位模块里,每个轴都有“软件行程范围”设定,在参数里直接写入正负两个极限坐标值。程序运行过程中,PLC每条定位指令在执行前都会自动对比目标位置与软限位,如果超限直接报错且不启动动作。这个功能必须用起来,而且要将轴当前值初始化做好——也就是回原点之后设定机械坐标原点,才谈得上软限位有效。

还有一点容易被忽视:当前值的类型选择。三菱伺服有两种当前位置模式,一种是“机械位置”(断电保持),一种是“绝对位置检测”(通过电池保持编码器多圈数据)。批量应用的设备如果每天要重新开机回原点,既浪费时间又影响效率,所以很多成熟程序都会开启绝对位置检测模式。这样断电再上电,PLC读到的坐标和实际机械位置仍然是对应的,不用回原点就能直接工作。不过这个模式要求电池有电、编码器无报警,而且首次调试必须建立基准点,不是装上就是万无一失。我自己的习惯是:开机时做一次“开机原点校验”,让每个轴低速朝原点方向找一次原点开关,确认坐标与机械位置一致才允许进入自动状态。这一步牺牲了一点启动时间,但大大降低了“位置漂移導致定位撞模”的风险。

2.3 HMI坐标显示时的单位换算策略

六轴设备的触摸屏上要给操作员显示每个轴的“当前位置”,这个数值不能直接拿PLC里的脉冲数去显示,因为操作员看的是毫米或者度,不是电子齿轮比下的抽象数值。

我在这个项目里采用的做法是:PLC内部所有运算统一用脉冲单位,只有到HMI显示时才除以每毫米对应的脉冲系数。换算系数存在一个32位寄存器里,画面程序从该寄存器读取。这样修改机械传动比时,只需要在PLC参数区改一个数,HMI不用动。千万不要在HMI脚本里转换,否则维护工程师改了机械配件之后,还得满屏找那个藏在深处的换算脚本,极易出错。

3. 程序主体架构与关键模块实战拆解

3.1 程序分块与任务调度:从一个“大循环”说起

很多单轴设备程序就是一个大循环,读取开关状态,满足条件则执行定位,不满足则等待。六轴设备如果也这么干,伺服轴的等待时间会直接拖垮节拍,所以这套成熟程序的架构跟它完全不同。

整套程序被切成了三个级别:

  • 第一级:初始化与诊断程序。上电时执行一次,完成轴参数初始化、报警复位、原点校验、夹具状态检查。
  • 第二级:工艺动作序列程序。采用“状态机步进”方式,将整个设备动作拆成几十个工步,每个工步只负责一件实事:要么“轴1从A点移到B点”,要么“等待轴2到位信号”,要么“打开夹爪”,每个工步执行完即跳转到下一步。
  • 第三级:实时监控与互锁程序。这部分由定时中断或PLC扫描中段执行,每个扫描周期都会检查急停、安全门、各轴报警、气压不足、超时未到位等异常条件,一旦发现立即触发全局暂停。

这套结构优秀的地方在于:工艺动作层的执行和监控层的安全检查是并行关系,即使程序卡在某一个工步等待信号,监控层依然在时刻盯防。如果把所有检查和工艺动作写在一起,很容易出现“某个轴在等待过程中,另一个轴悄悄走到危险位置”的情况。

工步状态机具体落到程序上,一般用一组连续的数字编号来表示当前工步,还有一个寄存器记录上一步异常位置。每次跳步把目标工步号写入该寄存器,如果报警暂停,HMI能直接显示“报警时位于第X工步”。维护人员处理报警的效率会快非常多。

3.2 点位数据管理与工艺配方的分离设计

定位程序里面绕不开点位坐标。六轴设备通常不是每次都走同样的位置——产品型号变了,物料尺寸变了,工位距离也可能微调,如果坐标写死在梯形图里,换型号就得找工程师改程序,交付后台维护成本极高。

成熟程序的处理方式是把“点位数据”和“控制逻辑”彻底分开。我在这个项目里建了一张数据表格(用PLC的寄存器文件或者标签区),每一行代表一套“产品配方”,包含六个轴各自的定位坐标、速度百分比、夹紧时间、等待时间。主程序里面只保留“配方号”这一个变量,操作员在HMI上选择当前生产的产品型号,程序自动把对应行的数据装载到六个轴的目标位置寄存器区。

使用这种方式还有额外的好处:新品试制时,只需要在HMI上手动微调坐标,再“写入配方”,完全不需要动PLC程序。设备送到客户现场后,现场工艺人员自己就能完成新产品的示教和保存,这大大降低了售后维护的成本。这块是“成熟可靠程序”和“实验室程序”最显著的区别之一——别人的程序是一堆指定坐标,成熟程序是一套可配置的数据结构。

3.3 六大关键动作模块逐一拆解

3.3.1 回原点模块:不能只用一种模式

回原点看起来不过就是“找开关,停,清零”三件事,但六轴设备里各轴工况差异很大,所以程序里至少并存了三种回原点模式:

  • 模式一:减速碰块式,用于行程较长且速度较快的轴1、轴2。轴先以高速朝原点方向运动,碰到近点狗(原点开关)后立即减速到爬行速度,直到离开或者再次找到Z相脉冲才停机。这种模式定位精度较高,但对机械冲击有一定要求。
  • 模式二:扭矩限制式(推压式),用于旋转轴这类需要明确机械基准的轴。驱动器设定为扭矩限制模式,程序让电机朝固定方向一直压紧机械挡块,直到伺服电流达到设定阈值,认为到达物理原点,然后以此位置清零并朝正方向退出固定距离。这种方式不需要额外传感器,结构简单,重复精度在机械允许范围内很稳定。
  • 模式三:绝对位置恢复式,用于辅助轴和送料轴。直接读取绝对编码器保存的坐标,不执行实际回原点动作,但要求开机后首次操作前做一次坐标校验。

这三种模式并存时,程序在配方数据里为每个轴加一个“回原点模式”参数,初始化时按该参数分派执行逻辑。这样做的好处很实在:现场如果某个轴的光电开关坏了,临时把该轴改为模式三,先把设备开起来维持一半产能,等备件到了再改回来。这种灵活性在批量设备保产的时候能救急。

3.3.2 定位执行与多轴同时到达

六轴设备里有两种典型的定位需求。第一种是轴1、轴5、轴6之间“顺序动作”——轴6把料推到位置,轴1再过来抓取,这不需要同时运动,程序顺序发指令即可。第二种是轴2与轴4之间“联动配合”——升降轴到达指定高度的同时,旋转轴必须刚好转到所需角度,两个轴必须先同时启动,再同时到位。

三菱PLC在同时启动多个轴时有一个很容易踩的坑:DDRVA指令的驱动条件如果分散在不同梯级,PLC程序扫描先后顺序会导致各轴实际启动时间相差十几毫秒到几十毫秒。对于大行程轴来说,这点时间差肉眼可见,机械上就会产生先动后动的冲击。成熟程序的做法是把“多轴启动指令”集中到同一个梯级内连续执行,或者使用定位模块的“启动指令编号”功能,用一条指令同时触发几个轴启动。我在这个项目里最终采用的是后一种方式,通过写入启动编号到控制寄存器,一次命令让四个轴在同一扫描周期内启动,配合各自加减速参数,实现了视觉上几乎同时起停的效果。

3.3.3 到位判定与等待超时

定位指令发出去之后,程序不能傻等。伺服定位完成会返回“到位信号”,但这个信号如果一直不来怎么办?必须有超时保护。

程序里每个轴的启动指令都配套一个定时器:设定一个合理的到位等待窗口,最长不超过该轴规划行程时间乘以1.5倍再加上3~5秒余量。如果窗口内到位信号仍未来,程序立刻将设备切入手动模式,并在HMI上弹出该轴的“定位超时”报警,同时拉停其他所有轴。这套机制从设计上杜绝了“一个轴卡住,其他轴还在拼命动作”的连锁事故。

注意,到位信号要慎用“伺服ON且不运动中”作为判断依据。在三菱MR-J4里,定位完成的标志应读取“定位完成”位或“速度为零且指令位置匹配”的组合,而不仅仅是“正在运动”的反状态。我在现场不止一次看到程序用“M3200下降沿”之类信号判断到位,结果位置偏差还存在的瞬间就被判定为到位,最后工件装配歪斜,良率一路下滑。

3.3.4 异常暂停与急停恢复策略

六轴设备在运行中遇到急停或者光幕遮断后,所有伺服轴会立即停止,但此时机械位置可能停留在一个“危险中间态”。恢复生产时,最忌讳的是程序直接让所有轴从停下来的位置继续走完原指令。

成熟程序采用“三阶段恢复策略”:

  • 阶段一:急停复位后,程序将所有轴置于手动模式,操作员通过HMI手动操作各轴脱离危险区域、退回安全位置。
  • 阶段二:操作员按下“位置恢复确认”按键,程序重新校验每个轴的位置是否在可接受的范围内,并自动重新执行“绝对位置读取”或者“快速回原点”。
  • 阶段三:确认无误后,程序跳转到异常退出时记录的工步附近,但不是直接起始该工步,而是倒退到该工步的前一个安全工步,重新执行。

这套流程可能比直接硬跑多花几十秒,但我可以负责任地说,这一套逻辑每救一次设备,就值回几万块的维修损失。很多用户自编程序正是因为省掉这个环节,导致急停后残留的伺服扭矩带动料件滚落或者卡模。

3.3.5 节拍优化:重叠动作与动态加减速

设备节拍是客户最关心的指标之一。六台伺服如果按“轴1走完→轴2走→轴3走”的顺序串行执行,节拍一定慢到没法看,所以程序里必须设计重叠动作。

具体做法是将工艺动作拆成“准备动作”和“关键动作”。举例:轴1的主要任务是搬运,但在轴2升降的同时,轴1可以先向目标工位移动30%的行程;直到轴2安全完成升降,轴1再做剩下的70%高速到达。这样设备总周期时间几乎等于最慢的那个轴的动作时间,而不是所有轴动作时间之和。

三菱伺服里的S形加减速对于这类快速往复动作非常重要。MR-J4驱动器参数里可以设第一加减速时间和第二加减速时间,程序中也支持定位指令自带加速时间。实际调试中,我通常先把加速时间放得比较保守,再慢慢缩小,直到设备出现轻微机械振动时往回退10%,这个值就是该轴的最优加速时间。盲目追求极短加速时间会导致电机过载、丝杠磨损,噪音也会吓到客户的操作工。

3.3.6 安全互锁:伺服轴与气动元件、外围设备的握手协议

六轴设备上永远不只有伺服轴,还有气缸、真空吸盘、旋转台,甚至视觉相机。伺服轴的动作必须与这些外围执行器严格互锁。

程序里我为每个轴建立了一个“允许运动条件字”,每一位代表一个必要条件,包括:对应工位的气缸已经到达目标位、吸盘真空度正常、上一工步的完成信号已复位、安全门关闭、没有急停请求。只有这个条件字等于设定值,轴才能接收定位指令。

这看起来很简单,但真正常犯的错误是:条件字里漏掉某个信号。比如轴2下降时必须确认轴3已经退避到位,否则会直接撞在一起。成熟程序中每个运动指令的允许条件都是经过现场实际联调一条条加进去的,这就是为什么程序“成熟可靠”不是写出来的,是试出来的。

4. 批量应用后的常见故障与排查实录

4.1 现场高频报警:过载与位置偏差过大

程序批量跑起来之后,报警频率最高的两类,一是伺服过载(报警代码AL50),二是位置偏差过大(AL51或AL52)。

过载通常由两个原因造成。第一是机械卡滞,比如导轨润滑不良、丝杠有铁屑、转轴轴承磨损,伺服电流持续超出额定值,驱动器最终切断输出。排查顺序一定是先手动盘车确认机械是否灵活,再去看伺服参数里的电流波形记录。第二是加减速时间过短,电机在极短时间内要求达到极高速度,电流瞬间冲顶。这种情况在HMI的报警履历里能看到规律:每次报警对应的都是同一条定位指令且负载已经足够轻,那基本就是程序加减速参数的问题,往大了调就好。

位置偏差过大则往往不是电气的锅,而是机械的“丢步”或“过冲”。要么是联轴器打滑,要么是减速机齿隙变大,要么是电机抱闸在半释放状态下带载爬行。排查时先把该轴手动运行到两个相近位置,用百分表测实际位移是否等于指令位移;如果几次测量都在同一位置差固定值,优先怀疑机械传动间隙,而不是伺服环增益。

4.2 多轴噪声与抖动问题

六轴设备容易出现抖动。有时只是一个轴在定位保持时发出嗡嗡声,严重时站在设备旁边都能看到机架在微颤。抖动根源大部分出在“伺服刚性过高”和“机械共振”上。

MR-J4默认的增益参数偏高,如果设备机架是铝型材搭的,刚性不够,高速高增益运转时会激起结构共振。现场处理办法分两步:第一步把该轴的伺服增益(参数PB08、PB09等)降下来,观察是否改善;第二步在驱动器里启用“自适应陷波滤波器”,自动识别并抑制共振频率。我做过很多次对比,启用陷波滤波器比单纯降增益的效果好得多,且不会牺牲正常频段的响应速度。

另外有一个细节:六个轴的振频会通过公共机架互相耦合。如果发现升降轴的抖动是被搬运轴的加减速激发的,根源就不在升降轴本体,而要从搬运轴的运动曲线入手,比如给搬运轴的加减速换成S形曲线,瞬间感觉整个世界安静了。

4.3 原点漂移与零点失效排查

前面说设备开了绝对位置检测后不用每天回原点,但长时间运行后也会出现原点漂移。排查时先看编码器电池电压是否正常,再看机械原点挡块是否松动移位。批量设备上我见过最离谱的一次,是保洁阿姨擦机器时把原点挡块的安装螺丝碰松了,位置偏移了1.5mm,导致整整一个班次的产品全部报废。

所以设备维护规程里,除了检查润滑和对射传感器,还必须加上“原点挡块紧固检查”这一项,一个月一次,简单但保命。

对付这种偶发性漂移,程序层面也有一个后手:在每个定位循环的关键工位上增加“位置校验逻辑”。比如轴1把物料放到工位后,在真空开启前,用该工位固定位置的对射传感器确认物料轮廓是否正常,如果轮廓偏差超限立即报警。虽然它不能直接定位出哪个轴漂了,但能把“东西放歪了”这个问题发现在报废之前。

4.4 通信与干扰问题:SSCNET断开与脉冲干扰

如果用SSCNET III总线连接六轴伺服,偶尔会出现“通信异常”报警。多数情况下不是线缆质量问题,而是接线端的屏蔽层没有做好星形接地,或者伺服驱动器与变频器共用了电源地线导致干扰。排查时不要一上来就换线,先用钳形电流表查一下驱动器输入端的漏电流和地线电位差。

如果是脉冲方式连接的设备,干扰表现就更加隐蔽:偶尔某个轴多走几个脉冲,定位位置偏差一点点,又很快被补偿掉。脉冲线必须双绞屏蔽,而且屏蔽层在PLC端单端接地,绝不能两端都接,否则地环流会在导线中感应出额外脉冲,你以为是程序问题,其实是物理层问题。

5. 借鉴成熟程序时的关键思考与落地建议

5.1 拿来主义也要看兼容性

很多人拿到成熟程序后第一反应是全盘复制粘贴,看到里面有几个不理解的网络或寄存器,也不敢删,整个程序臃肿地跑起来。借鉴正确的方法是“先解剖,再裁剪”。

我拿到这种程序后第一步,是把PLC程序整体导出,用三菱GX Works打开,按块梳理出:哪些块是轴参数初始化用的,哪些块是自动流程用的,哪些块是故障处理用的,哪些块是HMI接口用的。在纸上画一张数据流向图,搞明白每个关键寄存器的写入方和读取方,然后才谈得上改。

特别是中断程序区和特殊寄存器区,不要轻易动。有的程序在定时中断里做编码器位置采集和温度监控,表面看不到,但一删除整台设备就变成“植物人”。借鉴时优先保留这部分。

5.2 从六轴改到四轴或八轴的适配思路

如果项目规模不是六轴,而是四轴或八轴,不要简单地删轴或者加轴。关键经验是六个轴的“结构关系”决定了程序块的耦合方式。

删轴时,要同步检查联动的逻辑块。比如原程序轴2和轴4有联动配合,现在去掉轴4,那轴2的启动条件字里跟轴4相关的部分必须一并清理,否则轴2永远得不到启动许可——这个故障尤其隐蔽,它不会报警,但程序就是不动。

加轴时,需要注意PLC本体的定位轴数上限和伺服驱动器的总线容量。Q系列中Q07UDEH连接MR-J4总线伺服时,SSCNET III总共可以挂很多轴,但CPU扫描周期会因为通信周期而变长。如果新轴对响应要求很高,尽量将其放在离PLC物理距离更近的总线节点上,缩短通信延时。

5.3 程序备份、版本管理与现场修改记录

成熟程序的最后一重保障,是版本管理。六轴程序在设备生命周期内一定会有无数次微调:加减速时间、到位等待时间、软限位坐标、配方数据。这些修改如果都直接在PLC里改而不留记录,三个月后连你自己都不知道程序逻辑为什么长这样。

我在项目交付时都会做一个约定:PLC程序文件保留在项目服务器上按日期命名,HMI上的配方修改自动生成操作日志(谁、何时、改了什么),电气柜门上贴一张轴号对应表。这些看似跟程序“无关”的细节,在设备出问题需要复盘时,比任何调试工具都管用。

另外建议在每个轴的关键定位指令旁边加注释,说明这个位置是哪个工位、操作对象是什么、为什么定在这里。不要小看这条注释,半年后接手的工程师,甚至未来的你自己,都会感谢这行字。程序代码能用就行是一回事,代码能被维护是另一回事,这两者之间差的正是这种“历史信息”。

5.4 把这些经验沉淀成自己的标准库

最后我想说点体会。这套六轴伺服程序给我最大的启发,不是某一个指令用得有多巧妙,而是它的整体结构具备非常清晰的“复用边界”。轴参数、工艺流程、诊断逻辑、HMI接口,四层之间互不干扰,这才让它能从一个项目迁移到另一个项目,依然稳定可靠。

我现在做非标项目,已经不再从零开始写每一个轴的控制逻辑,而是把自己的程序框架模块化、沉淀成标准块,新项目只做配方数据和工艺流程的编排。借鉴成熟程序,学到的是它的架构思维和防错思路,而不是那几千行代码本身。这个观念转了弯,做多轴设备的速度和底气完全是两回事。

如果你手头正好有类似的六轴或少于六轴要弄,可以按这篇文章里的方法把轴参数算清楚、把工步状态机架构搭好、把互锁条件列全,再参照成熟程序把每个模块填进去。过程中遇到问题,欢迎再交流,我在现场踩过的坑,也许正是你下一步要碰到的坎。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询