简介:这份资源围绕西门子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报文而不是标准报文1
2.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是诊断 ID,DiagInfo是诊断信息。故障时这两个值能帮定位问题。
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的单位是“单位/秒”,如果一圈 360,Velocity设 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 报文支持情况,不要等组态完了才发现报文对不上。
希望帮到你。
本文还有配套的精品资源,点击获取