西门子1200+V90伺服通过FB284实现四轴运动控制实战
2026/9/12 12:21:31 网站建设 项目流程

1. 项目背景与方案选型:为什么是1200+FB284+V90这个组合

1.1 自动排列机到底要干什么,控制难点在哪

所谓自动排列机,简单说就是把来料按固定规则码放到托盘、料盒或者夹具里。这个项目里针对的是新能源行业的一种电池模组配件,来料是散件,需要按行列间距精确摆放到定位工装里,再流到下一道装配工序。整台设备有4根伺服轴,分别是X轴横向移动、Y1和Y2两根轴配合Z向取放(实际是双Z结构,左右各一个取放头)、U轴旋转对位,四根轴协同完成“取料—校正—旋转—放入”的循环动作。

控制难点集中在几个地方。第一是节拍要求高,单次取放循环要控制在3秒以内,对轴的加减速和定位时间压得很紧;第二是摆放精度要求到正负0.1毫米,考虑到皮带传动和同步带结构,这已经不算宽裕;第三是设备在整条产线里联机运行,一天三班倒,稳定性必须经得起考验。客户现场还有一条硬性要求:所有轴控必须走Profinet总线,不接受脉冲串方案。

这里就有个很现实的选型问题。项目是2022年中的单子,客户指定的品牌是西门子,但成本控制有明确预算,不可能直接上S7-1500配S120。我们当时对比了三个方案:1500+S120、1200+第三方伺服走PN、1200+V90。第一个性能最强但成本超预算;第二个因为客户技术协议要求整套控制系统统一品牌,被否了;最后落在1200+V90这个组合上,成本可控,通讯方式满足要求,驱动器和电机由西门子提供,售后责任清晰。S7-1200系列CPU里,1214C和1215C都支持最多4个轴的运动控制工艺对象,在这个项目里正好够用。

1.2 选型逻辑:1200的定位、V90性价比、FB284的功能边界

很多刚接触运动控制的工程师会问一个问题:既然V90本身支持内部定位(EPOS),那为什么还要用FB284?直接用V90的IO信号点动、设内部位置段不行吗?这个问题问得很关键,答案就在两个字:工艺。设备要按顺序完成“取、旋转、放”的动作,位置和目标值需要在每次循环里动态计算,还要根据来料检测结果决定旋转角度,这种情况下把工艺逻辑全部交给PLC才是合理的。V90的EPOS虽然可以做简单的定位,但位置段数量有限,在线切换不方便,做不到和PLC逻辑无缝融合。

FB284是西门子官方提供的标准功能块,专门用于通过PROFINET控制V90伺服的基础定位(EPOS)模式。它实际上是把工艺对象里的MC_MoveAbsolute、MC_MoveRelative、MC_Jog等PLCopen指令封装在一起,再和V90内部的位置控制逻辑对接起来。使用FB284的价值在于:不用自己研究111报文里控制字的每一位怎么置位,也不用操心Mode切换时的时序问题,函数块把这一层全处理了。

选择1200+V90还有一个现实原因是调试效率。整个项目从进场到出成品,大概用了25天,其中电气调试从静态接线检查到四轴联动跑通只用了6天。这个速度在传统脉冲伺服方案里很难做到,因为省去了数不清的查线环节,轴的逻辑映射在博途里用鼠标拖拽就能完成。另外V90自带的V-ASSISTANT调试软件能直接读取驱动器的当前值、追踪曲线,对排查问题帮助非常大,比摸黑猜伺服参数轻松太多。

2. 系统架构与4轴拓扑设计

2.1 网络拓扑与PN通讯设计

整机的电气架构是这样的:PLC选用西门子S7-1215C DC/DC/DC,伺服选择4台V90 PN接口版本,每台配1FK2系列伺服电机,机械结构是X轴一台伺服、双Z机构Y1/Y2各一台、旋转对位U轴一台。V90通过PROFINET网络接入PLC集成的PN口,拓扑采用直连方式——就是说PLC的PN口直接接到第一台V90,然后V90之间用设备自带的双口交换机功能串联起来。

