简介:这份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.2;S120 侧是 CU320-2DP,订货号 6SL3040-1MA00-0AA0,Version C,固件 V4.3.2,插 CBE20 通讯模块(6SL30550AA00-2EB0);电机模块 6SL3120-2TE15-0AA3 Version B,配 1FK7022-5AK71-1LA3 电机;交换机用 SCALANCE X208(6GK5208-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 设备名 plc1200,IP 192.168.0.1;CU320-2DP 设备名 s120pn,IP 192.168.0.2;编程用的 PG 是 192.168.0.126,子网掩码统一 255.255.255.0。
| 设备 | Device name | IP 地址 |
|---|---|---|
| CPU1214C | plc1200 | 192.168.0.1 |
| CU320-2DP | s120pn | 192.168.0.2 |
| PG(编程电脑) | — | 192.168.0.126 |
PROFINET 的设备名不是可选项,是 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 区里各占两个字节,顺序是固定的。
| PZD | PLC -> S120 | S120 -> PLC |
|---|---|---|
| PZD1 | STW1(控制字 1) | ZSW1(状态字 1) |
| PZD2 | NSOLL_A(转速设定) | NIST_A(实际转速) |
注意:报文选错是通讯“看起来通了但控制不动”的最常见原因。如果你选了自由报文(Free telegram)却没自己配 PZD 数量,PLC 侧写进去的控制字根本到不了 S120 的对应参数上。
4. STARTER 侧配置:让 S120 认识自己的设备名和报文
4.1 通过 Accessible Nodes 找到 S120
S120 侧的配置在 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 复制到 ROM(Copy 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 Bit0 | ON/OFF | 1=接通 |
| STW1 16#047E | 准备 | 使能前状态 |
| STW1 16#047F | 运行 | 正式启动 |
| NSOLL_A 4000H | 100% 转速 | 基准 P2000=50Hz |
| NSOLL_A 7FFFH | 200% 转速 | 上限 |
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(控制字1),MW22 = NSOLL_A(转速设定) DPWR_DAT( LADDR := 硬件标识符, // 标准报文1的I/O地址 RECORD := MW20, // 起始地址,连续4字节:MW20+MW22 DONE => M10.0, ERROR => M10.1, STATUS => MW12 ); // DPRD_DAT 读状态字和实际转速 // MW10 = ZSW1(状态字1),MW12 = NIST_A(实际转速) DPRD_DAT( LADDR := 硬件标识符, RECORD := MW10, // 起始地址,连续4字节:MW10+MW12 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% (假设P2000=50Hz) // 调用 DPWR_DAT 发送 // 步骤2:等待 ZSW1 反馈就绪(检查 MW10 的对应位) // 步骤3:写运行状态 MW20 := 16#047F; // STW1 = 运行 // 再次调用 DPWR_DAT逻辑说明:047E 和 047F 的区别就在 Bit0。047E 的 Bit0 是 0,047F 的 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,读参数用 RDREC,INDEX 填 47,ID 填标准报文 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 或者别的值。这时候如果你还按 4000H=100% 去写,实际转速就对不上。
我一般会做一个换算表放在程序里,把百分比和十六进制值的对应关系固化下来。比如 P2000=50Hz 时,10% 对应 0666H,25% 对应 1000H,50% 对应 2000H,75% 对应 3000H,100% 对应 4000H。这个表可以直接在 HMI 上做成下拉选项,操作工选百分比,程序自动换算成 NSOLL_A 的值。
| 百分比 | NSOLL_A(P2000=50Hz) | 实际转速 |
|---|---|---|
| 10% | 0666H | 5Hz |
| 25% | 1000H | 12.5Hz |
| 50% | 2000H | 25Hz |
| 75% | 3000H | 37.5Hz |
| 100% | 4000H | 50Hz |
// 百分比转 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 就是原始值。限幅到 32767(7FFFH)是防止超过 200% 的上限。参数上,如果你的 P2000 不是 50Hz,这个函数不用改——因为 NSOLL_A 的百分比基准始终是 P2000,P2000 改了,同样的 NSOLL_A 对应的实际转速自动跟着变。
还有一个容易忽略的点:NSOLL_A 是带符号的。如果你需要反转,给负值就行,但要注意 7FFFH 是正向上限,负向对应的是 8000H 附近。实际用的时候,正转写 0000H~7FFFH,反转写 8000H~FFFFH,中间 0000H 是零速。
从那以后我每次做 S120 的 PROFINET 项目,都会先把 P2000 的值确认一遍,再把这个换算函数丢进程序里,HMI 上只让操作工选百分比。这样不管后面 P2000 怎么改,操作侧的逻辑都不用动。希望帮到你。
本文还有配套的精品资源,点击获取