V90伺服接入S7-1200:基于PROFINET的组态、报文与调试全解析
2026/9/12 21:56:33 网站建设 项目流程

简介:围绕v90伺服与S7-1200 PLC(1211C)通过Profinet总线实现PN控制的实战资料包,面向工业自动化工程师、PLC开发者及伺服调试人员,重点解决Profinet网络配置复杂、I/O映射不清、运动控制指令调试难度大等常见问题,可帮助读者掌握从网络拓扑搭建、I/O地址定义到梯形图/结构化文本编程的完整链路。资源共42个文件,压缩包约702KB,以cfs、xml、tvd、prx、ap15等TIA Portal工程配置与备份文件为主,并含plf、bmp等辅助素材,便于导入Project环境对照查看各配置环节。已有1390人学习,内容源于实际调试项目,对现场交付和备赛训练均有实用价值。包内“TIA_V90测试”目录展示了完整的V90_Test工程结构,包含System Logs、AdditionalFiles等子项,可配合模拟测试与在线诊断使用;同时记录了Profinet网络组态、伺服I/O地址定义、报文配置以及PWM指令调试等典型操作与排错思路。通过分析这些数据,用户能快速定位组态或程序逻辑问题,显著缩短S7-1200与v90伺服联调时间,减轻现场调试压力。

1. 为什么是 PN 而不是脉冲:V90 与 S7-1200 总线控制的选型逻辑

把 V90 伺服接到 S7-1200 上有两条路线:PLC 发脉冲控制,或者通过 PROFINET(PN)总线让 1211C 直接当 IO 控制器、V90 当 IO 设备。很多人觉得脉冲更稳,实际调试中脉冲方案会遇到高速输出口不够、反馈线干扰、读不到驱动器内部报警的问题;PN 方案一根网线解决设定、使能、位置反馈和诊断,代价只是组态时多花半小时。

我拆的这个 TIA_V90_Test 工程(V15 格式)就是第二种:S7-1200 1211C 通过 PN 控制 V90,工程里含组态、报文、程序和调试记录。适合裁切、贴标、绕线这类单轴定位设备。PLC 伺服控制的项目里,真正花时间的不是写程序,而是把报文地址和驱动参数对齐,这篇按组态、报文、程序、排查的顺序拆开讲。

2. TIA Portal 组态:V90 PN 从站接入 S7-1200 的两种路径

2.1 先理清硬件接口与 PN 拓扑

S7-1200 1211C 带一个 PROFINET 接口,本体没有 DP 口,要接 V90 只有 PN 一条路。V90 的 PN 版本集成一个双口交换机,一个口接 PLC,另一个口可以串接下一台设备。接线时注意:网线至少是 Industrial Ethernet 标准,普通五类线在电柜里干扰大,我用过屏蔽层接地不良的网线,出现过周期性丢站。PN 拓扑建议做成星型或链型,不要环形;环网需要额外支持 MRP 的交换机,1211C 本身不做 MRP 管理。

IP 和设备名是这一层的核心。S7-1200 的 PN 接口配置为 192.168.0.1,V90 配 192.168.0.2,子网掩码 255.255.255.0。PROFINET 不靠 IP 寻址 IO 设备,靠的是设备名(Station Name),IP 只是给非周期通信和在线诊断用的。设备名不一致,TIA 会直接报「无法分配设备名」,这是组态阶段最常见的错误。

2.2 GSD 文件导入与 V90 设备组态

在 TIA Portal 中接入 V90 有两条路径:一是从硬件目录里直接拖 V90 PN 的 GSD(TIA 安装时集成了 SINAMICS 设备描述);二是手动导入 GSDML 文件。对于 V90 PN,推荐第二种,因为 V90 的 GSD 版本更新比 TIA 版本快,导入最新的 GSDML-V2.33-Siemens-SINAMICS_V90_PN 能保证报文类型和参数结构与固件一致。工程里选的是报文 5,这在 V90 固件 V1.4 以上才完整支持,导入 GSD 后确认一下固件版本是否匹配。

导入后操作步骤:

  1. 在网络视图添加一个 PROFINET IO 系统,把 1211C 设为 IO 控制器。
  2. 从硬件目录的「其他现场设备 → PROFINET IO → SINAMICS」下拖入 V90 PN。
  3. 右键 V90 分配设备名,比如 v90_servo,PLC 侧对应的设备名必须相同。
  4. 在设备视图选中报文类型为报文 5,分配 I/O 起始地址。

