接手这个项目的时候,我最初也以为是个常规的位置控制场景——S7-1200带伺服,十有八九都是发脉冲做定位。但客户需求是给一条改装的输送线做平稳调速,要的是连续运转、速度可调、启停干脆利落,对定位精度没有硬性要求。这种工况下继续用位置模式反而是给自己找麻烦,速度模式才是更对路的方案。这篇文章把我从硬件选型、端子接线、驱动参数设置到博途编程、上电调试的完整过程捋一遍,顺便把我在现场踩过的几个坑也写出来,给正在做类似项目的朋友做个参考。
1. 选型思路:为什么S7-1200和SV660P用速度模式更合适
1.1 项目需求拆解
这条输送线原来的驱动是老式异步电机加变频器,客户反映低速段扭矩不够、启动冲击大,而且电机响应慢,启停时机很难和前端设备同步。改造目标很明确:用伺服替换异步电机,实现0-1500rpm范围内平滑调速,启动停止要快但不能有冲击,绞进设备或者急停时能快速切断力矩。
拆解下来,真正需要的不是位置闭环,而是速度闭环。伺服驱动器的速度环可以帮助设定转速稳定运行,不依赖上位机做复杂的运动规划;S7-1200只负责给出速度指令和启停逻辑,整个系统的实时性压力可控,编程量也小很多。这个场景如果硬要做成位置模式加电子齿轮,反而要处理回零、限位、加减速曲线等一系列问题,属于杀鸡用了牛刀。
1.2 硬件清单与选型理由
实际配置如下:
| 设备 | 型号规格 | 用途说明 |
|---|---|---|
| PLC | 西门子S7-1200 CPU 1214C DC/DC/DC | 主控制器,处理启停逻辑、速度给定、故障复位 |
| 模拟量输出模块 | 西门子SM1232 AQ 1x14bit | 输出0-10V电压信号作为伺服速度给定 |
| 伺服驱动器 | 汇川SV660P | 驱动伺服电机,工作在速度模式 |
| 伺服电机 | 汇川ISMH系列配套电机 | 替换原异步电机,带增量编码器 |
| 开关电源 | 明纬24V/5A | 给PLC输出侧、伺服控制端子供电 |
| 断路器、接触器、滤波器 | 施耐德/正泰 | 主回路保护与滤波 |
| 调试软件 | 博途TIA V15.1、汇川InoDriverShop | PLC编程与伺服参数配置 |
S7-1200标准型CPU本身不带模拟量输出通道,所以单独加了一块SM1232。这里有个细节:如果选CPU 1212C或者1214C时板载只有数字量输入输出,确实没有模拟量;但新版的S7-1200系列有些型号带AQ,选型时要注意看订货号后缀。我们为了稳妥,直接用SM1232 1x14bit,一路通道足够用,分辨率14位对应0-27648数字量。
1.3 为什么用模拟量给速而不是通信给速
伺服给速度指令的方式有几种:通过Modbus通信写入速度寄存器、通过内部多段速端子切换、通过模拟量输入给定。我见过不少工程师一上来就选Modbus RTU,觉得接线少、抗干扰。但Modbus通信在S7-1200上要通过CM1241 RS485模块或者第三方网关,还要在PLC里写轮询逻辑,实时性和稳定性依赖通信周期,现场偶尔出现一帧超时,伺服就会抖一下,排查起来非常痛苦。
模拟量给速的好处是实时、直观、不依赖通信协议。PLC把速度值线性换算成0-10V电压,SV660P的AI1端子直接接收,驱动器内部做AD转换后作为速度给定值。这个链路简单可靠,即使PLC程序扫描周期有几十毫秒的波动,模拟量信号本身是连续的,不会出现跳变。而且用万用表或者示波器一量就知道给没给上,对现场调试特别友好。
2. 接线全解:主回路、控制回路与屏蔽地线处理
2.1 主回路接线:相序和电源一个都不能错
伺服驱动器对主回路接线比变频器敏感得多,上电前必须反复核对。SV660P主回路有L1、L2、L3三个电源端子,支持单相220V和三相220V两种供电方式。我们现场配的是三相220V(通过隔离变压器从380V转下来),所以L1、L2、L3都要接入。
电机动力线是U、V、W三个端子,接伺服电机对应的UVW,绝对不能错相。伺服电机的UVW相序错误,通电后电机会剧烈抖动或者直接报警过流。另外编码器线要用原装屏蔽线,插头必须插到位、锁紧螺丝拧紧,很多现场故障就是编码器插头松动导致的。
主回路还有一个容易忽略的点:直流母线的P+和DCL之间要接制动电阻。输送线带着负载突然停机时,电机从运行状态切换到停止,动能会通过逆变器回馈到母线电容上,如果没有制动电阻吸收,母线电压会飙升触发过压报警。
2.2 控制回路:使能、运行、故障反馈与模拟量输入
SV660P的CN1控制端子定义要在手册里查清楚,不同功率段端子号有差异,但常用功能是固定的。速度模式下必须接的几路信号:
- DI1:伺服使能,也叫SON信号。这一路是高电平有效,给上去之后驱动器才允许输出力矩。
- DI2:运行信号,我们把它定义为正向运行。要和使能分开,防止一上电就跑。
- DI3:故障复位信号,清除驱动器报警用。
- DO1:报警输出,接到PLC输入点。SV660P报警时DO1继电器会断开,PLC通过常闭触点的状态变化捕获报警。
- AI1+/AI1-:模拟量速度给定输入,接PLC模拟量输出模块的正负端。SV660P的AI1支持0-10V,也可以设置成-10V到+10V,我们只用正向调速,所以选0-10V。
控制端子需要用开关电源单独供电,不要和主回路共用一个电源。我一般习惯24V+接COM+,COM-接0V,所有DI端子的公共端都回到同一个源。这里特别提醒:若PLC和驱动器没有共地,模拟量信号在AI1-和PLC侧M端之间会有电位差,导致速度漂移,所以要在PLC模拟量输出模块的M端和SV660P的GND之间做等电位连接。
2.3 屏蔽与接地的三个要点
伺服系统调试中,很多莫名其妙的问题其实都是接地和屏蔽没做好。我总结了三个必须遵守的原则:
第一,模拟量信号线必须用双绞屏蔽电缆。SM1232到SV660P之间的模拟量线虽然距离只有一两米,但伺服动力线在旁边,动力线里的高频PWM分量很容易耦合进来。
第二,屏蔽层采用单端接地。把靠近PLC这一端的屏蔽层剥出来接到机柜接地排,靠近伺服那一端悬空不接。两端都接地容易形成地环路,反而引入共模干扰。
第三,伺服驱动器的PE端子必须独立接地,接地电阻小于4欧姆。不要和变频器、大功率电机的PE串在一个接地线上,否则伺服逆变时的高频漏电流会通过地线干扰编码器信号。
3. SV660P参数设置:让驱动器进入速度模式并正确响应外部指令
3.1 恢复出厂设置,从头配置
新拿到的SV660P,我建议先做一次恢复出厂,把历史配置清干净。通过面板操作或者InoDriverShop软件都行:在软件里连接驱动器,读取当前参数,执行“恢复出厂设置”或者“参数初始化”,等待驱动器自动重启。这个动作能避免上一手调试留下的修改项干扰判断。
恢复出厂后先确认驱动器固件版本,同时给电机设对功率、额定电流这些基本参数。正常情况下SV660P自动识别配套电机,但如果电机和驱动器不是一套买的,就要手动核对参数,这里出错的概率不小。
3.2 速度模式核心参数
SV660P的参数很多,但速度模式真正要动的核心参数就那么几个。我把自己用的关键项列出来:
| 参数名称 | 设置值 | 功能说明 |
|---|---|---|
| 控制模式选择 | 速度模式 | 让驱动器工作在速度闭环 |
| 速度指令源 | 外部模拟量(AI1) | 速度给定来自AI1端子电压 |
| 最大速度限制 | 3000r/min | 防止异常指令导致飞车 |
| 加速时间常数 | 0.5-2s,根据负载调整 | 限制速度阶跃时的冲击 |
| 减速时间常数 | 0.5-2s | 限制停机时的冲击 |
| DI1端子功能 | 伺服使能 | 使能信号输入端 |
| DI2端子功能 | 正向运行 | 运行允许信号 |
| DI3端子功能 | 故障复位 | 报警清除信号 |
| DO1端子功能 | 报警输出 | 报警反馈信号 |
| 速度环增益 | 先留默认,调试时微调 | 影响响应速度 |
| 速度环积分时间 | 先留默认,调试时微调 | 影响稳态精度 |
参数编号在不同固件版本里会有细微变化,所以我更建议在InoDriverShop里直接搜索参数中文名,而不是死记编号。设置完参数后要执行“参数保存”,很多初学者改完参数直接断电,结果参数没写入掉电保存区,白忙一场。
3.3 DI/DO端子功能分配
SV660P的DI端子默认功能不一定就是我们要的,必须手动分配。InoDriverShop里有专门的“输入输出配置”界面,通道列表对应CN1端子的DI1到DI5,每个端子可以下拉选择功能码。我把DI1设为“伺服使能”,DI2设为“正向运行”,DI3设为“故障复位”。注意有些固件版本里“正向运行”和“负向运行”是分开的,不支持双向反转的设备只选正向就行。
DO端子我选了DO1作为报警输出,输出逻辑设成“报警时常闭断开”。这样接线即使断线,PLC也能检测到异常,因为断线和报警表现一致,都是信号丢失。
3.4 用InoDriverShop验证电机运转
参数配置完成后,不要急着接PLC,先单独验证SV660P自身能不能正常转。InoDriverShop里有“试运行”功能,选择速度模式,手动给定一个转速比如300rpm,点使能和运行,电机应该平稳转起来,电流正常、无异响。
这个步骤等于把系统拆成两半单测,先证明伺服部分没问题,再接PLC联调。我在现场见过无数人跳过单测直接联调,出了问题一会儿怀疑PLC程序、一会儿怀疑参数,浪费时间。单独验证大概五分钟就能做完,性价比极高。
4. TIA Portal编程:S7-1200的速度给定与启停控制逻辑
4.1 硬件组态与I/O地址规划
博途里新建项目,添加CPU 1214C DC/DC/DC,再添加SM1232模拟量输出模块。SM1232的通道地址由系统自动分配,正常情况第一路模拟量输出地址是QW64。但地址不是绝对的,要打开PLC变量表确认SM1232实际分配的起始地址。我们这个项目因为CPU后面还挂了一个数字量模块,模拟量输出地址被挤到了QW80,如果直接用默认地址就会写错通道。
I/O地址规划表:
| 地址 | 信号名称 | 方向 | 说明 |
|---|---|---|---|
| I0.0 | 急停按钮 | 输入 | 常闭触点,断开即急停 |
| I0.1 | 启动按钮 | 输入 | 常开触点,上升沿启动 |
| I0.2 | 停止按钮 | 输入 | 常开触点,按下停止 |
| I0.3 | 伺服报警反馈 | 输入 | 接SV660P DO1 |
| Q0.0 | 伺服使能输出 | 输出 | 接SV660P DI1 |
| Q0.1 | 伺服运行输出 | 输出 | 接SV660P DI2 |
| Q0.2 | 故障复位输出 | 输出 | 接SV660P DI3 |
| QW80 | 模拟量速度给定 | 输出 | 接SV660P AI1 |
| Q0.3 | 运行指示灯 | 输出 | 面板指示 |
4.2 速度给定值的换算与模拟量输出处理
SM1232的输出范围是0-10V,对应数字量0-27648。而SV660P的模拟量输入0-10V对应转速0-3000rpm(默认最大速度)。所以要把界面上的设定转速转换为QW80的整数值,公式就是:
QW80 = 设定转速 / 3000 × 27648
举个例子,需要电机跑到1200rpm,那么QW80 = 1200 / 3000 × 27648 ≈ 11059。用LReal浮点数计算,最后转成Int写到QW80。这里有个关键细节:直接把浮点数转INT时要注意四舍五入和上限限制,防止出现超过27648的值。如果只用到1500rpm,也要在程序里做限幅,防止调试时输入一个大值导致模拟量输出超量程。
SCL换算代码片段:
#SpeedRaw := REAL_TO_INT((#SetRPM / 3000.0) * 27648.0); IF #SpeedRaw > 27648 THEN #SpeedRaw := 27648; ELSIF #SpeedRaw < 0 THEN #SpeedRaw := 0; END_IF; "QW80" := #SpeedRaw;4.3 使能、运行、故障复位逻辑
控制逻辑看起来简单,但要在细节上做好互锁。我的思路是启停和报警分成多个状态量,最终输出Q0.0和Q0.1之前做条件与判断。
关键逻辑点:
急停必须使用常闭触点。I0.0没有按下时为TRUE,程序继续执行;一旦急停断开,立即断开使能和运行。这个必须在硬件层和程序层双重保护,不能只靠软件。
伺服使能要先于运行信号。启停逻辑里,启动按钮按下后先置位Q0.0,延时100-200ms之后再置位Q0.1。为什么?SV660P使能瞬间要建立励磁和速度环,如果同时给运行信号,电机可能因为给定突变产生冲击。反过来,停止时先断运行、再断使能,也要有间隔。
故障复位需要延时保持。SV660P复位信号最少要保持几十毫秒才能被识别,PLC输出脉宽太短会导致复位无效。我习惯的做法是:报警上升沿触发复位输出,用TON定时器保持500ms,然后自动复位Q0.2。
速度给定和使能信号的时序:最好让模拟量先输出一个较小值,再给使能和运行。我调试时遇到过一种情况:模拟量模块上电瞬间输出一个随机值,如果这时候伺服正好使能,电机会猛地窜一下。解决方法是程序启动后先把QW80清零,等PLC扫描几个周期后再允许正常输出。更保险的方案是在模拟量输出硬件组态里把初始化行为设置为输出0。
核心程序用SCL写在一个FB里,接口变量清晰:
// 输入 #Start : BOOL; #Stop : BOOL; #EStop : BOOL; #AlarmFB : BOOL; #SetRPM : REAL; // HMI设定值 #FaultReset : BOOL; // 输出 #EnableOut : BOOL; #RunOut : BOOL; #FaultOut : BOOL; IF NOT #EStop THEN // 急停触发,全部断开 #EnableOut := FALSE; #RunOut := FALSE; ELSIF #FaultReset THEN // 故障复位动作 ; ELSE IF #Start AND NOT #AlarmFB THEN #EnableOut := TRUE; ELSIF #Stop THEN #EnableOut := FALSE; #RunOut := FALSE; END_IF; IF #EnableOut AND #StartDelayOut THEN #RunOut := TRUE; END_IF; END_IF;实际项目中建议把每段逻辑拆成独立的Network,方便后续维护和监控。不要在一个Network里写一长串,现场排查问题时会很痛苦。
4.4 HMI辅助调试建议
如果项目配了西门子HMI,我会在画面上放几个调试用的元素:设定转速输入框、实际转速显示、伺服报警状态灯、使能和运行的按钮。实际转速可以通过SV660P的Modbus寄存器读回来,也可以先用InoDriverShop的监控代替。
没有HMI也没关系,在博途里用“监控表”直接强制QW80的值就可以测试,只是不太直观。我个人还是推荐临时挂一个KTP400触摸屏,调试效率能高很多。
5. 上电调试流程与联动验证
5.1 上电前的静态检查清单
这一步花十分钟,能省下半天找故障的时间。我的检查顺序:
- 万用表测主回路L1/L2/L3之间是否短路,测U/V/W对地是否短路,确认动力线没有破皮。
- 确认编码器线插头已经锁紧,屏蔽层接好。
- 确认控制端子接线和图纸一致,用万用表通断档逐一量DI1、DI2、DI3对应到PLC输出点的连续性。
- 测量SM1232的输出端子,上电后应为0V,禁止在通电状态下插拔模拟量线。
- 确认24V开关电源电压正常,负载端没有短路。
5.2 无负载状态下的速度闭环验证
先把电机和负载脱开,确认机械侧没有卡阻和干涉。此时可以进行无负载试运行:
- 伺服断电,手动盘电机,确认转动顺畅;
- 伺服上电,确认面板无报警;
- InoDriverShop设置为试运行,手动给定300 rpm,确认方向正确、运行平稳;
- 切到PLC控制,HMI设定500 rpm,按下启动,观察速度是否稳定、Q0.0/Q0.1指示灯是否正确;
- 缓慢上调速度到1500 rpm,确认整个线性段都平稳。
无负载调试的关键是确认速度给定换算正确。我习惯用万用表量SM1232输出电压,500rpm对应约1.67V,如果量出来电压不对,优先检查QW80值是不是被程序改过、SM1232组态输出范围是否正确。
5.3 带负载后的加减速与稳定性调整
无负载跑通了,不代表带上负载还能如此。输送带和减速机联上之后,负载惯量可能是电机转子惯量的好几倍,这时速度环增益如果太高,电机会发出嗡嗡声;太低则速度跟踪慢、加减速抖动。
带负载后主要观察两个指标:启动时是否有冲击、停车时是否有过冲。如果有冲击,把加速时间常数和减速时间常数加大;如果速度波动大,微调速度环增益和积分时间。SV660P的自动增益功能对新手比较友好,可以先执行一遍“在线自整定”,看看效果,再手动精调,会加快收敛速度。
6. 实际调试中踩过的五个坑与解决办法
6.1 模拟量共地与信号漂移
第一次联调时,我发现设定800rpm,电机实际却慢慢从800涨到850rpm,速度就是稳不住。起初怀疑伺服参数,后来用万用表量AI1端子的电压,发现电压在3.2V到3.4V之间跳动,说明干扰进来了。原因是我把SM1232的M端和SV660P的GND之间隔了好几十厘米,地电位有差异,杂散电流在模拟量回路里形成了压降。
解决方法是把SM1232模块的MANA端子和SV660P的GND用一根较粗的线直接连接,让模拟量信号的参考地完全一致。接完后再量,电压稳定在2.67V左右,对应800rpm,问题消失。这个坑非常隐蔽,因为干扰不一定会导致大故障,但会表现为“速度走动”“停不准”。
6.2 伺服报警:编码器断线、过压与过流
调试中遇到最多的报警是编码器断线和母线过压,各有各的原因。编码器断线通常不是线真的断了,而是插头接触不良或者编码器线受弯折导致信号偶发丢失。检查时先拔插编码器插头,清理针脚氧化层,再检查线缆有没有被机架压住。母线过压常出现在高速急停时,确认制动电阻接线、阻值和功率匹配。
SV660P面板会直接显示报警代码,比如A01、A05、A12等。遇到报警不要慌,第一步查手册确认代码含义,第二步看报警时刻的母线电压、电流、温度等记录,第三步结合现场工况判断是外部原因还是伺服本身问题。切忌一上来就改参数乱试。
6.3 电机爬行或震荡
低速段爬行和高速段震荡是速度环没调好的典型表现。低速爬行时,速度环增益偏低或摩擦力矩影响较大,SV660P的“摩擦补偿”可以缓解,但更根本的是看机械装配有没有拖死、联轴器有没有偏心。高速震荡则多半是速度环增益过高,或者编码器信号受干扰,先降增益,再看波形。
6.4 急停后伺服使能残留引起的误动作
这个坑是我在客户现场踩的:急停按下后,程序逻辑上断开使能,但SV660P的使能端子还维持着高电平,因为PLC输出点Q0.0的状态是线圈输出,没有在硬件回路里串急停触点。结果就是按下急停后电机虽然停了,但伺服并没有真正掉使能,一旦故障复位或者程序复位,电机立刻再次上电运行,非常危险。
正确的做法是在伺服使能回路里串联急停继电器的常闭触点,硬件上直接切断使能信号,不依赖PLC程序。PLC中断使能只是软件层的第二道保护。这个改动之后,急停的响应时间从PLC扫描周期级别缩短到继电器释放时间级别,安全冗余提高了一个量级。
6.5 转速达不到设定值
调到最后发现1500rpm的设定值,电机只能跑到1460rpm左右,而且随着负载增加偏差还会变大。首先排查是不是速度上限参数被设低了,SV660P里最大转速限制如果只有1500rpm对应的电压是满量程的90%多,当然跑不到。再者确认模拟量满量程校准是否准确,10V对应的是不是3000rpm。如果前面都没问题,就要看电机侧供电能力,尤其是电源容量不足导致母线电压跌落,伺服会限制输出扭矩,表现为高速区转速上不去。
排查的顺序是从参数校准到硬件容量,不要先怀疑电机坏了。我用InoDriverShop里速度环误差监控看到转速误差值和给定电压的关系,很快就锁定是速度上限参数的问题,改掉参数后转速立刻到位。
7. 个人经验小结
这套S7-1200加SV660P的速度模式方案,从接线到跑通整个流程,最核心的收获不是某个参数怎么设,而是调试顺序不能乱:先接完线单独验证伺服,再用InoDriverShop确认参数,最后才进PLC联调。每一步都有明确的验证手段,不要跳步。
模拟量给速虽然看起来不如通信给速“高级”,但在速度模式下它反而是最稳、最直观的方案。PLC程序里把速度换算写清楚,接线时做好共地和屏蔽,整个系统运行时几乎不需要额外维护。
如果后续要扩展,可以在SV660P上加Modbus通信读取实际转速和电流,在PLC里做趋势记录和预警,这样输送线的运行状态就能远程监控了。不过这些都是锦上添花,先把基本的启停、调速、报警捋顺了,这套系统已经能稳稳扛住绝大部分调速场景。