这里有一个很多项目里容易忽略的细节:V90 PN版自带两个RJ45口,内置交换机功能,所以多台V90可以像串糖葫芦一样连成一条线,不用额外购买工业交换机。4台V90直接串接,一线到顶,大大减少了故障点。在博途里组态时,4台V90的设备名称分别设为v90_axis_x、v90_axis_y1、v90_axis_y2、v90_axis_u,I/O地址按顺序分配,报文一律使用111报文(标准报文3+附加报文1)。

地址分配逻辑我习惯按物理顺序排开,比如第一台V90的硬件输入IW100开始,输出QW100开始,第二台IW110/QW110,依此类推。这样排的用意是以后维护时看到程序里的地址就能推算出来是哪台轴,省得翻硬件组态。大家在线诊断的时候也会很方便,不用打开每个从站的诊断页面一个一个对。

关于通讯参数,有一点必须提醒:如果设备上还有HMI、上位机系统或其他PN设备,V90从站的PN通讯更新时间要注意设置。我们的设备里触摸屏走的是HMI专用对接,没有占用PN网络带宽,所以V90的更新时间设成了4ms,在4台V90串联的拓扑下实测很稳。如果网络里设备多,建议把更新时间放宽到8ms,避免因为PN总线负载过高导致偶发性不同步。

2.2 轴的工艺规划与联动逻辑

4根轴里,X轴负责从取料位运动到放料位,是一个典型的水平移动轴,行程700mm;Y1和Y2轴是两根垂直升降轴,各带一个气动夹爪,实现“一个循环取放两个产品”的双工位动作;U轴是旋转对位轴,要对产品角度做正负90度范围内的精确旋转。这四个轴在程序里的分工和权限完全不同,不能眉毛胡子一把抓地做联动。

工艺循环大致是:X轴先运动到取料位,Y1下降→夹爪闭合→Y1上升→X轴运动到放料位→Y1下降到位→U轴旋转到目标角度→Y1夹爪打开→Y1上升,完成一个周期。Y2轴和Y1轴的运动时序错开,也就是X轴在放料的同时,Y2已经在取料位开始动作了,两个Z轴交替工作,这样整机节拍才能压到3秒以内。

所以程序里三个轴的关系是“半联动”:X轴只有一个,Z1和Z2交替配合。这种结构下,FB284的两个轴对象必须设置为互相独立的运动,不能用同步指令去强绑,否则反而浪费时间。实际做法是:在用户程序中用步进状态机来调度,每一步只触发一个轴的运动指令,轴之间通过“到位”信号和夹具信号做互锁,而不是同时发多轴运动指令。

还有个很关键的控制细节:U轴旋转对位必须在Y轴抬起之后进行,否则产品在夹爪里旋转时会拖底刮伤。这个逻辑如果只做顺序触发还不够,一定要在U轴使能前把Y轴的高位信号(Z轴已抬起到位)串进互锁条件。我一直保持这个习惯——硬件互锁和软件互锁双保险,防止程序异常时机械互锁失效。在这个项目里,我把Y轴Z轴的上限位和U轴的允许运动条件串了一个中间继电器,即使PLC程序跑飞,伺服也不会在错误位置旋转,保护了产品和设备。

3. FB284核心用法与关键接口解析

3.1 FB284是什么,和MC_MoveRelative系列功能块的关系

FB284在西门子官方库中叫“SINAMICS_V90_PN”,挂在“Motion Control”目录下,使用前需要把库文件(LDrvV90PN.lib)添加到博途项目中。它的本质是一个封装好的功能块,底层调用的是PLC工艺对象里的运动控制指令,通过标准PROFINET报文(111报文)与V90交换数据。111报文包含控制字、状态字、目标位置、实际位置、速度、加减速度、转矩等信号,是V90 EPOS模式的标配。

需要明确一点:FB284不是独立的轴控方式,它依赖你在PLC里创建的运动控制工艺对象(Motion Control Object,类型选择PositioningAxis)。这个工艺对象你可以理解为PLC内部的一组数据区,里面保存了轴的全部状态——当前位置、目标位置、速度、加加速度、跟随误差等。FB284就是这组数据的“操作面板”,把工艺对象的数据映射到V90上,同时把V90的状态读回来。

