1. 选型时刻:PN总线版V90带来的工作方式变化
这两年做自动化项目,遇到伺服选型,基本绕不开一个话题:到底用脉冲版还是总线版?尤其当你手里已经握着S7-1500PLC,现场又要上伺服定位功能,西门子S7-1500PLC与西门子V90 PN伺服通讯控制这个组合出现的频率就非常高。
我在不少项目里用过这两种版本的V90,说句实在话,如果项目刚起步、轴数也不多,预算又卡得紧,用脉冲版PTI完全说得过去。但只要涉及多轴、远程诊断、数据追溯、快速换型,脉冲版的局限性就立刻暴露出来。而V90 PN总线版,一根PROFINET网线把 PLC 和伺服串起来,位置设定值、状态反馈、故障代码、参数读写全部走网络,现场开起来的一致性、调试效率完全不是一个量级。
这篇文章我把这套组合的完整玩法拆开聊一聊。从硬件选型、伺服调试、PLC组态、功能块使用,到现场调试时最常见的坑和排查思路,基本都会覆盖到。适合正在准备用S7-1500接V90 PN的电气工程师、调试工程师,也适合设备维护人员在故障分析时作参考。
1.1 为什么这两年PN总线伺服越来越常见
以前用脉冲控制,PLC发脉冲给V90 PTI,一个轴至少需要PTO脉冲输出点,加上方向、使能、复位、报警等IO,轴一多,接线量直接爆炸。端子接触不良、脉冲丢失、干扰导致定位偏移这些问题,排查起来特别烧时间。
总线伺服把这些问题削减了一大半。V90 PN出厂自带双RJ45口,可以很方便地在PROFINET网络上做菊花链级联。PLC只需要在TIA Portal里把伺服当成一个IO设备挂上去,分配好设备名称和IP,剩下的事情就在程序里处理和报文数据。试车的时候改参数也方便,伺服参数甚至可以在PLC程序里在线读写。
另一个现实因素是维护效率。现场设备一旦出现报警,伺服自己会返回故障代码和相关状态字,HMI上直接把报警信息显示出来,比维护人员拿着万用表去量IO信号要快太多。
1.2 PTI与PN版本的典型差异对照
我整理了一张对比表,方便做方案选型时直接用。不同项目会有差异,但这张表大体代表了两个版本的典型表现。
| 对比项目 | V90 PTI 脉冲版 | V90 PN 总线版 |
|---|---|---|
| 控制信号 | 脉冲+方向+使能等离散IO | PROFINET报文,一根网线 |
| 反馈信号 | 部分通过IO或模拟量间接获取 | 实时位置、速度、状态字周期返回 |
| 接线复杂度 | 高,每轴至少十几根线 | 低,网线级联即可 |
| 调试速度 | 较慢,参数和排障靠外部IO | 快,在线诊断和参数访问方便 |
| 定位控制方式 | PLC脉冲输出,V90内部高速计数 | 报文111或105,EPOS/速度控制 |
| 多轴扩展 | 受PLC脉冲点限制 | 网络节点扩展,组态即可 |
| 故障诊断能力 | 弱,报警通过端子电平输出 | 强,驱动故障码直接进PLC |
| 成本 | 较低 | 略高,但省IO模块和人工 |
从成本角度看,单轴差别不算大,但把人工接线、错误排查、停机损失算进去后,PN版本在大多数中大型项目里反而更省钱。
1.3 一套典型系统由哪些硬件组成
以一套常见的单轴分度/定位设备为例,硬件大体包括:
- S7-1500 CPU,例如 1511-1PN 或 1516-3PN,固件版本建议不要太旧,新项目在新版本软件环境下做组态会更顺
- V90 PN伺服驱动器 + 对应电机,功率根据负载选,别只看额定功率,要看实际峰值扭矩和转动惯量
- 滚珠丝杠、减速机、直线导轨等机械执行机构
- 24V电源、断路器、接触器、滤波器,这部分很重要但经常被忽略
- 急停回路、限位开关、原点开关等外部安全与定位检测元件
我把这套系统接起来调试过的次数不少,感觉最难的不是硬件接线,而是软件上的报文匹配和单位换算。后面全都展开说。
2. 试车前必须搞定的三件套:伺服参数、总线报文、安全回路
很多人以为伺服吃上电,往PROFINET上一插就能用。这是最大的误解。V90 PN上电后若没有正确分配设备名称、没有配置报文、没有设置好单位系统,PLC连上网络也控不住它。
试车前我习惯按固定顺序做三件事:用V-Assistant把伺服本身调通、把报文类型选对、把使能和急停逻辑规划好。顺序不能乱。
2.1 用V-Assistant把V90跑起来
V90 PN的调试软件是V-Assistant,界面比老的调试工具友好不少,主要做这几件事:
- 分配设备名称。PROFINET设备靠设备名称识别,不靠IP地址。我一般把名称设成“v90_axis1”“v90_axis2”这种有规律的命名方式,和项目里的轴号一一对应,排查起来方便。设备名称要和TIA Portal里组态的名称完全一致,大小写也建议保持一致。
- 设置控制模式。V90 PN常见有两种报文控制模式:速度控制和基本定位控制。因为用的PLC是S7-1500,一般选择通过报文111来实现基本定位控制。如果只是做速度同步或者张力控制,报文105就够了。
- 设置电子齿轮比和单位。这里要仔细算。比如丝杠导程10mm,电机转一圈负载走10mm,那电子齿轮比就是负载转数1比电机转数1,然后位置单位再按需要放大,一般我会设成1mm对应1000个位置单位,这样HMI上显示更直观。
- 回零参数。基本定位控制需要回零,回零方式可以选择接近开关加编码器零脉冲或者软件限位等。具体选哪种看机械结构。
- 保存并激活参数,让伺服重新上电。
我第一次用V-Assistant的时候犯过一个低级错误,改完参数没有“保存到ROM”,断电重启后参数全部还原,那叫一个狼狈。现在习惯是任何参数改完,都先保存再测试。
2.2 报文类型的选择:111还是105
报文类型是这组通讯里最容易让人搞混的地方。我直接说结论:
- 如果想让V90按照EPOS基本定位方式来运行,使用标准报文111。
- 如果只是做速度控制,不要求伺服内部定位,使用标准报文105。
报文111里包含控制字、状态字、设定速度、设定位置、实际速度、实际位置等关键数据,是PLC直接做定位控制的基础。报文105则只有速度设定值和实际值,定位逻辑需要靠PLC和外部编码器来做,项目里用得少。
报文选错最直接的后果是:PLC组态里看到的输入输出数据区长度不一样,程序里读到的第一个参数可能根本就不是控制字。排查办法很简单,先把伺服手册里的报文结构看一遍,再对照TIA硬件目录里的数据块。两者不一致肯定有问题。
2.3 TIA侧的设备组态与GSD文件版本
S7-1500要和V90 PN通信,必须先在TIA Portal里把V90的设备描述文件装进去,然后组态网络拓扑。
我一般流程是:
- 打开TIA Portal,在“选项”菜单里安装GSD文件,文件从伺服随机附带的光盘或者官方下载获取。
- 网络视图里添加V90设备,放好设备名称,与V-Assistant里对应。
- 在网络视图中把PLC和V90连起来,分配给同一个IO控制器的PROFINET网络。
- 在V90设备视图里配置报文,选择111。
- 编译、在线分配设备名称,把组态下载到PLC中。
需要注意GSD版本和驱动器固件版本的匹配问题。版本太旧会看不到新功能,版本太新会报组态不匹配。我遇到过一次GSD文件用了早期的2.0版,组态完发现报文结构里少了几个状态位,换到匹配版本后恢复正常。
设备名称在下载前一定要通过“在线模式”分配好。否则PLC始终找不到对应设备,网络通信建立不起来,驱动面板一直报告“I/O访问错误”。
2.4 急停回路和伺服使能的时序设计
伺服控制里,使能信号和安全回路不能混为一谈。程序里的使能只是给驱动器一个“允许运行”的指令,急停则是硬件和软件都要保证的强制停止通道。
我设计的常规做法是:
- 硬件急停回路串在伺服主回路接触器回路上,急停按下直接切断驱动器主电源或者通过安全继电器切断STO使能回路;
- PLC程序里也要把急停状态作为使能必要条件。急停复位后,必须手动确认才能重新上使能,防止设备自动重新运行。
千万别指望靠FB284里的Mode=0来当安全机制,软件停止和硬件使能切断是完全不同的两个安全等级。这一点做非标设备的兄弟一定要注意,哪怕客户催交货催得再紧,安全回路也不能省。
3. PLC里两条控制路径:MC工艺对象和SINA_POS功能块
S7-1500控制V90 PN,在程序中有一个“路线选择”问题。有人用运动控制工艺对象(MC指令),有人用西门子驱动库里的SINA_POS功能块。两条路径我都在项目中实际用过,各有利弊,而且现实情况是很多人把两条路混在一起用,结果程序越写越乱。
3.1 工艺对象的配置流程
TIA Portal里可以直接把V90组态成“运动控制轴”工艺对象。这样在PLC程序里就能用MC_Power使能、MC_Home回零、MC_MoveRelative相对定位、MC_MoveAbsolute绝对定位这些标准指令。
要做到这一步,需要先在PLC组态中添加工艺对象“定位轴”,并在轴配置里把硬件接口分配给V90 PN,定义好单位系统、限位、速度限值、加减速时间、原点位置等参数。之后在OB1或者运动控制程序段里调用对应指令块即可。
工艺对象的好处是代码可读性高,逻辑清晰,PLCopen风格的指令集对后期维护友好。系统还可以利用工艺对象自带的诊断功能查看轴状态,比如跟随误差、实际速度、指令位置等。多轴协调运动时,工艺对象在S7-1500上处理得比较顺手。
缺点是对PLC CPU版本有最低要求,轴参数配置比较复杂,初次上手有一点门槛。
3.2 SINA_POS(FB284)的参数解析
如果不愿意用工艺对象,或者项目里已经有大量基于驱动库写的功能块,那SINA_POS功能块就是更常用的选择。FB284本质上是一个把报文数据打包、解析、状态机管理的“翻译官”,PLC通过它对V90下发控制字和设定值,同时读取状态字和实际值。
我个人用FB284的版本比较新,常见引脚如下,不同库版本会有细微差异,但大体类似:
| 引脚 | 类型 | 作用 |
|---|---|---|
| EnableAxis | BOOL | 轴使能信号 |
| ConfigEPos | DWORD | EPOS模式配置字 |
| Jog1 / Jog2 | BOOL | 正/负向点动 |
| Referencing | BOOL | 触发回零 |
| ExecuteMode | INT | 运动模式选择 |
| OverV / OverL | DINT | 速度设定 / 位置设定 |
| OverA | DINT | 加减速设定 |
| CancelTraversing | BOOL | 取消当前运行 |
| IntermediateStop | BOOL | 暂停轴运行 |
| AxisPos / ActVelocity | DINT | 实际位置/实际速度反馈 |
| Error / ErrorNumber | BOOL / INT | 故障状态输出 |
ExecuteMode的数值含义必须和库手册对照。常见约定是:1=相对定位,2=绝对定位,3=速度模式,4=点动模式,5=回零模式。不同库版本可能有差异,我写的这个不能当万能定义,但大体是这个思路。
3.3 一段足够简单的点动/定位程序示例
现场调试的时候,我经常先用最简单的逻辑把轴跑起来,确认通讯和单位都对,然后再扩展复杂动作。下面是一段类似SCL风格的点动/定位示例,帮助理解FB284的基本接法。
IF "HMI_Enable" THEN "SINA_POS_1".EnableAxis := TRUE; ELSE "SINA_POS_1".EnableAxis := FALSE; END_IF; // 点动模式 IF "HMI_JogP" THEN "SINA_POS_1".ExecuteMode := 4; // 点动模式 "SINA_POS_1".Jog1 := TRUE; ELSIF "HMI_JogN" THEN "SINA_POS_1".ExecuteMode := 4; "SINA_POS_1".Jog2 := TRUE; ELSE "SINA_POS_1".Jog1 := FALSE; "SINA_POS_1".Jog2 := FALSE; END_IF; // 绝对定位 IF "HMI_AbsStart" THEN "SINA_POS_1".ExecuteMode := 2; // 绝对定位 "SINA_POS_1".OverL := "HMI_TargetPos"; "SINA_POS_1".OverV := "HMI_Speed"; "SINA_POS_1".OverA := 1000; END_IF;这段程序只是演示数据流,实际项目里还要做启动沿处理、忙信号互锁、故障复位等操作。不过把逻辑的基本骨架搞明白后,后续扩展就有章法了。
3.4 两种方式的取舍建议
工艺对象和SINA_POS功能块不是竞争关系,而是两种适配不同场景的工具。
| 对比项 | MC工艺对象 | SINA_POS |
|---|---|---|
| 代码风格 | PLCopen运动控制指令 | 驱动库专用块 |
| 学习成本 | 需要理解轴对象概念 | 需要理解引脚含义 |
| 组态复杂度 | 较高 | 较低 |
| 高级运动功能 | 支持,与PLC集成好 | 依赖EPOS本身功能 |
| 适合场景 | 新项目、复杂运动、多轴配合 | 快速调试、老项目迁移、单轴定位 |
如果项目是新设备、轴数多、动作逻辑还复杂,我推荐工艺对象。如果项目型号多、要快速改动作,或者在原有非标设备上加减速定位逻辑,FB284反而更快。
4. 现场调试中最容易翻车的五个环节
这可能是本文最关键的部分。前面讲的都是怎么把系统搭起来,这部分要聊我亲眼见过、也亲身踩过的坑。每个坑背后都有一段加班排查的故事。
4.1 控制字置位顺序不对导致伺服没有反应
最典型的“没反应”现象是:程序里使能给了,HMI也提示运行了,但电机纹丝不动。排查通讯又没有掉线,报文都正常。到最后发现问题是使能时序不对。
V90 EPOS里通常要满足“控制字对应位顺序正确”才真正进入运行就绪状态。比如要先解除急停、再给运行使能,中间还要有脉冲使能等步骤。直接用FB284的时候这些逻辑库内部做了一部分,但外部使能信号和故障复位不能乱。
我遇到过一种情况:程序里把EnableAxis和急停复位同时给出来,但驱动在上电后还没有完成初始自检,使能信号给得太早,驱动直接忽略。解决办法是上电后延时几百毫秒再使能,或者等在状态字中“就绪”标志为真后再使能。调试时用手持面板看一下“当前状态”和“控制字”的差异,比盲猜要快得多。
4.2 F7450跟随误差报警的定位思路
F7450这类报警出现时,意味着“设定位置和实际位置的偏差”超过了驱动器内部设定的跟随误差限制。
这里有个很大的心理误区:很多工程师一看到跟随误差报警就怀疑编码器坏、怀疑伺服坏,其实大多数情况下是机械或动态参数问题。我按可能性排个序:
- 机械卡滞、阻力异常,丝杠或者导轨上有异物
- 负载惯量太大,加减速设置太激进,电机响应跟不上
- 抱闸没有完全打开
- 转矩限幅设置太低,电机输出扭矩不够
- 编码器或电机本身问题,但比例很低
排查时可以先把跟随误差报警阈值放宽一些,区分是偶发还是持续。偶发多数是加减速太陡,持续多数是机械问题。用伺服调试软件的示波功能记录实际位置和设定位置曲线,一眼就能看出问题阶段。
4.3 单位混乱:位置目标和实际脉冲对不上
单位问题非常隐蔽且杀伤力强。工艺对象或FB284里的位置值,是用户单位,而不是电机编码器脉冲数。如果组态时位置单位换算没配置好,就会出现“HMI给10毫米,实际走了10个位置单位”这种莫名其妙的现象。
我在一个项目里遇到过:上位机给的位置是1毫米对应1000用户单位,而伺服内部把编码器每转脉冲数直接当成用户单位,结果实际行程差了100倍。
解决这件事的唯一办法是在调试前把单位换算表列出来,写在项目调试文档里。电机转一圈对应多少毫米机械行程,对应多少用户单位,对应多少内部LU。这个换算关系不厘清,后面所有定位程序都是空中楼阁。
4.4 回零不准,限位开关的接线坑
回零问题直接导致定位基准错误。常见情况有两种:
- 回零过程根本触发不了,因为原点开关信号没有正确接入伺服驱动器的接线端子;
- 回零能触发,但每次停的位置不一致,可能每次相差一个或多个螺距。
前者是接线问题,后者通常是回零方向和零脉冲的配合设置问题。EPOS回零的原理是:先朝一个方向找开关,找到后反向离开,再在编码器零脉冲处停住。如果零脉冲误差、方向设置不对,就会出现每次回零结果不同。
调试建议是:先用手动模式把轴移到原点开关附近,确认开关信号有效,并在伺服的时序图里看信号状态。再设置好回零方向和速度,最后在当前点执行一次回零测试。若两次回零结果一致,才算真正调通。
4.5 HMI手动/自动切换的互锁设计
硬件搞定了,通讯也通了,定位也准了,结果HMI上手动自动一切换,轴突然乱动甚至互撞。这个问题的根源不是伺服,而是程序互锁不够。
我建议每个轴在HMI上至少有“手动/自动”模式选择开关,模式切换时执行如下逻辑:
- 手动模式下禁止任何定位指令,只允许点动或回零;
- 自动模式下禁止点动指令,只能响应启动信号;
- 模式切换瞬间,先取消当前运动,再进入新模式;
- 自动启动信号必须用上升沿触发,不能用长信号。
这一点看起来简单,但很多设备故障都出在这里。伺服本身没有“安全逻辑”,它只服从指令。PLC程序里不做互锁,就不要指望现场操作员不犯错。
5. 这套系统再往上走一步:动态特性与安全边界
系统能跑了,定位也基本准确了,接下来才轮到真正体现工程师水平的部分:让设备跑得稳、跑得快、还不出意外。这个阶段我重点关注四个方面。
5.1 加减速时间和动态响应调节心得
同一套机械,加减速参数设置不同,生产节拍和设备寿命能差不少。加减速时间太短,跟随误差大、机械冲击大,甚至触发过载报警;太长,节拍达不到,客户不满意。
一个比较稳妥的调节思路是:先把加减速时间放到一个偏保守的值,例如0.5秒左右,手动跑一次定位,观察状态、监听是否有异响。然后每次缩短0.1秒,重复测试,找到“刚好不报警、不丢步”的临界点,然后在此基础上留出1.2到1.5倍安全余量。
V90的自动整定功能在负载不是很复杂的情况下效果还算不错。自动整定出的刚性值可以先用,重点看走定位曲线时跟踪误差是否平缓。如果发现实际位置一直在追赶设定位置,说明速度或加速度环增益还需要微调,不要迷信自动整定,设备实际负载变化才是最终的检验标准。
5.2 跟踪误差阈值和软限位怎么设
跟踪误差阈值设置不能太随意。设得过大,机械撞了都傻跑半天;设得过小,正常负载波动也会误报警。我一般先把默认值放宽跑一个完整工作循环,记录正常情况下的最大跟随误差,然后取这个值的2到3倍作为阈值。这样既有早期预警能力,又不会频繁停机。
软限位也一定要设。它不依赖硬件开关,在PLC或轴参数里配置的坐标边界。伺服/PROFINET的定位控制系统,一旦回零基准建立,软限位非常可靠。我在每个轴上都会设定两个软限位,一个给报警,一个给停止。千万别只靠硬限位,硬限位是最后防线,不是常规制动手段。
5.3 给维护人员留点“看得到”的状态位
调试完成后设备交给维护人员,程序的可用性就很重要。我习惯在程序里解析V90状态字,把以下信号做成全局标签,直接给HMI和诊断画面使用:
- 轴使能状态
- 轴运行中状态
- 轴定位完成状态
- 轴故障状态及故障代码
- 当前实际位置和实际速度
- 当前是否处于手动/自动模式
实际维护过程中,维修人员看到HMI上显示“轴故障代码F7450”,比翻图纸找IO灯的效率高太多。如果项目很大,还可以在PLC里做一个故障时间戳记录,方便事后分析。
我在现场的习惯是:每个轴标签都命名得“自解释”,比如“Axis1_Ready”“Axis1_FaultCode”,不要偷懒用DB1.DBW20这种晦涩的名字。不然过了两个月,连自己都忘了哪个DB字节对应哪个轴,更别提交接给维护同事了。
5.4 对照一个典型单轴流程复盘
一串下来容易散,我以一个典型的“上料定位”单轴动作复盘整个流程。假设机械行程1000mm,丝杠导程10mm,原点开关在负极限附近。
动作流程:
- 上电,PLC完成自检。
- 检查轴状态字是否就绪,就绪后置位EnableAxis。
- 检查是否已回零,未回零则触发回零模式。回零完成后记录原点坐标。
- 自动模式收到启动信号后,按设定速度执行绝对定位,例如走到800mm位置。
- 到达后,伺服状态字中的“目标位置到达”位为真,PLC输出到位信号给后续机构执行夹紧、下料等动作。
- 每个循环结束后更新HMI上的实际位置、循环计数。
这个流程里,每一步都用到了前面聊到的内容:设备名称和报文配置、使能、回零、单位设置、互锁、状态字解析。把这些都按规范做好,设备运行会很稳定,调试和后期维护的痛苦会大大减少。
最后,我再分享一点实际感受:这套S7-1500与V90 PN的组合,做到稳定定位控制并不是什么高不可攀的绝技,但也不是“组个态写个FB就能跑”那么简单。真正决定项目成败的,往往是对单位换算、回零逻辑、使能时序、机械动态这些细节的处理。把这些基本功做扎实,往后再经过多几个项目的反复验证,你再看这类总线伺服项目,大概就不会再有陌生感了。