S7-1200与S120 PROFINET通讯实战:标准报文1配置与参数读写
简介这份PDF文档面向工业自动化工程师、PLC编程人员及高校相关专业学习者系统讲解如何通过PROFINET实现S7-1200 PLC与SINAMICS S120驱动器之间的实时通讯解决控制器与分布式驱动设备组网配置、编程调试中的实际问题。资源包内含1个PDF文件约931KB内容涵盖PROFINET IO通信原理、S7-1200与S120的硬件选型与连接、TIA Portal中的设备组态与IP分配、控制程序编写、PN网络拓扑配置以及通讯故障排查等完整环节并附有具体设备型号与参数示例便于对照实操。目前已有133人学习下载适合需要掌握西门子自动化系统集成、希望快速上手PROFINET通讯配置的初、中级技术人员参考也可作为项目调试阶段的排错思路手册。1. 从一台 1214C 和一台 S120 说起这份 PROFINET 通讯文档到底能帮你省下多少试错时间手上有一台 CPU 1214C DC/DC/DC一台 CU320-2DP 带 CBE20 的 S120要求用 PROFINET IO 把两者连起来走标准报文 1 做速度控制和状态回读——这是很多做小型运动控制项目的工程师都会碰到的组合。真到动手的时候问题往往不是“能不能通”而是卡在几个具体环节GSD 文件从哪加载、设备名和 IP 怎么分配、标准报文 1 的 PZD 区到底哪两个字节是 STW1 哪两个是 NSOLL_A、DPRD_DAT/DPWR_DAT 的 LADDR 填什么、想改个 P1121 参数为什么非得绕到 WRREC/RDREC 走 Record 47。这份《通过 PROFINET 实现 S7-1200 与 SINAMICS S120 通讯》的 Getting-started 文档就是围绕这一整套流程写的从硬件清单、TIA Portal 组态、STARTER 侧配置一直讲到用 DPRD_DAT/DPWR_DAT 做周期通讯、用 WRREC/RDREC 做参数读写。它适合两类人一类是第一次把 S120 挂到 S7-1200 下面、需要一份能照着走的组态顺序的人另一类是已经能通、但参数读写和报文映射总是记不牢、需要回头核对细节的人。下面我按这份文档的骨架把它拆成能直接复现的步骤顺带把几个容易翻车的地方标出来。2. 硬件与软件清单先确认你手上的东西和文档对得上2.1 文档里那套参考配置这份文档给了一套明确的参考硬件不是泛泛而谈。控制器是 CPU 1214C DC/DC/DC订货号 6ES7214-1AE30-0XB0固件 V2.2S120 侧是 CU320-2DP订货号 6SL3040-1MA00-0AA0Version C固件 V4.3.2插 CBE20 通讯模块6SL30550AA00-2EB0电机模块 6SL3120-2TE15-0AA3 Version B配 1FK7022-5AK71-1LA3 电机交换机用 SCALANCE X2086GK5208-0BA10-2AA3。软件是 TIA Portal V11 SP2 加 SCOUT V4.2.1。这里有个选型上的关键点值得先说清楚S120 要接 PROFINET靠的是 CBE20 这块通讯扩展模块不是 CU320-2DP 本体自带的接口。CU320-2DP 名字里的 DP 指的是 PROFIBUS DP它本体走的是 DP要上 PROFINET 必须加 CBE20。很多人第一次拿到 CU320-2DP 以为直接插网线就行结果在 TIA Portal 里怎么都搜不到设备问题就出在这。文档里明确列了 CBE20 的订货号说明这条链路是必须的。提示核对订货号时重点看 CBE20 和 CU320 的固件版本。文档基于 FW V4.3.2如果你的 CU320 固件低于这个版本GSD 文件里可能找不到对应的 “SINAMICS S120/S150 CBE20 V4.3” 条目需要先升级固件或换用匹配版本的 GSD。2.2 IP 与设备名的规划文档给了一张地址规划表这是整个组态能不能一次通的关键。CPU1214C 设备名 plc1200IP 192.168.0.1CU320-2DP 设备名 s120pnIP 192.168.0.2编程用的 PG 是 192.168.0.126子网掩码统一 255.255.255.0。设备Device nameIP 地址CPU1214Cplc1200192.168.0.1CU320-2DPs120pn192.168.0.2PG编程电脑—192.168.0.126PROFINET 的设备名不是可选项是 IO 控制器识别 IO 设备的唯一依据。IP 可以改设备名对不上通讯就是起不来。我一般会先把这三个地址写在一张纸上贴在机柜门内侧组态和在线分配的时候逐条对比在软件里来回翻要快得多。2.3 软件版本的一个现实问题文档用的是 TIA Portal V11 SP2 和 SCOUT V4.2.1。这两个版本现在看都偏老但流程本身没变。如果你手上是新版 TIA Portal比如 V15 以上S120 的组态入口从 SCOUT 挪到了 Startdrive界面不一样但底层逻辑——加载 GSD、分配设备名、选标准报文 1、映射 PZD——是完全一致的。看这份文档的时候把 SCOUT 的操作对应到 Startdrive 里找同名功能就行不要因为软件版本不同就整份丢掉。3. TIA Portal 侧组态从加载 GSD 到分配设备名3.1 在硬件目录里找到 S120 的 GSD打开 TIA Portal 新建项目先添加 CPU1214C。然后在硬件目录里找 S120 的 GSD 条目路径是 “Other field devices - PROFINET IO - Drives - Siemens AG - SINAMICS”选 “SINAMICS S120/S150 CBE20 V4.3”。把它拖到网络视图里和 PLC_1 连到同一个 PROFINET IO 系统上。这一步的坑在于如果你的 TIA Portal 硬件目录里根本没有这个条目说明 GSD 文件没装。GSD 文件需要单独获取装完之后重启 TIA Portal 才能在目录里看到。文档默认你已经有了这个 GSD但实际项目里这一步经常卡人。# GSD 文件安装路径TIA Portal 环境下 # 菜单Options - Manage general station description files (GSD) # 选择 GSD 文件所在目录勾选目标文件点 Install # 安装完成后需重启 TIA Portal 才能在硬件目录中看到新条目逻辑说明GSD 文件描述了一个 PROFINET IO 设备的能力——支持哪些报文、有哪些模块、参数怎么配。TIA Portal 靠它来生成组态。参数上注意安装 GSD 时如果提示版本冲突优先选版本号更高的那个低版本可能不支持 CBE20 的某些报文类型。3.2 分配设备名和 IP设备拖进来之后TIA Portal 里会出现两个节点PLC 侧的 “SIMATIC 1200 station_1” 和 IO 侧的 “GSD device_1”。接下来要做两件事给 S7-1200 分配设备名 plc1200给 S120 分配设备名 s120pn然后分别设 IP。操作顺序是先选 PLC在属性里把 PROFINET 接口的设备名改成 plc1200、IP 改成 192.168.0.1再选 S120 那个 GSD device设备名改成 s120pn、IP 改成 192.168.0.2。设备名必须和后面在线分配时填的完全一致大小写敏感。# 在线分配设备名的操作路径TIA Portal # 1. 转到 Online - Accessible devices # 2. 在列表中找到目标设备此时可能显示为未命名或旧名字 # 3. 选中设备点 Assign device name # 4. 在弹出窗口中输入规划好的设备名如 s120pn # 5. 点 Assign name 完成逻辑说明在线分配设备名是把组态里写的名字真正烧到设备里。组态里写 s120pn在线分配也必须填 s120pn差一个字符都通不了。参数上分配设备名时 TIA Portal 会按 MAC 地址匹配设备所以同一网段里有多台同型号设备时先确认 MAC 再分配别选错。3.3 选标准报文 1 并确认 PZD 映射S120 作为 IO 设备需要给它选一个标准报文。文档用的是 “Standard telegram 1”。选完之后TIA Portal 会自动生成对应的 I/O 地址区你会看到类似 “Standard_telegram_1_PZD-2_2[AI/AO]” 这样的标识。标准报文 1 的结构是PLC 发给 S120 两个控制字——STW1控制字 1和 NSOLL_A转速设定值S120 回给 PLC 两个状态字——ZSW1状态字 1和 NIST_A实际转速。这四个字在 I/O 区里各占两个字节顺序是固定的。PZDPLC - S120S120 - PLCPZD1STW1控制字 1ZSW1状态字 1PZD2NSOLL_A转速设定NIST_A实际转速注意报文选错是通讯“看起来通了但控制不动”的最常见原因。如果你选了自由报文Free telegram却没自己配 PZD 数量PLC 侧写进去的控制字根本到不了 S120 的对应参数上。4. STARTER 侧配置让 S120 认识自己的设备名和报文4.1 通过 Accessible Nodes 找到 S120S120 侧的配置在 STARTER或 SCOUT里做。打开 STARTER先不建项目直接走 “Project - Accessible Nodes”让软件在线扫描。扫描到 S120 之后你会看到它的 CU320 节点。这一步的前提是 PG/PC 接口设置正确。在 STARTER 的 “Set PG/PC Interface” 里选你实际用的网卡协议选 PROFINET。如果扫不到先查网卡选对没有、网线插对没有、S120 的 CBE20 指示灯亮没亮。4.2 用 Edit Ethernet Node 分配 IP 和设备名在 STARTER 里找到 S120 之后用 “Edit Ethernet Node” 功能给它分配 IP 和设备名。这里填的 IP 和设备名要和 TIA Portal 组态里完全一致IP 192.168.0.2设备名 s120pn。# STARTER 中分配 IP 和设备名的路径 # 1. Project - Accessible Nodes扫描到 S120 # 2. 右键目标节点 - Edit Ethernet Node # 3. 在弹出窗口中填入 IP 地址和设备名 # 4. 点 Assign 完成分配逻辑说明这一步和 TIA Portal 里的在线分配设备名是同一件事只是从 STARTER 侧做。两边填的值必须一致。参数上如果 S120 之前已经被分配过别的设备名这里会显示旧名字直接覆盖成新的即可。4.3 配置报文并 Copy RAM to ROM设备名分配好之后回到 STARTER 的项目里给 S120 配置标准报文 1。文档里提到 SERVO_02 和 SERVO_03 两个驱动对象分别对应报文配置。配完之后有一个关键动作把参数从 RAM 复制到 ROMCopy RAM to ROM否则断电后配置丢失。# STARTER 中 Copy RAM to ROM 的操作 # 1. 在线连接到 S120 # 2. 右键 CU320 节点 - Target device - Copy RAM to ROM # 3. 等待写入完成期间不要断电逻辑说明S120 的配置默认存在 RAM 里断电就没了。Copy RAM to ROM 是把当前配置固化到 CF 卡上。参数上这个操作需要几十秒期间 CBE20 的通讯会中断属于正常现象等它写完再继续。5. 周期通讯编程DPRD_DAT/DPWR_DAT 与标准报文 1 的字节对应5.1 标准报文 1 的控制字和状态字含义在写程序之前得先搞清楚 STW1 和 ZSW1 每一位是什么意思。文档里重点提了几个STW1 的 Bit0 是“接通/断开”ON/OFF这是最基本的使能位。控制流程一般是先写 16#047E准备状态再写 16#047F运行中间还要处理使能和故障复位。NSOLL_A 是转速设定值文档给了一个换算关系4000H 对应 100%7FFFH 对应 200%。基准频率由参数 P2000 决定文档里设的是 50Hz。也就是说如果你要给定 50% 的转速NSOLL_A 写 2000H。信号含义关键值STW1 Bit0ON/OFF1接通STW1 16#047E准备使能前状态STW1 16#047F运行正式启动NSOLL_A 4000H100% 转速基准 P200050HzNSOLL_A 7FFFH200% 转速上限5.2 用 DPRD_DAT/DPWR_DAT 读写 PZD 区周期通讯用 DPRD_DAT 和 DPWR_DAT 这两个指令。DPWR_DAT 把 PLC 侧的数据写到 S120 的 PZD 区DPRD_DAT 从 S120 读回 PZD 区。// 伪代码示意DPWR_DAT 写控制字和转速设定 // 假设 LADDR Standard_telegram_1_PZD-2_2[AI/AO] 对应的硬件标识符 // MW20 STW1控制字1MW22 NSOLL_A转速设定 DPWR_DAT( LADDR : 硬件标识符, // 标准报文1的I/O地址 RECORD : MW20, // 起始地址连续4字节MW20MW22 DONE M10.0, ERROR M10.1, STATUS MW12 ); // DPRD_DAT 读状态字和实际转速 // MW10 ZSW1状态字1MW12 NIST_A实际转速 DPRD_DAT( LADDR : 硬件标识符, RECORD : MW10, // 起始地址连续4字节MW10MW12 DONE M11.0, ERROR M11.1, STATUS MW14 );逻辑说明DPWR_DAT 的 RECORD 参数指向 PLC 里存放待发送数据的起始地址长度由报文决定——标准报文 1 是 4 字节STW1 两字节 NSOLL_A 两字节。DPRD_DAT 同理RECORD 指向接收缓冲区。参数上LADDR 必须填标准报文 1 对应的硬件标识符在 TIA Portal 的设备概览里能看到通常显示为 “Standard_telegram_1_PZD-2_2[AI/AO]” 对应的地址。填错 LADDR 是读回数据全零或报错的主要原因。5.3 控制时序从 047E 到 047F文档给的控制流程是先给 STW1 写 16#047E让 S120 进入准备状态确认 ZSW1 的对应位反馈正常后再写 16#047F 启动。这个顺序不能反直接写 047F 可能因为使能条件不满足而报故障。// 控制时序示意 // 步骤1写准备状态 MW20 : 16#047E; // STW1 准备 MW22 : 16#2000; // NSOLL_A 50% (假设P200050Hz) // 调用 DPWR_DAT 发送 // 步骤2等待 ZSW1 反馈就绪检查 MW10 的对应位 // 步骤3写运行状态 MW20 : 16#047F; // STW1 运行 // 再次调用 DPWR_DAT逻辑说明047E 和 047F 的区别就在 Bit0。047E 的 Bit0 是 0047F 的 Bit0 是 1。先给 047E 是为了让驱动器完成内部准备等状态字反馈正常后再置位 Bit0。参数上NSOLL_A 的值要根据 P2000 换算P2000 改了同样的 NSOLL_A 对应的实际转速就变了。6. 参数读写WRREC/RDREC 走 Record 47 的完整流程6.1 为什么参数读写不能走周期通讯标准报文 1 只传 4 个字节的 PZD控制字和转速设定值够用但想改 P1121斜坡上升时间或者读 P1217 这种参数周期通讯的带宽里没有位置放。这时候要用非周期通讯走 PROFIdrive 的 DPV1 通道用 WRREC 写、RDREC 读Record 号是 47。文档里明确写了写参数用 WRREC读参数用 RDRECINDEX 填 47ID 填标准报文 1 对应的硬件标识符。数据区里按 PROFIdrive 参数通道的格式组织——参数号、子索引、读写属性、数据长度、数据内容。6.2 用 WRREC 写 P1121文档给的例子是写 P1121。操作是触发 M50.0调用 WRREC数据存在 DB3 里长度 10 字节。// WRREC 写参数示意 // DB3 中组织参数请求数据 // 触发位 M50.0 WRREC( REQ : M50.0, // 上升沿触发 ID : 硬件标识符, // 标准报文1的硬件ID INDEX : 47, // Record 47 PROFIdrive 参数通道 LEN : 10, // 数据长度 RECORD : DB3.DBB0, // 参数请求数据区 DONE M50.2, BUSY M50.3, ERROR M50.4, STATUS MW50 );逻辑说明REQ 需要上升沿触发不能一直置 1。ID 是标准报文 1 的硬件标识符和 DPRD_DAT/DPWR_DAT 用的是同一个。INDEX 固定 47。LEN 是请求数据的字节数文档里是 10。RECORD 指向 DB3 里组织好的参数请求结构。参数上如果 ERROR 置 1看 STATUS 的值查错误码——常见的是参数号不存在或数据格式不对。6.3 用 RDREC 读 P1217读参数的流程和写类似换成 RDREC触发位 M150.1数据存 DB6。// RDREC 读参数示意 // 触发位 M150.1读取结果存入 DB6 RDREC( REQ : M150.1, ID : 硬件标识符, INDEX : 47, MLEN : 10, // 最大接收长度 RECORD : DB6.DBB0, // 接收缓冲区 VALID M150.2, BUSY M150.3, ERROR M150.4, STATUS MW150 );逻辑说明RDREC 的 MLEN 是接收缓冲区的最大长度要大于等于实际返回的数据长度。VALID 置 1 表示数据有效。参数上读回来的数据在 DB6 里按 PROFIdrive 参数通道格式解析——先看参数号对不对再看数据内容。文档里读的是 SERVO_02 的 P1217返回值 16#04C1。提示WRREC/RDREC 和 DPRD_DAT/DPWR_DAT 用的是同一个硬件标识符但走的是不同的通讯通道。周期通讯和非周期通讯互不干扰可以同时用。7. 避坑与排查五条血泪经验7.1 设备名不匹配导致通讯起不来现象TIA Portal 里组态都对了在线看 S120 显示不可达或者报 “Station not reachable”。原因设备名没分配或者分配的名字和组态里写的不一致。PROFINET 靠设备名识别 IO 设备IP 只是辅助。解决在 TIA Portal 的 Online - Accessible devices 里找到设备重新分配设备名确保和组态里完全一致。分配完断电重启一次。7.2 GSD 文件版本不对导致报文选不了现象硬件目录里能找到 S120但报文列表里没有 “Standard telegram 1”或者选完之后编译报错。原因GSD 文件版本和 CU320 固件版本不匹配。文档基于 FW V4.3.2如果你的固件是 V4.4 或更高需要用对应版本的 GSD。解决确认 CU320 的实际固件版本下载匹配的 GSD 文件重新安装。安装前先卸载旧版本。7.3 LADDR 填错导致读写全零现象DPRD_DAT 读回来的数据全是 0或者 DPWR_DAT 报错 STATUS 非零。原因LADDR 填的不是标准报文 1 对应的硬件标识符或者填成了别的模块的地址。解决在 TIA Portal 的设备概览里找到标准报文 1 对应的 I/O 地址把那个硬件标识符复制到 LADDR 参数里。不要手敲容易错。7.4 控制字时序不对导致驱动器不启动现象STW1 写了 047F但 S120 没转ZSW1 反馈的位不对。原因跳过了 047E 的准备阶段或者使能条件没满足比如缺少 OFF2/OFF3 的置位。解决严格按 047E - 等反馈 - 047F 的顺序走。检查 ZSW1 的位定义确认使能反馈正常后再置位 Bit0。7.5 Copy RAM to ROM 没做导致断电丢配置现象调试的时候一切正常断电重启后 S120 的设备名或报文配置丢了。原因配置只存在 RAM 里没写到 CF 卡。解决每次改完 S120 的配置都执行一次 Copy RAM to ROM。这个操作在 STARTER 里是右键 CU320 节点 - Target device - Copy RAM to ROM。8. 一个参数换算的进阶技巧把 NSOLL_A 和 P2000 绑在一起看标准报文 1 里 NSOLL_A 的换算关系是很多人反复查文档的原因。文档给的是 4000H 对应 100%7FFFH 对应 200%基准是 P2000。但实际项目里 P2000 经常不是 50Hz可能是 60Hz 或者别的值。这时候如果你还按 4000H100% 去写实际转速就对不上。我一般会做一个换算表放在程序里把百分比和十六进制值的对应关系固化下来。比如 P200050Hz 时10% 对应 0666H25% 对应 1000H50% 对应 2000H75% 对应 3000H100% 对应 4000H。这个表可以直接在 HMI 上做成下拉选项操作工选百分比程序自动换算成 NSOLL_A 的值。百分比NSOLL_AP200050Hz实际转速10%0666H5Hz25%1000H12.5Hz50%2000H25Hz75%3000H37.5Hz100%4000H50Hz// 百分比转 NSOLL_A 的换算函数SCL 示意 FUNCTION PercentToNSOLL : Void VAR_INPUT Percent : Real; // 0.0 ~ 100.0 END_VAR VAR_OUTPUT NSOLL : Word; // 输出给 NSOLL_A END_VAR VAR_TEMP Raw : Real; END_VAR BEGIN // 4000H 16384 对应 100% Raw : Percent / 100.0 * 16384.0; // 限幅防止超过 7FFFH IF Raw 32767.0 THEN Raw : 32767.0; END_IF; NSOLL : REAL_TO_WORD(Raw); END_FUNCTION逻辑说明这个换算的核心是 4000H 等于十进制的 16384对应 100%。Percent 除以 100 再乘 16384 就是原始值。限幅到 327677FFFH是防止超过 200% 的上限。参数上如果你的 P2000 不是 50Hz这个函数不用改——因为 NSOLL_A 的百分比基准始终是 P2000P2000 改了同样的 NSOLL_A 对应的实际转速自动跟着变。还有一个容易忽略的点NSOLL_A 是带符号的。如果你需要反转给负值就行但要注意 7FFFH 是正向上限负向对应的是 8000H 附近。实际用的时候正转写 0000H~7FFFH反转写 8000H~FFFFH中间 0000H 是零速。从那以后我每次做 S120 的 PROFINET 项目都会先把 P2000 的值确认一遍再把这个换算函数丢进程序里HMI 上只让操作工选百分比。这样不管后面 P2000 怎么改操作侧的逻辑都不用动。希望帮到你。本文还有配套的精品资源点击获取