这和直接用MC_MoveAbsolute有本质区别吗?有。MC_MoveAbsolute是针对通用驱动器的PLCopen指令,它需要你自己保证驱动器的通讯报文、控制字时序正确,而且指令之间要自己管理互锁,一个轴同时只能有一条运动指令激活,否则会报错。FB284不一样,它把Mode参数当作一条“换挡指令”,默认情况下,切换Mode前不需要先取消上一条指令,函数块内部已经帮你做了取消操作。这个对于写状态机特别友好,代码量至少能少三分之一。

3.2 关键参数配置:Mode、Jog1、Jog2、ConfigEPos

先把FB284最有用的几个输入输出接口过一遍。我这里的经验是基于V90 PN固件V1.2以上版本和博途V15以上环境,不同版本引脚会略有差异,但核心逻辑不变。

Enable是整个FB284的总开关,必须置1这个块才工作。但很多人第一次用都会漏掉的:Enable只是功能块的开关,真正的轴使能是AxisEnable引脚,这个引脚置1后控制字里的“RUN”指令才会被置位,V90驱动器才会接通使能。正确顺序是:Enable=1 → 延时50ms → AxisEnable=1 → 延时100ms → 再发运动指令。这个时序是经验值,没有严格规定,但顺序不能反,否则V90会在“未使能”状态下收到运动指令,容易触发F07460或通讯报警。

Mode是FB284的运行模式选择开关,在EPOS模式下支持以下值:1代表相对定位(MC_MoveRelative),2代表绝对定位(MC_MoveAbsolute),4代表点动(Jog),5代表速度控制(MC_MoveVelocity,但我个人在V90里不推荐频繁用速度模式),6代表运行到组态位置。这个项目里我用得最多的是Mode=2(绝对定位)和Mode=4(点动)。

Jog1和Jog2是两个点动输入,分别对应正转和反转,注意这两个信号只对Mode=4有效。很多工程师的习惯是调试时直接把Mode设为4,然后强制Jog1/Jog2来点动,这没问题,但一定要记住:**点动状态下的速度由Velocity引脚给出,不是由驱动器面板里的速度参数决定。**我之前遇到过一次乌龙,面板上设了500rpm,点动飞快,差点撞了机械,根源就是忘了FB284点动时用的是Velocity引脚的值。

ConfigEPos是另一个必须重视的引脚。它用来把一个“参考偏移”值传给V90 EPOS,在部分应用里用来做零点搬移。比如机械结构换型后,零点位置发生偏移,如果重新回零太麻烦,可以直接通过ConfigEPos把新零点坐标写进去。但这个操作要小心:它会把当前位置值改写,如果写错可能导致绝对定位全乱,项目现场用之前一定先看V90手册的EPOS参考偏移部分。

3.3 手自动切换与运行中包络控制

FB284还有一个很实用但很少有人专门讲的用法:手自动切换时用MODE=4(点动)和MODE=2(绝对定位)的组合,可以做到切换时不断使能、轴不抖动。做法是在自动模式下把所有FB284的Enable/AxisEnable保持为1,只切换Mode和Position/Velocity的值,这样V90驱动器一直处于使能状态,机械不会因为使能断开再重新吸合而振动,也不容易发生位置漂移。

自动运行中用FB284做“运行中修改目标位置”也支持。比如X轴正在以300mm/s的速度向1000mm位置运动,这时节拍变了,目标位置改成800mm,F284的处理方式是把当前运动中止再重新启动新定位。这个过程中速度曲线会发生一个短暂的“凹坑”,如果对节拍要求极高,我建议利用Velocity引脚在改写位置的同时把速度也降下来,可以明显减少机械冲击。调试时用V-ASSISTANT的 Trace 功能捕捉速度曲线,这个优化对比非常直观。

3.4 用C#做上位机监控的延伸思路

最后必须提一嘴热搜词里的“C#西门子1200”。很多现场工程师不重视上位机监控,觉得“PLC跑得好好的,要什么上位机”,但这个项目因为是新能源产线,客户要求必须能远程查看设备状态。我在调试期间用C#写了一个简单的监控界面,通过S7协议(使用开源通信库)读取PLC中的轴状态、当前位置和报警代码,上行显示在工控机上,效果出奇地好。