提示:设备名区分大小写,且不能出现中文和空格。TIA 下载时会自动做名称校验,但在线不匹配时提示比较隐晦,直接翻「设备和网络」里的在线拓扑最快。

2.3 用 TIA_V90_Test 工程核对组态参数

TIA_V90_Test 工程里的 V90_Test 站点把报文选成了报文 5,I 地址和 Q 地址按默认自动分配。实际项目里我习惯把这些参数记录成表,方便和 V90 侧 V-Assistant 里的参数核对。

项目参数值说明
PLC PN 接口 IP192.168.0.1S7-1200 的 PROFINET 接口地址
V90 设备 IP192.168.0.2在 V-Assistant 或 TIA 中设置
设备名v90_servoPLC 与 V90 必须完全一致
报文类型5(标准位置报文)PZD 长度 6/6
控制字 Q 起始地址如 QW64以组态自动分配为准
状态字 I 起始地址如 IW64与报文的输入方向对应
看门狗时间默认 100 ms网络抖动大时可放宽到 200 ms

这张表在项目交接时很有用。注意 PLC 变量表里访问 IW64/QW64 时,字节序要选 Motorola(大端),PROFINET 报文默认大端,TIA 里如果字节序选错,会出现速度设定值乱跳的现象。S7-1200 的 PROFINET 接口支持的最小刷新时间是 4 ms,在设备组态里把 IO 刷新时间从默认值改成 4 ms,通信实时性会明显提升。

3. 报文结构与 I/O 映射:1 号报文到 5 号报文的取舍

3.1 PROFIdrive 报文是「控制字 + 设定值」的固定排列

PROFIdrive 报文的本质是固定顺序的 PZD(过程数据)数组,PLC 周期性地往输出地址写控制字和设定值,同时从输入地址读状态字和实际值。每个 PZD 占用一个字(16 位)。V90 的 PN 从站会在每个 PN 周期刷新 PZD,S7-1200 的循环时间默认在 4 ms 到 8 ms 级别,这个周期就是位置控制的响应粒度。

V90 PN 支持的报文有标准报文 1、3、5、7、9。选型时把握一个原则:报文越长,能读到的状态越多,但 PLC 程序处理和通信开销也越大。单轴速度控制用报文 1 就够,位置控制至少要报文 5。V90_Test 工程里选报文 5,是因为要在 PLC 侧直接读取实际位置 XIST1,而不是把定位逻辑放在驱动器内部做。如果只是想让 PLC 告诉伺服「转多快」而不管位置,报文 1 更节省扫描周期。

3.2 报文 1、3、5 的 PZD 对照表

报文类型PLC 输出 PZD(控制方向)V90 输入 PZD(反馈方向)典型用途
报文 1STW1、NSOLL(2 字)ZSW1、NIST(2 字)纯速度控制,开销最小
报文 3STW1、NSOLL、STW2、NSOLL_A(4 字)ZSW1、NIST、ZSW2、NIST_A(4 字)速度控制加附加设定值
报文 5STW1、NSOLL、STW2、MDI_TAR、…(6 字)ZSW1、NIST、ZSW2、XIST1、…(6 字)基本位置控制,可读实际位置

STW1 是控制字 1,NSOLL 是速度设定值,ZSW1 是状态字 1,NIST 是速度实际值,XIST1 是位置实际值。具体字号以 GSD 选中报文后 TIA 生成的符号名为准,V90 手册中的「报文字定义」表是最终依据。控制字关键位的含义要记牢:STW1 的位 0 是 ON/OFF1,位 3 是使能运行,位 6 是使能速度设定值,位 7 是故障确认(上升沿有效);ZSW1 的位 0 是准备接通,位 1 是准备运行,位 2 是运行使能,位 3 是故障激活。

3.3 驱动参数 P2000、P29247 与设定值标定

