
SFC14 (DPRD_DAT) 和 SFC15 (DPWR_DAT) 是西门子 S7-300/400/1200/1500 PLC 中,用于 PROFIBUS-DP 或 PROFINET IO 通讯的系统功能,核心作用是读写从站的一致性(连续)数据,确保多字节数据完整传输、不被拆分。
一、基本作用
SFC14 DPRD_DAT(读一致性数据)
从 DP 从站 / IO 设备的输入区(Input)读取连续数据,存入 CPU 的 DB 块、M 区或过程映像区。
→ 适用:变频器、伺服、智能从站等大于 4 字节的结构化数据(如控制字 + 状态字 + 实际值)。
SFC15 DPWR_DAT(写一致性数据)
将 CPU 中连续数据写入 DP 从站 / IO 设备的输出区(Output)。
→ 适用:发送多字节命令、设定值、参数到从站。
二、核心参数(STEP 7 经典 / TIA)
SFC14 读
plaintext
CALL SFC14
LADDR := W#16#100 // 从站输入起始地址(十六进制,硬件组态地址)
RECORD := P#DB10.DBX0.0 BYTE 16 // 接收区(ANY指针,长度匹配组态)
RET_VAL:= MW100 // 错误码:0=成功,≠0=故障
LADDR:DP 从站输入模块的逻辑起始地址(十六进制)。
RECORD:目标存储区(必须是 ANY 指针,仅允许 BYTE 类型)。
RET_VAL:返回值 / 错误码。
SFC15 写
plaintext
CALL SFC15
LADDR := W#16#110 // 从站输出起始地址
RECORD := P#DB11.DBX0.0 BYTE 16 // 数据源区
RET_VAL:= MW102
LADDR:从站输出模块起始地址。
RECORD:数据源区(ANY 指针,BYTE)。
RET_VAL:返回值 / 错误码。
三、为什么要用 SFC14/SFC15(关键:一致性)
普通 I/O 访问(如 L IB0、T QB0):
只能按字节 / 字零散读写。
多字节数据可能在 PLC 扫描周期中被拆分、更新一半,导致数据错误。
SFC14/SFC15:
原子性传输:整个数据块一次性完整读写。
保证数据一致性(如 4/8/16 字节控制字、状态字、坐标值)。
最大长度:最多 32 字节(Profibus-DP 标准)support.automation.siemens.com。
四、常见错误码(RET_VAL)
W#16#0000:正常
W#16#8090:地址错误 / 长度不匹配
W#16#8091:RECORD 区域长度错误
W#16#80A0:DP 连接故障 / 从站无响应
W#16#80A1~80A3:硬件 / 通讯故障
五、适用场景
与 ** 变频器(MM440、G120、S120)** 通讯
与 伺服驱动器通讯
与 ** 智能 DP 从站(如第三方仪表、机器人)** 通讯
S7‑300/400 之间 DP 耦合 / 智能从站数据交换
六、使用要点
硬件组态必须先做:
正确分配从站 I/O 地址、长度。
LADDR 必须与组态完全一致(十六进制)。
RECORD 长度必须匹配:
读 / 写长度 = 组态的从站 I/O 长度。
调用位置:
通常在 OB1 或 **OB35(定时中断)** 中调用。
TIA Portal:
S7‑1200/1500 对应指令:DPRD_DAT / DPWR_DAT。
七、简单示例(STEP 7)
plaintext
// 读:从地址 256 (100H) 读 16 字节 → DB10
CALL SFC14
LADDR := W#16#100
RECORD := P#DB10.DBX0.0 BYTE 16
RET_VAL:= MW100
// 写:DB11 16 字节 → 从站地址 272 (110H)
CALL SFC15
LADDR := W#16#110
RECORD := P#DB11.DBX0.0 BYTE 16
RET_VAL:= MW102