实现思路不复杂:PLC侧把四个轴的当前位置、状态字、报警代码批量放到一个DB块里,C#用后台定时器每100ms读取一次这个DB块,刷新到窗体表格里。这个100ms的刷新频率对监控足够用,又不占PLC太多资源。V90没有直接暴露给上位机的接口,但通过PLC中转后,C#完全可以拿到每一个轴的实时位置、实际速度、控制器状态和报警字,这也是很多MES系统对接的常见套路。现场没带调试电脑的时候,用C#写的小工具查伺服状态比打开博途在线快太多了,强烈建议有精力的同行做一个通用版备用。

4. 调试实录:从组态到跑通一台真实设备

4.1 博途里怎么组态V90和1200

我按实际操作步骤梳理一遍,全是干过的活。

第一步,在博途里新建项目,添加PLC,选择S7-1215C。需要注意的是:V90作为PROFINET从站,需要在博途的“设备视图”里通过“目录”搜索到它的GSD文件。博途V15以上自带V90的GSD,但如果你用的V90固件版本较新,建议去西门子官网下载对应的GSDML-V2.35版本,避免组态后报设备不匹配。

第二步,在“网络视图”里添加4台V90,把PLC的PN口和V90的PN口用鼠标拖一条线连起来。这里有个新手经常卡住的地方:连接关系建好之后,还要给每个V90分配“设备名称”,设备名称必须和V90驱动器面板或V-ASSISTANT里设置的名称一字不差,包括大小写。如果现场发现PN通讯时好时坏,八成是设备名没对上或者有重复。

第三步,为每台V90分配“报文”。双击V90设备,在“设备视图”里选中PROFINET接口下的“报文”选项,选择“标准报文3+附加报文1”,也就是111报文。111报文包含控制字STW1、状态字ZSW1、目标速度NSOLL、实际速度NIST、目标位置、实际位置、加减速时间等。确认地址范围不要重叠。

第四步,在PLC程序里调用FB284。把库文件LDrvV90PN.lib加入项目后,在OB1(或某个循环中断OB)里调用FB284背景DB,然后给每个轴建一个独立的背景DB,比如DB_X、DB_Y1、DB_Y2、DB_U。这里必须注意:每个轴必须用独立的背景DB,不能共用一个。

第五步,在PLC的工艺对象中创建4个PositioningAxis对象。每个轴对象的“驱动器”参数选择对应的V90从站,“测量单位”设置为mm(根据实际机械结构换算),并设置软限位、动态限幅、回零方式。这一步必须和FB284引脚对应起来,因为FB284内部是直接操作工艺对象数据的。

4.2 V90驱动器参数的关键点

V90驱动器的调试建议用V-ASSISTANT软件,通过USB连接驱动器调试口。这个软件可以备份/恢复驱动器参数、监测实时曲线、做动态优化,是现场调试的必备工具。

参数里最重要的几个:P29060设置为1,启用EPOS定位模式;P29040是“位置控制模式”下选择“基本定位(EPOS)”;P29015是报文类型参数,必须与博途里选择111报文一致;P29246是编码器类型选择,如果电机带抱闸,要设置抱闸控制方式为“通过控制字/状态字控制”,并确认急停时抱闸能立即闭合。

还有一个很容易踩坑的地方:V90的电子齿轮比P29247/P29248,默认值是1:1。如果机械减速比是3:1,丝杆导程20mm,那PLC发的1mm位置指令,轴实际只走0.333mm——这种错位在调试初期特别容易让人怀疑人生。正确做法是在V-ASSISTANT的设置向导里输入机械参数:负载齿轮比、丝杆导程或皮带轮直径、电机编码器分辨率,软件会自动算出P29247/P29248的值。然后回到博途的工艺对象里,把“每转的位置量”也设成一致,两边才能对齐。

4.3 轴调试流程:回零、点动、定位、优化

轴调试的顺序和自行车组装差不多——先让轮子转起来,再谈跑得快不快。我习惯按以下四步走:回零调试、点动跑合、绝对定位验证、动态参数优化。

