ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

西门子S7-1200与汇川伺服通信控制:脉冲、Modbus与PROFINET实战

西门子S7-1200与汇川伺服通信控制:脉冲、Modbus与PROFINET实战 上个月帮朋友调一台贴标机控制柜里躺着一块 S7-1200 CPU 1214C旁边两台汇川 SV660P 伺服机械那边等着出活。他原来的方案是脉冲加方向线接好了、程序也写了电机就是不转面板不报警PLC 侧 Q 点也在闪。折腾了一个下午问题出在 24V 单端脉冲输入没串限流电阻光耦根本没被点亮。这个场景我遇过太多次西门子 CPU 与汇川伺服通信与控制这条路难点从来不在能不能通而在选哪条链路、两边参数怎么对表、出问题时从哪一层下手。这篇内容我按自己的工程习惯拆开讲从脉冲加方向、RS485 上的 Modbus RTU、到 PROFINET 总线和网关转换再到 PLC 侧的运动控制程序骨架、现场排查链路、节拍与整定。适合刚接触运动控制的新手看整体轮廓也适合做过几台设备、想把细节做扎实的同行直接抄配置思路。里面涉及的参数地址和指令名我会标注哪些属于手册为准避免你照着套用型号不对的驱动。1. 先把链路想清楚西门子 CPU 带汇川伺服的几条现实路径1.1 需求拆解先于选型很多人一上来就问用哪个通信方式最好这个问题没有答案因为最好取决于你要伺服干什么。先把自己的需求拆成四问轴数几根、控制方式是位置还是速度还是转矩、定位精度和节拍要求多少、有没有位置回读和诊断需求。单轴、点位定位、节拍宽松的场合脉冲加方向最省事接线直观、调试手段多。三轴以上、需要实时读位置、要在 HMI 上显示跟随误差和报警码的场合脉冲方式会迅速变成噩梦——PLC 的高速输出点就那么几个线束一多干扰跟着来而且你拿不到电机的实时状态出了问题只能靠猜。需要多轴插补、电子凸轮、飞剪这类同步工艺的只能走总线。还有一个容易被忽略的维度谁来负责位置环和插补。脉冲方案里PLC 只负责发脉冲位置环在驱动器内部闭合PROFINET 报文 5 的位置模式下PLC 每周期发一个位置插补点驱动器内部再做细插补。这两种分工决定了你的 PLC 扫描周期对定位精度的影响程度完全不同。1.2 三条路径的能力边界对照路径硬件成本轴数上限实时性诊断能力典型场景脉冲加方向最低本体 Q 点即可受高速输出点限制一般 3~4 轴取决于脉冲频率弱只能读报警输出单轴点位、简单送料RS485 Modbus RTU低一个通信模块理论 32 站实际受轮询周期限制10~100 ms 级中能读状态字和实际位置多轴低速联动、改造项目PROFINET / 网关高需总线伺服或网关受网络规模限制1~8 ms 级强过程数据实时可见多轴同步、产线集成这张表里最值得盯的是实时性这一列。Modbus RTU 是问答式主从结构PLC 发一条请求、等驱动器回一条同一时刻只能有一条报文在路上。你要读 6 台伺服的状态字加位置还要求 20 ms 刷新一次算下来每条请求加等待的时间余额只有 3 ms 左右115200 波特率下勉强够但也危险。这个账必须先算不然后期优化会很难受。1.3 两个容易被忽略的隐性成本第一个是调试工具成本。脉冲方案你至少需要一台示波器或者能测 100 kHz 以上的计数器靠肉眼看 PLC 的 Q 点指示灯判断脉冲有没有发出去是没用的——指示灯刷新周期是毫秒级100 kHz 的脉冲在它眼里就是常亮。这个坑我在新手身上见过很多次看到灯亮就认为脉冲正常实际上一个脉冲都没发。第二个是型号选型成本。S7-1200 的继电器输出型 CPU比如 AC/DC/RLY本体做不了 PTO 高速脉冲输出必须加信号板比如 SB1222 这类 200 kHz 的 PTO 信号板或者干脆换成 DC/DC/DC 型号。很多项目在采购阶段就把这一步漏了柜子装好才发现要补货。买 CPU 之前先把要不要高速输出这件事确认掉。2. 脉冲加方向方案电子齿轮比算错后面全白干2.1 接线与电平匹配的几个硬性细节S7-1200 的 PTO 输出在 DC/DC/DC 型号上是 Q0.0 到 Q0.3本体最高 100 kHz换成 PTO 信号板可以到 200 kHz。汇川伺服这一侧脉冲输入通常支持两种接法5V 差分线驱动和 24V 单端集电极开路。5V 差分接法抗干扰好、频率上限高是首选但要求 PLC 侧输出的是差分信号信号板通常支持普通本体 Q 点输出的是 24V 单端。走 24V 单端时脉冲和方向信号线上一般要串限流电阻常见 2kΩ 左右具体阻值看驱动器手册而且最高响应频率会打折。这就是我开头说的那个坑不串电阻光耦电流不对伺服看着有信号但不动作。注意脉冲信号线和伺服的动力线U/V/W绝对不要走同一个线槽也不要捆在一起。动力线缆的 dv/dt 干扰足以让脉冲计数多计或漏计表现为定位偶尔偏一点非常难查。方向信号的建立时间也要留意。PLC 侧切换方向后驱动器需要一段建立时间才认这个方向程序里换向时最好留一点延时或者保证先停后换向不要在运动中直接翻转方向输出。2.2 电子齿轮比的推导与脉冲当量计算这是脉冲方案的核心也是错误率最高的一步。汇川伺服的思路是驱动器内部位置环用的是编码器分辨率级的单位你从外面发的脉冲要被放大或缩小到内部单位靠的就是电子齿轮比。参数组里一般有电子齿轮比分子和电子齿轮比分母两个参数不同系列分组号不一样以手册为准计算关系是电子齿轮比 (编码器分辨率 × 4) / 电机旋转一圈所需的指令脉冲数拿 17 位编码器举例131072 线四倍频后是 524288 个内部计数。如果你希望上位机发 8192 个脉冲电机就转一整圈那么分子 / 分母 524288 / 8192 64 / 1分子填 64分母填 1整除没有任何舍入误差再看脉冲当量。假设丝杠导程 10 mm脉冲当量 10 mm / 8192 0.00122 mm约 1.22 微米如果你非要凑一个好记的 10000 脉冲每转算一下 524288 / 10000 52.4288根本除不尽。分子分母只能填整数四舍五入之后每转就带了大约 0.0014% 的偏差转得越久累计误差越大做长行程定位时这个偏差会实实在在地显出来。我的习惯是反过来推先算出编码器分辨率的约束再挑一个能整除的指令脉冲数而不是先定脉冲数再硬凑齿轮比。2.3 S7-1200 侧工艺对象的参数对表PLC 这边配工艺对象 TO_PositioningAxis 的时候要填两组参数必须和伺服侧严格一致机械参数里的每转脉冲数填 8192对应驱动器那边的一转指令脉冲数每转负载位移填 10 mm对应丝杠导程这两项填对之后你在程序里调用 MC_MoveAbsolute位置参数单位就自动变成了毫米不用自己换算。反过来如果 PLC 侧填的是默认值而伺服侧改过齿轮比就会出现程序里写 100 mm实际走了 3.2 mm这种偏差而且偏差比例还算不出来因为两边基准都不一样。组态时还要设软限位、硬件限位开关输入、回零方式、以及速度加减速的默认值。这些细节我放到第 5 节讲程序骨架的时候一起说。3. Modbus RTU 走 RS485把 CiA402 状态机搬进 PLC3.1 硬件与主站指令库的选择Modbus RTU 这条路的最大优势是便宜和通用。S7-1200 加一个 CM1241 RS422/485 通信模块或者 CB1241 通信板就能当主站S7-1500 用 CM PtP 模块配合 MODBUS(RTU) 指令。汇川伺服基本都带 RS485 接口支持 Modbus RTU 从站。配置顺序是这样先在驱动器参数里设从站号、波特率、数据格式常见 8N1 或 8E1、通信协议选 Modbus RTU再把位置指令来源或速度指令来源改成通信给定。最后一步最容易被忘——参数设好了但指令来源还是端子控制PLC 写多少数据伺服都不理你。PLC 侧用 MB_COMM_LOAD 初始化端口用 MB_MASTER 发请求。这两个指令的细节值得强调MB_COMM_LOAD 只在首次扫描时触发一次端口参数波特率、校验、停止位必须和驱动器完全一致MB_MASTER 的 REQ 引脚不能用周期位一直触发必须等 DONE 或 ERROR 置位之后复位 REQ再发下一条同一时刻只能有一条 MB_MASTER 实例在执行多站轮询要靠程序排队不能让两个实例同时工作3.2 对象字典到寄存器地址的映射汇川伺服遵循 CiA402 协议Modbus 侧的地址大多直接对应对象字典索引。下面这张表是我在实际项目里常用的映射关系不同系列可能有偏移或者用 H 组参数形式表示务必以对应型号的通信手册为准功能索引读/写说明控制字0x6040写使能、启动、复位都靠它状态字0x6041读低四位表示状态机所处状态运行模式0x6060写1PP 位置3PV 速度6回零运行模式显示0x6061读回读当前生效的模式目标位置0x607A写PP 模式的目标位置位置实际值0x6064读最常用的反馈量目标速度0x60FF写PV 模式的速度给定速度实际值0x606C读用于判断是否到位回零方法0x6098写选择回零方式编号原点偏置0x607C写回零后的零点补偿3.3 使能时序控制字是一个状态机不是开关新手最容易犯的错是把控制字当成一个使能位——置 1 就转置 0 就停。实际上 CiA402 的控制字驱动的是一个状态机必须按顺序走控制字写入值含义状态字期望值0x0006Shutdown进入准备开机0x00210x0007Switch On进入已开机0x00230x000FEnable Operation运行使能0x00270x001F置位 bit4触发新位置指令按 PP 模式动作0x0080bit7 上升沿复位故障回到 0x0021 附近写 0x0006 之后要等状态字变成 0x0021再写 0x0007等 0x0023最后写 0x000F 等 0x0027。整个过程要写在状态机里循环判断不能一口气连写三个值——驱动器没跟上后面写进去的值会被忽略伺服就一直不动。PP 位置模式还有一个细节写目标位置和触发指令是两步。先把目标位置写进 0x607A再把控制字从 0x000F 改成 0x001Fbit4 上升沿伺服才开始走。走完再把 bit4 清掉回 0x000F为下一次做准备。我见过有人只写位置不置 bit4然后怪伺服没响应。3.4 轮询节拍怎么排才不拖后腿Modbus 是串行问答轮询策略直接决定系统响应速度。我的做法是按重要性分级高频组状态字 0x6041每 10 ms 读一次用来判断是否到位、是否有报警中频组位置实际值 0x6064每 50 ms 读一次够 HMI 显示了低频组速度实际值、电流、温度这类辅助量每 200 ms 甚至 500 ms 读一次另外如果多个寄存器地址是连续的能用 0x03 一次读多个就别拆成多次单寄存器读。一次读 10 个寄存器的报文长度和一次读 1 个差不了多少但省下来的等待时间很可观。这条优化在多站轮询里效果立竿见影。注意站数越多、波特率越低轮询总周期就越长。6 台伺服用 19200 波特率做 10 ms 刷新物理上做不到。要么提波特率要么降低刷新要求要么改用总线。这个账要在方案阶段算清楚别指望后期调程序能解决物理带宽问题。4. 走总线PROFINET 报文与工艺对象的配合4.1 GSDML 导入与设备命名如果伺服支持 PROFINET或者用了一个 PROFINET 转 EtherCAT/CANopen 的网关第一步是在 TIA 里导入厂商提供的 GSDML 文件然后从硬件目录里把设备拖到网络上。设备名和 IP 分配是这一步的关键。PROFINET 靠设备名Device Name识别从站不是靠 IP 也不是靠插槽位置。用在线访问里的分配设备名功能把每个从站的名字写成和组态里一致的字符串再分配 IP。设备名不一致PLC 会报找不到设备但网络连接状态可能是正常的容易误判。调试期我建议把设备名做成有意义的形式比如 drive-01、drive-02而不是默认的空值。一旦产线上有十台设备默认名会让你在现场完全不知道自己在改哪一台。4.2 PROFIdrive 标准报文怎么选汇川支持 PROFINET 的驱动器或者网关映射出来的接口通常按 PROFIdrive 标准报文组织过程数据。常用报文对照如下报文号过程数据结构适用场合1STW1 / ZSW1速度给定走参数通道实时性差2STW1, ZSW1, NSOLL_B, NIST_B速度模式16 位速度分辨率3STW1, ZSW1, NSOLL_A, NIST_A速度模式32 位分辨率最常用5STW1, ZSW1, NSOLL_B, NIST_B, XSOLL_A, XIST_A位置模式PLC 发位置插补点102/105位置模式加扭矩或安全功能需要扭矩前馈或安全功能的工艺STW1 是控制字、ZSW1 是状态字NSOLL_A 和 NIST_A 是速度给定与反馈XSOLL_A 和 XIST_A 是位置给定与反馈。选报文的原则很简单需要位置控制就选带 XSOLL/XIST 的比如报文 5只要速度控制就选报文 3过程数据短、周期更短。S7-1200 支持 PROFINET RT最小更新时间 1 ms实际项目里用 2 ms 或 4 ms 更稳。S7-1500 支持等时同步模式IRT多轴同步要求高的场合才用得上。这里有个认知要先建立PLC 发的是插补点不是位置环的每一个增量。驱动器内部的细插补和位置环周期通常在 125 μs 到 1 ms 之间PLC 4 ms 发一次点定位精度依然能保证但多轴同步插补的相位差就会明显偏大。4.3 伺服只有 EtherCAT 口怎么办这是最常见的组合手里是 S7-1200/1500只有 PROFINET伺服是 EtherCAT 型比如汇川 SV660N 这类。解决办法是加一个 PROFINET 转 EtherCAT 的网关PLC 侧按网关的 GSDML 组态网关另一侧当 EtherCAT 主站带伺服。这种方案要关注三件事网关的过程数据映射表哪个字节对应控制字、哪个对应目标位置、网关自身的更新时间、以及网关对周期性位置指令的支持程度。映射表错了表现是状态字读得到但位置指令发不下去排查时先对照网关手册逐字节核对。另一种分工思路是既然现场已经有汇川的 EtherCAT 主站控制器让它负责轴的运动控制西门子 CPU 只负责逻辑和整线调度两者之间用 Modbus TCP 或 PROFINET 交换指令和状态。这个架构的优点是各管一摊、边界清楚缺点是跨控制器的指令传递会带来一个通信周期的延迟做高节拍联动时要评估这个延迟能不能接受。5. PLC 程序的运动控制骨架5.1 状态机加指令调用顺序运动控制程序最忌讳写成一堆 IF 嵌套。我习惯用 CASE 状态机加枚举一层一层推进。下面是一段简化的 SCL 骨架思路可以直接套// 轴控制状态机SCL 片段示意结构 CASE #iStep OF 0: // 上电初始化等待系统就绪 #xPowerEnable : FALSE; IF #xSystemReady THEN #iStep : 10; END_IF; 10: // 轴使能 #xPowerEnable : TRUE; #MC_Power(Axis : #Axis, Enable : #xPowerEnable, StopMode : 0, Status #xPowerStatus, Error #xPowerError); IF #xPowerStatus THEN #iStep : 20; ELSIF #xPowerError THEN #iStep : 900; END_IF; 20: // 回零 #MC_Home(Axis : #Axis, Execute : #xHomeTrig, Position : 0.0, Mode : 3, Done #xHomeDone, Error #xHomeError); IF #xHomeDone THEN #iStep : 30; END_IF; 30: // 定位 #MC_MoveAbsolute(Axis : #Axis, Execute : #xMoveTrig, Position : #rTargetPos, Velocity : #rVelocity, Acceleration : #rAccel, Deceleration : #rDecel, Done #xMoveDone, Error #xMoveError); IF #xMoveDone THEN #iStep : 40; END_IF; 900: // 故障处理 #MC_Reset(Axis : #Axis, Execute : #xResetTrig, Done #xResetDone); IF #xResetDone THEN #iStep : 10; END_IF; END_CASE;几个必须遵守的规则MC_Power 的 Enable 要常置位、每周期调用不能脉冲触发MC_Home、MC_MoveAbsolute 这类动作指令的 Execute 用上升沿触发同一个实例不要重复调用所有 MC_ 指令都放在循环任务里不要放在循环中断里否则会出现同一个实例被多处调用的报警。还有一点MC_MoveAbsolute 可以用 BufferMode 做连续定位。BufferMode 设为 2 表示混合新指令会在当前运动未结束时平滑接管省掉一次停顿。这在多工位联动里能抢出不少节拍。5.2 回零方式怎么选回零方式选错了机械原点就永远对不准。MC_Home 的 Mode 参数常用的是这几个Mode 0直接把当前位置置为指定值适合带绝对值编码器的轴上电后读一次绝对位置直接置位整个过程不到一秒Mode 2被动回零轴被外部信号推着走遇到原点开关时记录位置Mode 3主动回零轴自己按设定方向找原点开关找到后继续找编码器 Z 脉冲如果伺服配的是多圈绝对值编码器我强烈建议走 Mode 0。省掉一次完整的回零动作节拍上通常能省 2 到 5 秒对高节拍设备来说这是白捡的收益。用增量编码器就必须回零这时候要注意减速开关和原点开关的安装距离——减速开关装得太近轴高速接近时来不及减速就会冲过原点开关回零直接失败。5.3 报警复位和急停链路这里有一个新手常踩的坑PLC 侧的 MC_Reset 清不掉驱动器侧的报警。MC_Reset 只复位工艺对象自身的错误状态驱动器报的过载、过流、位置超差必须单独发复位命令——走通信的话是控制字写 0x0080bit7 上升沿走总线的话是报文里的控制字 bit7。所以完整的复位流程是先清脉冲、停轴再复位驱动器报警等驱动器状态字回到正常最后才做 MC_Reset。顺序反了会出现报警清了但轴起不来的情况因为工艺对象还停在错误状态里。急停链路必须独立于通信。急停按钮直接切驱动器的使能回路或者进安全继电器不能指望 PLC 通过通信发一条停机命令——通信断了这条命令就发不出去这是安全设计的底线。同时伺服侧如果有 STO 功能也要接进安全回路而不是靠参数屏蔽掉。6. 现场联调从伺服不动到定位偏了的排查链路6.1 伺服完全不动按这五层往下切第一层看驱动器面板有没有报警码显示的是不是正常待机状态。有报警先解决报警别往下走。第二层看使能STO 端子有没有给 24V。很多新出厂的伺服默认 STO 未激活禁止功率输出面板上不报警但电机就是锁不住也转不动。这个坑非常隐蔽我第一次遇到时查了整整一上午。第三层看使能信号面板的 I/O 监视里看 DI 端子的使能输入是不是点亮了。PLC 程序里 MC_Power 给没给、输出点有没有动作一路对下来。第四层看指令脉冲方案下用示波器或者高速计数器确认 Q 点真的在发脉冲别只看指示灯。通信方案下用抓包或者通信状态字确认指令真的写进去了。第五层看参数脉冲形式选对没有脉冲加方向、双脉冲 CW/CCW、正交 A/B 是三种完全不同的形式、指令来源选对没有、电子齿轮比算对没有。第五层最容易被跳过实际上出错概率不低。6.2 通信时通时断怎么查RS485 链路的问题集中在物理层按下面的顺序排查效率最高终端电阻总线两端的设备上要有 120Ω 终端电阻中间站不要接屏蔽层接地只在一端接地通常接 PLC 侧两端都接会形成地环流反而变差走线通信线和动力线分槽走交叉时尽量垂直交叉波特率先把波特率降到 9600 试通了再往上加能快速判断是电气问题还是配置问题站号确认没有重复站号两台设备同站号会互相顶掉报文程序确认 MB_MASTER 的轮询逻辑是等 DONE/ERROR 再发下一条超时时间设置合理总线方案下时通时断更多是设备名冲突、IP 冲突、或者交换机带宽和组播设置的问题用 TIA 的在线诊断看丢包和更新时间抖动比盲猜快得多。6.3 定位偏了区分系统偏差和随机偏差定位偏差分两类处理方法完全不同。系统偏差是每次偏的方向和量值都稳定。这种多半是脉冲当量或齿轮比算错、原点偏置没设对、或者机械上有固定的装配误差。处理方式是重算参数或者加原点偏置补偿。随机偏差是每次偏的量不一样。这种通常是机械反向间隙、联轴器松动、干扰导致的丢脉冲、或者位置环增益不足导致跟随误差偏大。反向间隙在换向时特别明显可以在程序里加反向间隙补偿也可以从机械上先解决——间隙补偿只是补程序机械问题还在。还有一种伪装成精度问题的报警位置超差报警跟随误差超过阈值。这个阈值设太小正常加减速时就会报设太大真出问题时又不报。经验值是按最高速度下的理论跟随误差的 2 到 3 倍来设具体要拿实际运行数据校准。7. 把系统做扎实节拍、整定与安全细节7.1 缩短定位节拍的手段定位时间由加速、匀速、减速三段组成缩节拍就是压缩这三段。加速段能压的是加速度和加加速度Jerk把 Jerk 调大能缩短加速时间但冲击也大机械刚性不够会振。匀速段能压的是最高速度注意核对伺服的额定转速和机械的允许线速度。减速段同理。更有效的往往不是压参数而是减少停顿。连续定位用 BufferMode 混合、用绝对值编码器免回零、把要串行的动作改成并行这三招省下来的时间通常比调参数多得多。我做过的项目里把回零改成绝对位置置位、再把两次定位之间的停顿去掉节拍直接从 4.2 秒压到 2.8 秒。7.2 增益整定的顺序不能乱汇川伺服一般有惯量辨识和自动整定功能先让它跑一遍自动辨识把负载惯量比测出来。这个值不准后面手动调参数就是瞎调。手动整定的顺序是先调速度环增益再加积分时间积分时间越大响应越慢但越稳最后调位置环增益。位置环增益调太高会出现定位时的振荡和高频噪音这时候就上陷波器把机械共振频点压下去。陷波器的中心频率要靠频谱或者逐步扫描来定凭感觉填基本没用。整定完之后一定要做重复定位精度测试同一个目标位置来回走 20 次记录实际位置的分布。重复定位精度达标了再去看绝对定位精度。7.3 抱闸时序和断电安全垂直轴Z 轴、升降轴的抱闸时序必须做对否则上电和断电时都会掉一点。断电时的正确顺序是先给抱闸输出有效信号让电机保持住延时 100 到 200 ms 等抱闸机械咬合再断伺服使能。上电时反过来先给伺服使能等电机建立扭矩再松抱闸最后才允许运动指令。如果顺序反了断电时轴会因为重力下滑一小段每次都掉一点机械限位迟早被撞。这个时序要在 PLC 程序里做不要指望驱动器的默认行为。注意抱闸延时不能设太短。抱闸从得电到完全咬合有机械动作时间具体值看抱闸型号规格书一般 50 到 150 ms宁可多留一点。我个人现在做这类项目的固定流程是方案阶段先把脉冲当量或者总线报文对照表算清楚写到设计文档里硬件阶段用示波器确认脉冲和通信物理层没问题程序阶段先用手动 JOG 把方向、速度、限位全部验证一遍最后才写自动流程的状态机。回零和急停这两件事永远单独测不合在自动流程里测。按这个顺序走下来现场调试时间基本能压到一天以内剩下的时间都是机械配合和工艺打磨。
返回列表