第八章 DFB & 诊断 DFB
导出功能块 DFB : 用户逻辑被封装在一个功能块当中,能够多次重用(满足应用的特殊要求) 使用 设计人员编写 DFB 功能块模型,称为 ‘DFB 类型’ 最终用户创建这个模块类型的数据映象,称为 “实例”, 并输入各个功能块实例的参数 设计人员和用户之间可将DFB导出 / 导入 DFB 编码在CPU 中只装载一次 DFB 可以被保护 DFB 可被创建它的应用程序使用,也可以放在功能块库当中,被所有的应用程序使用
原理 DFB 包括 : 输入/输出参数 公共或私有内部变量 (声明) 由LD, IL, ST, FBD语言编写的一个或多个段 注 : 一个 DFB 可以在程序段内嵌套调用其它DFB. DFB 用于 结构化应用程序 简化程序设计和输入 提高程序的可读性 简化调试 保护技术秘密 improve the readability of the program They provide, in Ladder language, a graphic functional view of the block making programming and debugging easier make debugging easier the PLC variables handled by the DFB function block are identified on its interface reduce the volume of code generated since the code corresponding to the DFB is only loaded once, however many calls to the DFB there are in the program
结构 创建DFB类型 名称 : 最多32 个字符. 参数 : 输入, 输出, 输入/输出 内部变量 : 公共 : 可被应用程序访问 私有 : 不能被应用程序访问 编码段 : 可以用 LD, IL, ST 或 FBD语言编写 遵循 IEC 标准, 一个DFB只包含一个程序段 不遵循 IEC 标准 , 一个DFB可包含几个程序段 (推荐) 注释 : 最多1024 个字符,不允许使用格式字符 描述文件和保护等级 DFB 类型名称 输入 变量复制 I/O 公共变量 私有变量 DFB 代码 输出
创建 – 原理 打开 Unity Pro 应用 创建新的 DFB 类型 编辑新创建的 DFB 类型的属性 编辑 DFB 的参数 项目浏览器 创建 DFB 类型 编辑 DFB 类型 编辑 DFB 参数 编辑 DFB 代码 分析 DBF 类型 调试 DFB 类型 打开 Unity Pro 应用 创建新的 DFB 类型 编辑新创建的 DFB 类型的属性 编辑 DFB 的参数 在一个或多个段中输入 DFB 代码 分析 DFB 类型并使它有效 调试 DFB 类型 导出 DFB (如果需要) 用于其它应用程序 使用 DFB
属性 “DFB 类型” 在数据编辑器中键入, 选择 DFB 并右击 => properties 给出关于 DFB 类型的信息 在写模式下可以有一些属性 : 名称 注释 保护 : 选择保护等级和密码 (选择后自动询问) 注 : 独立于应用保护 Diag :定义该 DFB 是否可被用户用作诊断 DFB When a DFB is protected in "Read Only" or in "No read& Write" mode, it is possible to export the DFB. But the "*.XDB" file is encoded.
I/O 接口 输入 : 最多 32 个 对于 DFB 为只读模式 从应用程序中传输数值给 DFB 类型和名称 (最多32 个字符) 输出 : 最多 32 个 对于 DFB 为可写模式 从 DFB中传输数值给应用程序 输入/输出 : 最多 32 个 对于 DFB 为可读/可写模式 传输数值给 DFB, 经过运算、修改后返回给应用程序 DFB 类型名称 输入 I/O 公共变量 私有变量 DFB 代码 输出 For each of the DFB parameters, the following object families may be used : (1) Derived data family, except input/output derived data types (IODDT) (2) All generic data families, except the ANY_ARRAY family, (3) Except for EBOOL-type static variables, with Quantum PLCs, (4) Except for BOOL and EBOOL-type variables, (5) These parameters cannot be used outside the call for the function block.
变量 私有 : 不限制 DFB 的内部变量 只用于 DFB 编程 (例如 : 中间计算) 名称 (最多 8 个字符) 公共 : 不限制 输入 变量复制 I/O 公共变量 私有变量 DFB 代码 私有 : 不限制 DFB 的内部变量 只用于 DFB 编程 (例如 : 中间计算) 名称 (最多 8 个字符) 公共 : 不限制 在调整模式下可以由应用程序或用户在功能块外读取 (有读写权限) 公共变量的数值, 经由应用程序调整修改, 可以通过设定%S94为 1去替换初始值 输出 For each of the DFB parameters, the following object families may be used : (1) Derived data family, except input/output derived data types (IODDT) (2) All generic data families, except the ANY_ARRAY family.
代码 组织成代码段 : 遵循 IEC标准 , 一个DFB 包含单个代码段 不遵循 IEC 标准, 一个 DFB包含几个代码段 代码段 输入 变量复制 I/O 公共变量 私有变量 DFB 代码 组织成代码段 : 遵循 IEC标准 , 一个DFB 包含单个代码段 不遵循 IEC 标准, 一个 DFB包含几个代码段 代码段 通过IL,ST, LD, FBD编写 名称 (最多 32 个字符) 有效条件 保护属性 (无保护, 写保护, 读/写保护) 注释 (最多 256 个字符) 只使用为功能块定义的参数或系统字和位进行编程 输出
举例 : 创建 名称 : Parts_counter 输入 : Rst : 计数器复位 Preset : 计数器预置值 输出 : Done : 达到预置值信号 公共变量 : Cur_val : 通过计数输入累加得到的当前值 代码 描述表
使用 – 原理 打开 Unity Pro 应用 导入 DFB 类型 (如果需要带版本控制) 创建 DFB 实例 打开程序段 项目浏览器 创建 DFB 实例 打开一个程序段 编辑程序 修改参数 传输 & 测试程序 打开 Unity Pro 应用 导入 DFB 类型 (如果需要带版本控制) 创建 DFB 实例 打开程序段 在程序段中使用 DFB 实例 修改参数 (初始值) 下载并测试程序
使用 – 举例 创建 DFB 实例: 除去事件任务和 SFC 转换,可在应用程序的所有任务中创建 DFB 实例 DFB 实例用作 : LD 或 FDB 语言中的标准功能块 ST 或 IL 语言中的基本功能
概览 用于应用程序诊断的工具 PLC 程序中的过程控制 内置诊断 追溯错误的起源 (直接在 PLC 层次) 可以创建用户自己的诊断 DFB (Quantum & Premium) Schneider 预定义的诊断 DFB 列表 ALRM_DIA : 简单的事件监测 (Quantum & Premium) EV_DIA : 事件监测 (Quantum & Premium) MV_DIA : 运动监测 (Quantum & Premium) ASI_DIA & A2SI_DIA : AS-i 总线上的设备监测(只用于 Premium)
原理 检测 诊断DFB 记忆 诊断缓冲区 查看 观察器 应用 消息 观察器 1 确认 登记 诊断缓冲 区 日期 观察器 2 PLC
登记 报警登记 错误登记指令 REGDFB ( ) 当错误发生时,把带时间戳的记录写入到诊断缓存区中. 只在 Diagnostic DFB 中使用 语法 REGDFB (AREA, 16#0062, SLEN, CTRL, PIN, VALPIN, ESTS, ERID, STAT) Input Parameters
记录注销 报警记录注销 ‘注销记录’ 指令 DEREG ( ) 更新与错误有关的日期和时间缓冲区 当所有观察器都得到确认信息时,消息从诊断缓冲区中被删除 只在 Diagnostic DFB 内部使用 语法 OUT := DEREG(ERID); 注: 报警被保持在诊断缓冲区中,并可以被所有观察器读取,直到错误被确认为止 (对于需要确认的错误)。 Inputs parameters Outputs parameters
创建 激活Application Diagnostics选项 (Tool => Project settings) 在变量编辑器中创建 DFB 类型 或 如果需要,导入诊断 DFB 的‘ 模板 ’ 的源代码 在这个 DFB 类型的属性中, 使得 Diag 选项有效 声明 DFB 输入/输出和内部变量 注 : 所有需要监测的输入,其 Diag 属性必须被选中
创建 (续) 键入描述信息 键入代码 使用 REGDFB( ) 和 DEREG ( ) 指令 注 : PIN 参数是被监测的输入管脚的顺序编号 创建 DFB 实例 定制缺省消息 调试 DFB 导出 DFB Example : One diagnostic DFB with 5 inputs and only 3 are monitored. The PIN parameter of the registration function has the following value : PIN = 1 PIN = 2 PIN = 3
实 验
实验 DFB 的创建及调用 步骤 动作 1 在 Project Browser 中双击 Derived FB Types,访问数据编辑器。 2 定义一个 DFB,名为 conveyor_DFB。 3 在 inputs 文件夹下面定义该 DFB 的输入变量: run,类型为 EBOOL box,类型为 EBOOL stop,类型为 EBOOL 4 在 outputs 文件夹下面定义该 DFB 的输出变量: running,类型为 EBOOL 5 在 public 文件夹下面定义该 DFB 的公共变量: flash,类型为 EBOOL timer1,类型为 TIME counter1,类型为 UDINT reset1,类型为 BOOL 6 在 Sections 文件夹下面定义该 DFB 的代码段: 名称为 conveyor_control,使用 LD 语言进行编程。
DFB 的创建及调用(续) 步骤 动作 7 双击 Conveyor_control,进入 LD 编程界面。 8 在主任务的代码段中打开前面编写好的 Conveyor 代码段,选中(Edit -> Select All)所有的控制代码进行复制(Edit -> Copy),然后在 Conveyor_control 代码段中进行粘贴 (Edit -> Paste)。 9 回到数据编辑器,右键 Conveyor_DFB,选择 Analyze Type 对先前定义的DFB作类型分析。如有错误或者警告,双击输出窗口中的信息行对相应的代码进行修改,之后重新进行 Analyze Type 的操作,直到代码正确无误为止。 10 在主任务当中新建一个代码段,名为 conveyor_fbd,选用 FBD 语言进行编程。 11 双击 conveyor_fbd,访问 FBD 语言编辑界面。 12 在 FBD 语言编辑器中单击右键,访问 FFB Input Assistant 命令,在 FFB Type字段的后面选择 按钮,访问 Application 本地库,在库中选择之前定义好的 Conveyor_DFB,把它放置到编辑器当中,实例名为 conveyor1。 13 为 conveyor1 连接变量,如下图所示: 14 为 Conveyor_DFB 添加一个输入管脚,名为 feedback,类型为 EBOOL。右键 Conveyor_DFB,选择 Analyze Type 命令分析该 DFB 类型。观察 conveyor1 的管脚变化。