回零方式是整个位置控制的地基。V90 EPOS支持多种回零方式,本项目用的机械结构——X轴和U轴是增量式编码器电机,Y1/Y2由于是垂直轴,必须带有抱闸,我选了“主动回零+限位挡块”的方式。回零方向、挡块信号源、回零速度在V-ASSISTANT里设置。一个关键点:回零触发信号我是通过PLC输出的,而不是接到V90的硬件输入点,这样可以在程序里做“首次上电必须回零”的联锁逻辑,防止有人跳过回零直接手动运动。

点动跑合阶段用的是Mode=4。把Velocity设置为一档低速(比如50mm/s),Jog1/Jog2来回运动,观察机械顺畅度和异响。注意这时候要盯住FB284的Active和Busy状态,如果出现CommandAbort,说明上一条点动指令被中断,需要检查Jog信号是不是没有及时复位。

绝对定位验证是重头戏。把Mode=2、Position设成目标位置、Velocity和Acceleration设成工艺值,触发一次。观察V-ASSISTANT的“实际位置”和“设定位置”曲线是否完全重合,定位偏差如果大于正负0.1mm,就要调整增益。这个项目里X轴由于皮带传动的迟滞,纯位置环增益拉不高,我适当加了速度前馈,最终定位精度稳定在正负0.05mm以内。

动态参数优化的目标是提高整定响应又不引起振动。先用V-ASSISTANT的自动优化跑一圈,然后手动微调:速度环增益(P29011)、速度环积分时间(P29012)、位置环比例增益(P29111,即KPC)。V90默认的刚性等级是“低”,我根据负载惯量比调到“中”,然后人工微调KPC从默认的1.0拉到1.8。注意每次改完增益都要做一次稳态测试——让轴跑一段往返行程,观察有没有过冲或啸叫,如果有,就要往回调。这个步骤看着耗时,但能让设备稳定运行很久,值得做精。

5. 新能源产线特有坑与排查

5.1 常见报警与排查速查表

现场调试遇到最多的问题集中在几个典型报警码上,我整理成速查表,方便同行应急参考。

报警码含义常见原因排查顺序
F07460位置跟踪错误编码器反馈异常、抱闸未打开、机构卡阻检查抱闸电源和PLC抱闸控制逻辑→盘车确认机械是否卡死→用V-ASSISTANT看编码器实际值是否跳动
F07461位置跟踪超差增益太低或负载突变用Trace看位置设定值与实际值偏差→增大KPC或加前馈→确认负载惯量比设置是否准确
F0530通讯中断网线松动、设备名冲突、PNIO诊断检查网线接头→在线诊断报文状态→确认V90设备名称唯一→延长PN更新时间
F07471编码器零点丢失增量编码器首次上电或电池没电断电重新上电→重新回零→如反复出现考虑改绝对定位
F7900/F7901驱动器过温/欠压环境温度高、电源电压波动检查散热条件→实测供电电压→加装风扇或稳压器

F07460在垂直轴Y1/Y2上出现频率最高,原因基本指向抱闸没有打开就给了运动指令。解决思路是:在PLC程序中把抱闸控制输出(通常是继电器驱动模块控制V90的抱闸继电器)与FB284的AxisEnable串一个延时逻辑——先打开抱闸,延时200ms到300ms(看抱闸响应时间),再置位AxisEnable。这个延时不能省,特别是大惯量垂直轴,抱闸没完全打开就给运动指令,不仅报警,还会直接磨损抱闸摩擦片。

5.2 抱闸控制与急停逻辑

V90电机的抱闸控制有三种方式:默认是驱动器内部自动控制(当速度为零时自动吸合),也可以在V-ASSISTANT里设置为“外部控制”,由PLC通过控制字位来控制。这个项目里我采用的是“外部控制”,原因很简单:自动控制模式下,急停时V90立刻断开使能,抱闸会瞬间抱紧,这种冲击在垂直轴上极其难受,机构会明显抖动,长期下来还可能损伤丝杆。

外部控制的做法:急停回路直接串联一个中间继电器,急停触发时中间继电器断电,抱闸控制回路断开,抱闸机械锁死。PLC程序里同时做一次“轴停止”处理,把FB284的Enable和AxisEnable全部清零。这个双通道逻辑的好处是:即使PLC程序卡死或者通讯中断,抱闸依旧能靠硬件回路强制闭合,这是垂直轴最基本的安全保障。

