在西门子 PLC(如 S7-300/400/1200/1500)的编程中,系统功能(SFC) 和系统功能块(SFB) 是集成在 CPU 操作系统中的预定义程序模块,用于实现 PLC 与外部设备的通讯、系统管理、数据处理等核心功能。二者均由西门子官方开发,可直接调用,无需用户编写底层代码,但适用场景和特性有所不同。
一、系统功能(SFC,System Function)
SFC 是无状态的系统函数,用于执行特定的系统操作(如数据传输、时钟控制、模块诊断等),调用时无需分配背景数据块,执行后不保留中间状态。
核心特性
常用 SFC 及应用场景
SFC 编号(以 S7-300/400 为例) | 功能描述 | 典型应用场景 |
---|---|---|
SFC0 "SET_CLK" | 设置 PLC 实时时钟 | 校准 CPU 内部时钟,同步系统时间 |
SFC1 "READ_CLK" | 读取 PLC 实时时钟 | 记录事件时间(如报警发生时间) |
SFC2 "TERM" | 终止用户程序执行 | 紧急情况下停止程序运行 |
SFC3 "DPNRM_DG" | 读取 PROFIBUS-DP 从站诊断数据 | 诊断 DP 从站故障(如模块离线、通讯错误) |
SFC4 "TINT" | 启动定时中断 | 触发周期性中断任务(如 10ms 执行一次) |
SFC5 "GTINT" | 取消定时中断 | 停止已启动的定时中断 |
SFC14 "DPRD_DAT" | 从 PROFIBUS-DP 从站读取数据 | 读取远程 I/O 模块的输入数据 |
SFC15 "DPWR_DAT" | 向 PROFIBUS-DP 从站写入数据 | 控制远程 I/O 模块的输出信号 |
SFC21 "FILL" | 填充数据(将指定值写入连续存储区) | 初始化数据块、清空数组 |
SFC46 "MOD_RST" | 复位模块错误状态 | 清除模块故障标志,恢复正常运行 |
调用示例(S7-1200/1500 中调用 SFC1 "READ_CLK")
awl
// 读取PLC实时时钟,存储到DB1中的时间结构体 CALL "READ_CLK" RET_VAL => #RetVal // 返回值(0=成功,非0=错误) CDT => "DB1".CurrentTime // 存储当前时间的结构体(年月日时分秒)
二、系统功能块(SFB,System Function Block)
SFB 是有状态的系统功能块,用于实现复杂且需要保存状态的系统功能(如通讯协议、运动控制、脉冲输出等),调用时必须分配背景数据块(Instance DB) 以保存运行状态和参数。
核心特性
常用 SFB 及应用场景
SFB 编号(以 S7-300/400 为例) | 功能描述 | 典型应用场景 |
---|---|---|
SFB3 "TP" | 脉冲定时器(输出脉冲宽度可控) | 控制设备单次运行时间(如阀门打开 5 秒后关闭) |
SFB4 "TON" | 接通延时定时器 | 延时启动设备(如系统上电后 10 秒启动电机) |
SFB5 "TOF" | 断开延时定时器 | 延时停止设备(如停机后风扇继续运行 30 秒) |
SFB6 "RS" | 复位优先型触发器 | 实现报警的置位与复位逻辑 |
SFB7 "SR" | 置位优先型触发器 | 实现互锁控制(如电机正反转切换) |
SFB12 "BSEND" | 块发送(通过 MPI/DP 发送数据块) | 主从 PLC 之间的数据通讯 |
SFB13 "BRECV" | 块接收(通过 MPI/DP 接收数据块) | 接收远程 PLC 发送的数据 |
SFB49 "CTRL_8" | 控制 8 路数字量输出(带诊断) | 集中控制多个电磁阀、指示灯 |
SFB102 "CAN_SEND" | CAN 总线数据发送 | 与支持 CANopen 的设备通讯(如变频器) |
SFB103 "CAN_RECV" | CAN 总线数据接收 | 接收 CANopen 设备的反馈数据 |
调用示例(S7-1200/1500 中调用 SFB4 "TON")
awl
// 接通延时定时器:输入ON后,延时5秒输出ON CALL "TON" , "DB_TON" IN1 := "Start_Signal" // 启动信号(ON时开始计时) PT := T#5S // 延时时间5秒 Q => "Delay_Output" // 延时后输出(ON表示计时完成) ET => "Elapsed_Time" // 已运行时间(当前计时值)
三、SFC 与 SFB 的核心区别
对比维度 | 系统功能(SFC) | 系统功能块(SFB) |
---|---|---|
背景数据块 | 不需要 | 必须分配(存储状态和参数) |
状态保存 | 无状态(不保存中间结果) | 有状态(依赖背景数据块保存状态) |
功能复杂度 | 实现简单、单次性操作 | 实现复杂、时序性或持续性操作 |
典型应用 | 数据读写、时钟控制、诊断查询 | 定时器、通讯协议、运动控制 |
调用方式 | 直接调用,仅传入输入参数 | 需关联背景数据块,参数存储在 DB 中 |
四、使用注意事项
总结
SFC 和 SFB 是西门子 PLC 系统提供的 “预制功能模块”,简化了复杂系统功能的实现:
合理使用 SFC/SFB 可大幅减少用户编程工作量,提升程序的可靠性(官方预定义模块经过严格测试),是工业自动化编程的核心工具。