西门子博图 FB284 库指令详细手册
1. 概述
FB284 是西门子 TIA Portal(博图)中用于 PROFINET 通信的标准功能块,主要实现 PROFINET IO 控制器与 PROFIBUS DP 从站之间的数据交换。该功能块通过 PROFINET 到 PROFIBUS 的网关设备,使传统 PROFIBUS DP 从站能够接入 PROFINET 网络,实现与 S7-1200/1500 等 PLC 的通信。
FB284 属于 "PROFIBUS DP/S7-1200/S7-1500 as DP Master" 库,支持在 S7-1200/S7-1500 PLC 中作为 DP 主站与 PROFIBUS DP 从站进行通信。
2. 功能块基本信息
- 功能块类型:FB(功能块)
- 所属库:
SIMATIC_NET_CP
- 兼容 PLC:S7-1200 (固件 V4.0 及以上)、S7-1500 (固件 V1.8 及以上)
作用:建立和管理与 PROFIBUS DP 从站的通信连接,实现数据交换
3. 引脚定义详解
3.1 输入参数 (Inputs)
参数名称 | 数据类型 | 描述 | 取值范围 |
---|---|---|---|
Mode | INT | 操作模式选择 | 1: 运行模式(正常数据交换) 2: 停止模式(暂停数据交换) 3: 复位模式(清除错误状态) |
Control | WORD | 控制字,用于触发特定功能 | 位 0: 1 = 启动数据交换 位 1: 1 = 复位错误状态 位 2: 1 = 保存参数到从站 其他位:保留,按设备手册定义 |
Inputs | ANY | 指向 PLC 发送到 DP 从站的数据缓冲区 | 需指向全局数据块 (DB),数据长度与从站匹配 |
Outputs | ANY | 接收 DP 从站数据的缓冲区 | 需指向全局数据块 (DB),数据长度与从站匹配 |
DP_Slave_Addr | INT | DP 从站的物理地址 | 1-126(PROFIBUS 标准地址范围) |
Max_Input_Len | INT | 最大输入接收的最大数据长度(字节) | 0-1440(根据从站支持的最大输入长度设置) |
Max_Output_Len | INT | 发送的最大数据长度(字节) | 0-1440(根据从站支持的最大输出长度设置) |
Watchdog_Time | INT | 通信看门狗时间(ms) | 10-65535 ms(建议值:100-1000 ms) |
HW_ID | DWORD | 硬件标识符,指向 PROFIBUS 接口模块 | 从硬件配置中获取的接口模块 ID |
Timeout | TIME | 通信超时时间 | T#100MS - T#30S(默认 T#1S) |
3.2 输出参数 (Outputs)
参数名称 | 数据类型 | 描述 | 状态说明 |
---|---|---|---|
Status | WORD | 功能块工作状态字 | 位 0: 1 = 数据交换正常 位 1: 1 = 存在错误 位 2: 1 = 看门狗超时 位 3: 1 = 从站未就绪 位 4: 1 = 参数错误 位 5: 1 = 数据长度不匹配 |
Error_Code | INT | 错误代码 | 0: 无错误 16#01: 初始化错误 16#05: 通信超时 16#0A: 数据长度不匹配 16#10: 从站未响应 16#15: 地址无效 |
Input_Len | INT | 实际接收的数据长度(字节) | 0 到 Max_Input_Len 之间 |
Output_Len | INT | 实际发送的数据长度(字节) | 0 到 Max_Output_Len 之间 |
Busy | BOOL | 忙信号 | TRUE: 功能块正在处理数据交换 FALSE: 空闲状态 |
Done | BOOL | 完成信号 | TRUE: 一次数据交换完成 FALSE: 未完成 |
Error | BOOL | 错误信号 | TRUE: 存在错误 FALSE: 无错误 |
DP_Status | WORD | DP 从站状态信息 | 反映从站的具体状态(参考从站手册) |
3.3 静态参数 (Static)
参数名称 | 数据类型 | 描述 |
---|---|---|
Last_Error | INT | 上一次发生的错误代码 |
Cycle_Counter | UINT | 数据交换循环计数器 |
State | INT | 功能块内部状态机值 |
4. 典型应用配置步骤
4.1 硬件配置
- 在 TIA Portal 中创建新项目,添加相应的 PLC(如 S7-1214C)
- 添加 PROFINET 到 PROFIBUS 网关(如 SCALANCE XP208-2IRT)
- 在网关下添加 PROFIBUS DP 从站设备
- 记录 PROFIBUS 接口模块的 HW_ID(硬件标识符)
- 配置 DP 从站地址,确保与实际设备地址一致
4.2 软件配置
- 从库中调用 FB284,生成背景数据块(如 DB284)
- 定义输入输出数据缓冲区(如 DB10 为发送区,DB11 为接收区)
- 配置 FB284 的输入参数:plaintext
Mode := 1; // 运行模式 Control := 16#0001; // 启动数据交换 Inputs := P#DB10.DBX0.0 BYTE 8; // 发送缓冲区,8字节 Outputs := P#DB11.DBX0.0 BYTE 8; // 接收缓冲区,8字节 DP_Slave_Addr := 3; // DP从站地址为3 Max_Input_Len := 8; // 最大接收长度8字节 Max_Output_Len := 8; // 最大发送长度8字节 Watchdog_Time := 500; // 看门狗时间500ms HW_ID := "PROFIBUS接口模块".HW_ID; // 硬件标识符
4.3 程序调用
在 OB1(主循环组织块)中调用 FB284:
plaintext
CALL "DP_Master" , DB284 Mode := 1 Control := 16#0001 Inputs := P#DB10.DBX0.0 BYTE 8 Outputs := P#DB11.DBX0.0 BYTE 8 DP_Slave_Addr := 3 Max_Input_Len := 8 Max_Output_Len := 8 Watchdog_Time := 500 HW_ID := "PROFIBUS接口".HW_ID Timeout := T#1S Status => DB284.Status Error_Code => DB284.Error_Code Input_Len => DB284.Input_Len Output_Len => DB284.Output_Len Busy => DB284.Busy Done => DB284.Done Error => DB284.Error DP_Status => DB284.DP_Status
5. 错误处理与诊断
5.1 常见错误及解决方法
错误代码 | 描述 | 解决方法 |
---|---|---|
16#05 | 通信超时 | 检查 PROFIBUS 物理连接 确认从站电源已上电并正常运行 增大 Watchdog_Time 值 |
16#0A | 数据长度不匹配 | 检查 Max_Input_Len/Max_Output_Len 是否与从站规格一致 确认 Inputs/Outputs 指向的缓冲区大小是否正确 |
16#10 | 从站未响应 | 检查从站地址是否正确 确认从站是否正确接入网络 检查从站是否故障 |
16#15 | 地址无效 | 确认 DP_Slave_Addr 在 1-126 范围内 确认该地址的从站是否存在 |
5.2 错误处理程序示例
plaintext
// 错误处理逻辑 IF "DB284".Error THEN "Error_Flag" := TRUE; "Error_Message" := "DB284".Error_Code; // 尝试复位错误 "DB284".Control := 16#0002; // 置位错误复位位 "Reset_Timer" := T#2S; // 保持复位信号2秒 "Reset_Active" := TRUE; END_IF // 复位信号处理 IF "Reset_Active" THEN IF "Reset_Timer" <= T#0S THEN "DB284".Control := 16#0001; // 恢复正常控制字 "Reset_Active" := FALSE; "Error_Flag" := FALSE; END_IF END_IF
6. 使用注意事项
- 数据一致性:确保 Inputs/Outputs 指向的数据块具有足够的长度,且不与其他程序块冲突
- 地址设置:DP_Slave_Addr 必须与实际从站的物理地址完全一致,可通过从站设备上的拨码开关或软件配置修改
- 看门狗时间:Watchdog_Time 应设置为从站响应时间的 2-3 倍,过短会导致频繁超时,过长则会延长故障检测时间
- 循环调用:FB284 应在 OB1 中循环调用,调用间隔应小于 Watchdog_Time 的一半
- 参数保存:如需将参数永久保存到从站,可将 Control 的位 2 置 1(16#0004),完成后需复位该位
- 硬件标识符:HW_ID 必须正确指向 PROFIBUS 接口模块,否则会导致通信失败