还有一个细节,急停后的复位顺序。现场操作工往往急停后立刻松急停、按复位,结果设备还是报警。原因在于V90驱动器保持故障状态,必须通过控制字清除驱动器的故障位,再用FB284重新使能。正确顺序是:松急停→PLC程序里复位FB284的故障锁存(一般是把Enable断电再上电,或者用FaultAcknowledge功能)→确认V90面板故障码消失→再置位AxisEnable。

5.3 PN通讯中断与干扰问题

V90 PN通讯中断虽然不常发生,但一旦出现就是“疑难杂症”。第一种情况是网线接触不良,排查方法是在博途里打开在线诊断,看V90从站的“IO访问”是否变红。如果间歇性红色,直接换一根成品网线,别纠结是不是水晶头压接的问题。

第二种情况是现场干扰导致通讯闪断,多发生在有大功率变频器或开关电源的柜子里。V90的PN网口在1.2版本固件后抗干扰能力已经不错,但如果和变频器共用电缆槽,还是会出现偶发断网。我的处理措施是三件套:V90的PE接地单独拉一截2.5平方以上的铜线到接地排、网线用带屏蔽层的工业成品线、电缆槽里把网线和动力线拉开物理距离。这样处理后,这个项目运行一年多没有再出现通讯故障。

第三种情况是设备名称冲突,特别是在旧设备改造项目中,调试电脑里可能装过多个项目的GSD名称。一旦V90的设备名重复,PN通讯会随机性的“通—断—通”,让人抓狂。排查方法很简单——用V-ASSISTANT读每个V90的面板设置,确认全部唯一即可。

5.4 程序里那些不跑起来根本不知道的坑

最后分享三个程序层面的坑,都是花时间换来的。

第一个坑是FB284的Done信号不能用边沿触发。FB284的Done信号和普通指令的Done不一样,它在轴到位后会被系统保持一个周期就复位。如果程序里用R_TRIG去捕捉Done,经常会出现“明明轴到位了但程序没反应”的假象。正确做法是直接读状态字里的“定位完成”位(比如ZSW1的第10位),用这个信号做步进状态机的跳转条件,稳定可靠。

第二个坑是绝对定位Mode=2模式下,Position的数据类型是DInt。如果把浮点数直接传给Position,博途会给你一个隐式转换的警告,但实时值会被截断,毫米的小数部分就没了。一定要使用ROUND或CONV指令把REAL转成DINT再传给Position。

第三个坑是程序里的轴参数修改时机。FB284的Velocity、Acceleration、Deceleration引脚在轴正在运动时是可以直接修改的,但效果是“下一个启动指令才生效”,不会中途打断当前运动。如果希望做到运行中变速,可以利用MC_MoveVelocity模式或重新发定位指令,不能用“改引脚值”这种方式去期待立刻响应。知道这个特性后,写节拍优化程序时会少走很多弯路。

6. 写在最后的一点实在话

说实话,西门子1200加V90这套组合,在新能源行业里不是什么高大上的方案,但它胜在皮实、便宜、生态好。FB284这个功能块,第一次用会觉得接口多,摸清楚之后就会发现它的设计确实是从实际应用出发的,几乎把调试中会遇到的时序问题都考虑到了。我见过不少工程师跳过FB284去直接操作报文,结果在轴使能、Mode切换上花了两三倍时间,还没FB284稳定。能用官方库解决的事情,没有必要自己造轮子。

如果后续要扩展,这台设备的经验可以直接复制到类似的多轴定位场合,比如自动锁螺丝机、摆盘机、插件机。如果要进一步降本,可以考虑用1200的V4.0新固件配合V90做速度控制型应用,但定位场合我还是建议保留EPOS模式。另一个实用的扩展方向是把我前面提过的C#监控界面做丰富一点,把报警历史、产量统计都加进去,这对新能源行业交付时做“上位机功能展示”会非常加分。

最后提醒一句:所有参数和时序,都要以自己的设备和V90固件版本为准。本文提到的经验是基于2022年中的项目版本,西门子后期更新过几次固件,接口可能微调,现场调试以官方手册为最终依据。伺服控制这东西,理解了原理,所有版本差异都只是细节问题。

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

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

立即咨询