西门子1200与禾川伺服FB284 PN通讯实战指南
简介这份资源围绕西门子1200 PLC与禾川伺服FB284的Profinet通讯展开面向工业自动化领域的电气工程师、PLC编程人员及自动化专业学习者帮助解决两者组网配置、参数设定与通讯调试中的实际问题。压缩包为rar格式整体约253.36MB包内以docx参数设置文档与测试程序文件为主前者用于禾川EOP模式下的控制模式、速度限制、位置精度等参数设定后者用于验证PLC与伺服驱动器的通讯链路与数据读写。内容涉及网络参数配置、Step 7项目创建、SCL或LAD/FBD编程、伺服状态反馈及通讯中断、数据同步等故障排查思路可帮助读者快速搭建实验环境、对照调试并查漏补缺。目前已有373人学习下载适合具备一定PLC与伺服基础、希望掌握PN通讯实操的中高级技术人员参考。1. 西门子1200与禾川伺服FB284 PN通讯一条报文打通“PLC-伺服”的硬实时链路产线改造现场最常听到的抱怨是PLC 发脉冲控制伺服接线一堆、响应还慢换个型号就得重调。换成 PROFINET 通讯后一根网线把西门子 1200 和禾川伺服连起来位置、速度、扭矩全部走报文接线少了、诊断也直观了。但真上手才发现FB284 这个功能块不是“填几个参数就能跑”——它背后是西门子报文 111、禾川伺服的 PN 从站配置、以及 PLC 侧对状态字的解析逻辑三者对齐。这篇笔记就围绕“西门子1200与禾川伺服FB284 PN通讯”这条链路把报文选型、组态步骤、FB284 参数含义、以及现场最容易翻车的几个点讲清楚。适合正在做产线电控改造、想把脉冲轴升级成总线轴的工程师也适合第一次接触 PROFINET 伺服控制、需要一份可复现流程的新手。2. 报文选型与硬件组态为什么是111报文而不是标准报文12.1 西门子1200做PROFINET控制器的角色定位西门子 1200 系列 PLC 在 PROFINET 网络里通常做 IO 控制器禾川伺服驱动器做 IO 设备。这个角色分配决定了组态方向在 TIA Portal 的“设备和网络”视图里1200 是主站禾川伺服的 GSD 文件导入后挂在它下面。很多新手会卡在“为什么我的伺服在硬件目录里找不到”——因为禾川伺服的 GSDML 文件需要单独安装TIA Portal 自带目录里没有。安装完 GSD 后在“其他现场设备 → PROFINET IO → Drives”下面能找到对应型号。组态时第一个要确认的是设备名称和 IP 地址。PROFINET 靠设备名称做设备识别IP 地址反而可以在线分配。我一般会先把禾川伺服的设备名称设成和项目里一致的字符串比如“Servo_Axis1”然后在 TIA Portal 里给同一个名称IP 地址设成同网段但不冲突的地址。这一步如果名称对不上PLC 启动后 BF 灯闪红伺服根本不会进入数据交换状态。第二个要确认的是更新时间和看门狗。1200 的 PROFINET 接口默认更新时间是 1ms但禾川伺服实际支持的周期要看具体型号手册。如果设得太快伺服侧来不及响应会出现间歇性丢站。我一般先设 2ms 或 4ms跑稳了再往下压。看门狗时间通常是更新时间的 3 倍这个值决定了通讯中断后多久 PLC 报故障。2.2 111报文和标准报文1的区别到底在哪西门子给伺服控制定义了一套标准报文常见的有报文 1、报文 2、报文 3、报文 5、报文 102、报文 111 等。报文 1 是最简单的只有 2 个字控制字 STW1 和转速设定值 NSOLL_B。它只能做速度控制位置环在伺服内部闭合PLC 发速度指令伺服自己跑位置。这种模式适合简单的调速应用但做定位控制时 PLC 拿不到实际位置没法做多轴插补。报文 111 是西门子为“位置控制”场景设计的结构是 12 个字STW1、STW2、POS_STW、速度前馈、位置设定值、以及对应的状态字 ZSW1、ZSW2、POS_ZSW、实际位置、实际速度等。它把位置环放在 PLC 里PLC 每个周期算出位置设定值发给伺服伺服只做电流环和速度环。这样做的好处是 PLC 能实时知道轴的实际位置可以做电子齿轮、凸轮同步、多轴插补。代价是 PLC 的运算负担加重通讯周期必须足够快否则位置环会震荡。禾川伺服对报文 111 的支持情况要看具体型号和固件版本。常见做法是在禾川的调试软件里把 PN 通讯报文设成“111”然后对照手册确认 PZD 长度和数据结构。如果伺服侧只支持标准报文 1那就只能用 FB285 做速度控制FB284 的位置控制功能用不了。这一点在选型阶段就要确认不要等组态完了才发现报文对不上。2.3 在TIA Portal里挂载禾川伺服的完整步骤下面按顺序走一遍组态流程。假设已经拿到禾川伺服的 GSDML 文件TIA Portal 版本是 V16 或以上。第一步安装 GSD 文件。在 TIA Portal 菜单“选项 → 管理通用站描述文件”里选 GSDML 文件所在目录勾选后安装。安装完重启 TIA Portal硬件目录里会出现禾川的设备。第二步添加设备。在“设备和网络”视图里从硬件目录找到禾川伺服型号拖到网络视图。然后把它和 1200 的 PROFINET 接口连起来。第三步设置设备名称和 IP。双击伺服设备在“属性 → 常规 → PROFINET 接口”里设 IP 地址在“PROFINET 设备名称”里设名称。名称要和伺服调试软件里设的一致。第四步选报文。在伺服设备的“设备概览”里找到“报文”配置项选“111”。这时下面会出现对应的输入输出地址记下起始地址后面写程序要用。第五步分配地址。TIA Portal 会自动分配 I 地址和 Q 地址。我一般会手动改成连续的、好记的地址比如 Q 从 64 开始I 从 64 开始方便后面写程序时对照。第六步编译下载。编译整个项目下载到 1200。下载前确认伺服已经上电、网线接好。下载后观察 1200 的 PROFINET 接口灯和伺服的 PN 灯正常应该是绿灯常亮。提示如果下载后 BF 灯闪红先检查设备名称是否一致。在 TIA Portal 的“在线访问”里能看到实际设备名称和组态名称对比一下。3. FB284参数逐条拆解从控制字到实际位置的映射关系3.1 FB284的输入输出引脚含义FB284 是西门子为“通过 PROFINET 控制伺服”提供的标准功能块在 TIA Portal 的“指令 → 工艺 → 运动控制”下面能找到。它的引脚分几类控制类、设定值类、状态类、诊断类。控制类里最重要的是Mode和Enable。Mode决定轴的工作模式0 是位置控制1 是速度控制2 是回零。Enable是使能上升沿后轴进入使能状态伺服上使能。Halt是暂停Jog是点动。设定值类里Position是目标位置Velocity是速度OverV是速度倍率OverAcc和OverDec是加减速倍率。这些值都是浮点数单位要和伺服侧配置一致。禾川伺服默认的位置单位是“脉冲”或“用户单位”如果设成用户单位一圈对应的值要在伺服参数里设。状态类里Status是轴状态字Error是故障码ActualPosition是实际位置ActualVelocity是实际速度。这些值每个周期刷新可以直接接到 HMI 上显示。诊断类里DiagId是诊断 IDDiagInfo是诊断信息。故障时这两个值能帮定位问题。3.2 控制字STW1和STW2的位定义报文 111 里的 STW1 和 STW2 是西门子定义的控制字每一位都有含义。STW1 的 bit0 是“ON”bit1 是“使能”bit2 是“暂停”bit3 是“故障复位”bit4 是“点动”bit5 是“回零”bit6 是“位置控制”bit7 是“速度控制”。FB284 内部会自动处理这些位但理解它们有助于排查问题。STW2 的 bit0 到 bit3 是“模式选择”bit4 是“外部块切换”bit5 是“测量探头”。在位置控制模式下STW2 通常设成 0。POS_STW 是位置控制专用控制字bit0 是“相对定位”bit1 是“绝对定位”bit2 是“连续运行”bit3 是“叠加定位”。FB284 的Mode和Position参数会映射到这些位上。实际位置和实际速度是 32 位整数单位是“脉冲”或“用户单位”。如果伺服侧设的是“脉冲”一圈 10000 脉冲那实际位置 10000 就对应一圈。如果设的是“用户单位”一圈对应 360 或 1000看伺服参数。3.3 一个最小可跑的位置控制程序下面是一个最小可跑的位置控制程序用 SCL 写。假设报文 111 的 Q 地址从 64 开始I 地址从 64 开始。// 调用 FB284 控制禾川伺服 // 假设 FB284 的背景数据块是 FB284_DB // 报文 111 的 Q 地址从 64 开始I 地址从 64 开始 FB284_DB(Mode : 0, // 0 位置控制 Enable : Axis_Enable, // 使能信号 Halt : Axis_Halt, // 暂停信号 Jog : Axis_Jog, // 点动信号 Position : Target_Position, // 目标位置浮点数 Velocity : Target_Velocity, // 目标速度浮点数 OverV : 100.0, // 速度倍率 100% OverAcc : 100.0, // 加速倍率 100% OverDec : 100.0, // 减速倍率 100% Config : 16#0000_0000, // 配置字默认 0 Status : Axis_Status, // 轴状态字 Error : Axis_Error, // 故障码 ActualPosition : Actual_Pos,// 实际位置 ActualVelocity : Actual_Vel,// 实际速度 DiagId : Diag_ID, // 诊断 ID DiagInfo : Diag_Info); // 诊断信息这段代码的逻辑是每个扫描周期调用 FB284把控制信号和目标值传进去功能块内部通过报文 111 和伺服交换数据。Mode设成 0 表示位置控制Enable上升沿后轴使能Position是目标位置Velocity是运行速度。Status和Error可以接到 HMI 上做状态显示。参数说明Position的单位要和伺服侧一致。如果伺服设的是“用户单位”一圈 360那Position设 360 就是转一圈。Velocity的单位是“单位/秒”如果一圈 360Velocity设 360 就是每秒转一圈。OverV、OverAcc、OverDec是百分比100.0 表示 100%。注意FB284 的Position是浮点数但报文里是 32 位整数。功能块内部会做转换转换比例取决于伺服侧的位置单位配置。如果发现实际位置和目标位置差一个固定倍数先查伺服的位置单位参数。4. 避坑与排查FB284通讯失败时先看这五个地方4.1 现象PLC 报“站故障”BF 灯闪红原因设备名称不一致或者 IP 地址冲突或者网线没插好。PROFINET 靠设备名称识别名称对不上就不会建立通讯。解决在 TIA Portal 的“在线访问”里扫描网络看实际设备名称和组态名称是否一致。如果不一致在伺服调试软件里改名称或者在 TIA Portal 里改组态名称。IP 地址冲突的话把伺服和 PLC 设成同网段但不重复的地址。4.2 现象FB284 的Error输出非零轴不动原因使能条件不满足或者伺服侧有故障或者报文配置不对。常见的是伺服侧报“编码器故障”或“过载”FB284 会收到故障码。解决先看伺服调试软件里的故障码排除硬件问题。然后检查 FB284 的Enable是否上升沿触发Mode是否设对。如果伺服侧报文设的是标准报文 1而 FB284 按报文 111 解析数据会错位Error会报“配置错误”。4.3 现象轴能动但位置不准每次差一点原因位置单位不匹配或者加减速时间太短导致过冲或者机械间隙。位置单位不匹配是最常见的比如伺服设的是“脉冲”PLC 按“用户单位”算差一个比例系数。解决在伺服调试软件里确认位置单位然后在 FB284 的Position和ActualPosition上做比例换算。加减速时间可以适当加长减少过冲。机械间隙要靠机械调整软件补偿只能缓解。4.4 现象通讯周期设 1ms 后偶尔丢站原因禾川伺服的处理周期跟不上 1ms或者网络负载太高。PROFINET 的更新时间设得太快伺服侧来不及响应看门狗超时后丢站。解决把更新时间改成 2ms 或 4ms看门狗时间设成更新时间的 3 倍。如果网络里还有其他设备检查交换机是否支持 PROFINET普通交换机可能造成延迟抖动。4.5 现象FB284 的ActualPosition不刷新原因报文 111 的输入地址映射错了或者 FB284 的背景数据块没正确调用。输入地址映射错的话ActualPosition读的是别的数据。解决在 TIA Portal 的“监控表”里直接监控 I 地址的原始值和 FB284 的ActualPosition对比。如果原始值在变而ActualPosition不变说明 FB284 没正确读取。检查 FB284 的调用是否在每个周期都执行背景数据块是否被其他程序覆盖。5. 进阶技巧用FB284做多轴同步与电子齿轮5.1 多轴同步的基本思路多轴同步的核心是让两个轴的位置保持固定比例。用 FB284 做的话主轴的位置通过ActualPosition读出来乘以比例系数后作为从轴的目标位置。每个周期都更新从轴的目标位置从轴就会跟着主轴走。比例系数可以是固定的也可以是变化的。固定比例就是电子齿轮变化比例就是凸轮。FB284 本身不直接支持凸轮但可以通过 PLC 程序算目标位置来实现。5.2 一个电子齿轮的SCL实现下面是一个简单的电子齿轮实现主轴和从轴都用 FB284 控制。// 电子齿轮从轴位置 主轴位置 × 齿轮比 // 主轴和从轴都用 FB284 控制报文 111 // 读主轴实际位置 Master_Actual_Pos : FB284_Master_DB.ActualPosition; // 计算从轴目标位置 Slave_Target_Pos : Master_Actual_Pos * Gear_Ratio; // 调用从轴 FB284 FB284_Slave_DB(Mode : 0, Enable : Slave_Enable, Position : Slave_Target_Pos, Velocity : Slave_Velocity, OverV : 100.0, OverAcc : 100.0, OverDec : 100.0, Status : Slave_Status, Error : Slave_Error, ActualPosition : Slave_Actual_Pos, ActualVelocity : Slave_Actual_Vel);这段代码的逻辑是每个周期读主轴的实际位置乘以齿轮比得到从轴的目标位置然后调用从轴的 FB284。齿轮比设 1.0 就是 1:1 同步设 2.0 就是从轴转两倍。参数说明Gear_Ratio是浮点数可以是小数。Slave_Velocity要设得足够大否则从轴跟不上主轴。如果从轴滞后可以适当提高OverV或Slave_Velocity。注意电子齿轮的同步精度取决于通讯周期和 PLC 扫描周期。周期越短同步越好。如果要求高同步精度建议用 IRT等时同步实时模式但 1200 对 IRT 的支持有限具体要看型号。5.3 验证同步效果的方法验证同步效果最直接的方法是在 HMI 上画两条位置曲线一条主轴、一条从轴看它们是否保持固定比例。如果曲线有相位差说明从轴滞后可以调整Slave_Velocity或OverV。如果曲线有抖动说明通讯周期不稳定检查网络负载和交换机。另一个方法是算同步误差每个周期算Master_Actual_Pos * Gear_Ratio - Slave_Actual_Pos看误差是否在允许范围内。误差持续增大说明从轴跟不上误差来回波动说明有干扰。我一般会在调试阶段把同步误差接到示波器上观察它的动态特性。如果误差在正负几个脉冲内基本可以接受。如果误差超过几十个脉冲就要查机械连接和伺服增益。5.4 一个容易忽略的细节使能顺序多轴同步时使能顺序很重要。如果主轴先使能、从轴后使能从轴启动瞬间会有一个位置跳变。正确的做法是先让所有轴都使能再给主轴发运动指令。FB284 的Enable可以同时给但主轴的运动指令要等从轴使能完成后再发。我一般会在程序里加一个“使能完成”判断所有轴的Status都显示“使能”后才允许主轴运动。这个判断可以用一个简单的 AND 逻辑实现。5.5 从脉冲轴升级到总线轴的收益与代价把脉冲轴升级到 PROFINET 总线轴收益是接线少、诊断直观、能读实际位置、能做多轴同步。代价是 PLC 运算负担加重、通讯周期有下限、调试门槛提高。如果只是简单的单轴定位脉冲控制可能更简单。但如果要做多轴同步、电子齿轮、凸轮总线控制是更好的选择。我自己的习惯是新项目优先考虑总线轴老设备改造看伺服是否支持 PN。如果伺服不支持 PN加一个 PN 转脉冲的模块也能用但性价比不高。选型阶段就要确认伺服的 PN 报文支持情况不要等组态完了才发现报文对不上。希望帮到你。本文还有配套的精品资源点击获取