速度设定值的标定由 P2000(基准速度)决定。P2000 默认 1000(单位 rpm),NSOLL 的字值 = 目标速度 ÷ P2000 × 16384(16#4000 对应 100%)。例如 P2000 = 1000,要跑 500 rpm,NSOLL = 500 / 1000 × 16384 = 8192。这个换算是初学者最容易踩的坑:直接把 500 写进字里,实际速度只有 30 rpm 左右。位置相关参数里,P29247 定义的是用户位置单位与 LU(Length Unit)的换算关系,V90 默认 10000 LU/转,FB284 和工艺对象里的位置值都受它影响。

位置实际值 XIST1 以增量为单位,由编码器线数和电子齿轮比决定。V90 常见配置是 22 位分辨率的编码器,单圈增量 4194304,具体以订货号为准。XIST1 是 32 位两字拼接,如果 PLC 程序里只读了低字,位置值转不到一圈就会溢出回零。这里建议在 PLC 组态时同时读 XIST1 的高字和低字,拼成 DINT 再用。

注意:报文 5 的 XIST1 是 32 位有符号数,符号扩展要在 PLC 侧处理,直接用 WORD_TO_DINT 会丢最高位。

// XIST1 高字在 IW66,低字在 IW64(以组态地址为例) "ActualPos" := SHL(IN := WORD_TO_DINT("Input".XIST1_Hi), N := 16) OR WORD_TO_DINT("Input".XIST1_Lo);

这段 SCL 先把 XIST1 高字左移 16 位放到 DINT 的高半部分,再和低字按位或合并成 32 位位置值。SHL 是左移指令,N := 16 表示移动 16 个位。注意 WORD_TO_DINT 是无符号扩展,如果伺服转到负方向,XIST1 高字最高位是 1,需要先判断并手动补符号位。工程里我用 SCL 实现,监控变量表里直接看 32 位数值,比梯形图里拼字节直观得多。

4. 控制程序实现:从 STW1 控制字到运动指令

4.1 使用 FB284 功能块封装 PN 报文

西门子针对 S7-1200/1500 与 SINAMICS 驱动通信提供了库功能块 FB284(SINA_POS)和 FB285(SINA_SPEED)。FB284 把报文 5 的 PZD 封装成使能、点动、绝对定位、相对定位等触点式接口,内部完成控制字切换和状态字解析。使用 FB284 的步骤:把库文件 SINA_LIB 导入 TIA Portal,在程序块中调用 FB284,背景数据块中填入 V90 的报文地址。它适合对报文格式不够熟悉的人,能减少手写 PZD 拼接的低级错误。

FB284 核心参数:

  • EnableAxis:轴使能,上升沿执行 ON 命令
  • ModePos:定位模式,1 表示绝对定位,2 表示相对定位,3 表示点动
  • Position:目标位置,单位由 P29247 决定
  • Velocity:定位速度,单位 rpm 或 mm/s
  • Error / ErrorID:错误状态和错误码

提示:FB284 的 ModePos 与 V90 内部基本定位模式对应,不能和 PLC 工艺对象 MC_MoveAbsolute 混用,两者对位置单位定义不同,切换会造成位置设定被放大 1000 倍的情况。

4.2 SCL 直接控制 V90:速度模式程序片段

不想依赖库时,可以直接在 OB1 里写 PZD。给出报文 5 或报文 1 通用的速度控制程序:

// ==== 速度控制:直接操作报文 PZD ==== // 1) 先置 STW1=16#047E:ON/OFF1 不置位,其余运行准备位全部置 1 "V90_Q".STW1 := 16#047E; // 2) 无故障时,置位位 0,发出 ON 命令 IF "Speed_Enable" AND "NoFault" THEN "V90_Q".STW1 := 16#047F; END_IF; // 3) 速度设定值 = 500rpm / P2000(1000) * 16384 "V90_Q".NSOLL := 8192;

这段逻辑说明:十六进制 047E 的含义是「准备运行但未 ON」,047F 是在其基础上把位 0 置 1。程序里不要一出使能就把控制字写成 047F,V90 的 ON 命令需要先建立 047E 状态再置位 ON,否则部分固件会报故障。速度设定值按 P2000 换算,P2000 改过之后 8192 对应的速度就不是 500 rpm 了,换算公式要放在注释里方便后人改。NSOLL 是有符号数,负方向时写补码,例如 -500 rpm 对应 -8192 的 16 位表示 16#E000。

4.3 位置控制与回零:工艺对象 vs 报文

位置控制有两条实现路线:用 FB284 的 ModePos,或用 PLC 工艺对象(Motion Control)组态 V90。S7-1200 的工艺对象支持 MC_MoveAbsolute 指令,但与之配合的报文必须是报文 5,且需要在轴组态里勾选「位置控制」。组态工艺对象时要设每转增量数(V90 为 4194304)、齿轮比、行程单位。调用示例:

"MC_MoveAbsolute_Instance"( Axis := "Axis_1", Position := 120.0, Velocity := 60.0, ExecutionMode := 0);

说明:Axis 是 TIA 中组态的轴名称,Position 单位在工艺对象中设为 mm,Velocity 单位 mm/s,ExecutionMode = 0 表示立即启动。工艺对象方式的好处是支持 MC_Home 回零、MC_Reset 报警复位以及轴状态诊断,但 1211C 上轴数量多了扫描周期会上升,单轴设备完全够用。回零逻辑放在工艺对象里做,回零方向、参考点开关输入都要在轴组态中设置,不建议在梯形图里手动找零位,因为速度切换和方向判断的时序容易出问题。

限位逻辑:硬限位开关接入 PLC DI,在梯形图中把限位信号串入 EnableAxis 或 MC_MoveAbsolute 的启动条件;软限位在工艺对象中设定软件限位值即可。若用报文控制方式且限位信号直接被 V90 读取,需要在驱动器侧配置输入端子的限位功能。容易混淆的是:TIA 的软限位只对 PLC 程序有效,急停如果只接在伺服侧、不经过 PLC,PLC 里的软限位和轴状态就来不及同步,安全回路要单独设计。

5. 在线调试:看报文、翻故障码、修参数

5.1 用 TIA 在线表强制控制字验证通信

程序下载后先不要急着给使能。打开 TIA 的监控表,把 QW64(控制字)强制为 16#047E,看 IW64(状态字)是否回 16#xx3E 之类的准备状态。状态字位 0 和位 1 都为 1,说明通信链路和驱动准备正常。这时再置位 047F,观察 V90 面板是否显示运行状态。如果状态字一直停留在 0,先看 ZSW1 的位 3 故障标志,以及 PLC 诊断缓冲区里的 PROFINET 错误。

用在线监控表验证时,强制值不要写在程序里,强制完要取消,否则程序下载后强制值会覆盖逻辑输出。我一般用变量表「监视」配合程序在线,而不是在变量表里强制,因为强制状态在下载新程序后会保留,容易造成误动作。另外 TIA 的 S7-PLCSIM 可以仿真 1211C 的逻辑,但仿真器不模拟 PN 设备,V90 的通信必须在真实硬件上验证,仿真只能测程序分支逻辑。

5.2 V90 常见 PN 通信故障码与处理

故障码含义处理方式
F7900PROFINET 通信看门狗超时检查网线、设备名、PLC 运行状态;放宽看门狗
F52950速度设定值超限核对 NSOLL 与 P2000 的换算;检查程序是否写入超范围值
F016通信数据异常,控制单元收不到周期报文核对报文类型与 PZD 长度,重新下载组态

V90 面板显示 F 类为故障,A 类为报警。报警无需复位,故障要在排除原因后用控制字位 7 的上升沿复位,或直接在 V90 面板按 FN 键复位。不要一出现故障就断电重启,多次 F7900 往往是网络拓扑问题,重启掩盖不了根因。

5.3 一个排查实例:F7900 后如何恢复

实际调试时遇到过 V90 报 F7900,TIA 诊断里显示 IO 设备不可用。按下面顺序排查,十分钟定位问题:先在 PC 命令行 ping V90 的 IP,确认物理链路:

ping 192.168.0.2 -t

ping 通但 TIA 仍报设备不可用,检查设备名是否匹配。在 TIA 在线拓扑视图里看 V90 显示的名称是不是 v90_servo。设备名对的情况下看 PLC 是否处于 RUN,1211C 停机时 PN 控制器停止周期通信,V90 会报 F7900。把 PLC 切到 RUN 再试。最后检查报文类型是否两侧一致:TIA 里选报文 5,V90 侧用 V-Assistant 检查 PZD 配置。这个例子里根因是 PLC 调试时停在 STOP,V90 等不到周期报文就报警。

后续给这个项目优化时,我把 PLC 的循环中断设置成 4 ms,并在设备组态里为 V90 设置 4 ms 的 I/O 刷新时间,位置控制时的速度波动比默认配置小很多。1211C 支持的最小刷新时间是 4 ms,设为 4 ms 后观察 CPU 负荷,若超过 40% 再改回 8 ms。V90 的看门狗时间设为 200 ms,既避免偶发广播流量触发 F7900,又不影响急停响应。

本文还有配套的精品资源,点击获取

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

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

立即咨询