前言
通过上一个文章的介绍,我们发现LabVIEW自带的错误管理依旧比较基础,如果需要对错误进行很好的管理,则需要进一步的进行程序编写。用于在程序设计的过程中,为了保证程序的健壮性,我们需要 1.忽略一些不需要的错误 2.对特定的一些错误做额外的处理 3.将一些有可能为以后工作所需要的错误进行记录
上个文章中,小黑学习了Error Ring,并且了解了错误的一些处理,今天小黑带大家看看SEH错误处理工具包的内容。
什么是SEH
SEH的全称是Structured Error Handler (SEH) Library,库提供了一种组织和管理错误的机制。 1.SEH包括一个可配置的Express VI,可帮助处理特定错误; 2.SEH建立了传输错误的通信机制,*错误处理程序的模板; 3.SEH建立了各种支持的VI和实用程序,便于对错误进行集中管理。如何使用SEH
在特定错误容易出现的地方,可以放置Express VI,用于捕获这些错误,在错误最容易出现的地方捕获这些错误有以下几点明显的好处:1.错误捕获的时候接近错误源头,你可以避免由于错误在线程中专递导致最终错误无法辨别。由于LabVIEW中的产生错误的代码可以在很多位置使用而且相同的错误可以在不同的地方产生,如果不对错误的源头记录,往往还需要花费大量的时间去定位错误的位置。2.捕获错误接近错误源头可以有助于错误修正措施的编写。例如:有些错误重复检测的时候,最好的方式是直接检测并且处理。特定错误搜集功能
如下图所示,特定错误收集功能用于捕获指定的错误代码,这里使用Express VI来控制和捕获错误,通过简单的配置即可实现操作。How To Use
1.将Express VI放置于错误产生的位置2.双击该VI弹出配置对话框(这里左侧的工具栏稍微有些错位...)3.点击加号,可以新增错误,在错误输入对话框,可以定义单个的错误,或者是一个错误的范围点击右键菜单也可以添加和删除Code 4.Input的Tab页面配置在这个页面可以勾选Detect Warning,用于检测警告通常错误簇可以定义警告和普通错误5.Action的配置页面
名称 | 说明 | 备注 |
Retry | 确定特定错误处理程序是否应尝试重新执行代码 | 请参阅重试部分 |
Number of Retries | 确定重试代码的次数 | 此选项仅在启用重试时可见 |
Infinite | 表示重试次数没有限制 | 此选项仅在启用重试时可见 |
Call VI | 从内存中调用VI | 请参阅实时错误处理程序部分 |
VI To Call | 确定应该调用哪个VI,键入VI名称 | 参阅调用VI部分 |
名称 | 说明 | 备注 |
Notify | 将错误传送到*错误处理程序 | 参阅错误通信部分 |
Priority | 确定应处理通知的顺序, 较低优先级号码具有较高的优先级,0是最高优先级 | |
Classify | 对通知进行分类。 请注意,此分类仅适用于通知,不适用于错误输出。 | 请参阅分类错误部分 |
Classification | 错误类型的字符串描述。 请注意,在实时版本的库中,字符串必须为四个或更少的字符 | 有关详细信息,请参阅分类错误部分。 |
名称 | 说明 | 备注 |
Clear Error | 清除错误 | |
Convert to Warning | 将错误转换为警告 | |
Classification | 错误类型的字符串描述 | 有关详细信息,请参阅分类错误部分。 |
常规用法
1.忽略错误当需要用户选择一些文件的时候,如果用户取消,则会提示43的错误,通常我们会对这个错误进行处理,所以使用SEH工具包,直接忽略这个目标错误即可2.重试重试功能可以允许你在出现一些错误的时候,重新运行程序,并且定义执行几次错误在使用时,通常要与Clear Error一同使用,以便下一次的运算可以在无错误的情况下运行 3.转换为警告这个地方可以产生错误,并将错误转换为警告。主要用在将错误的布尔由真转换为假,这样可以用于保存和显示错误,但是不影响后续代码的执行。4.分类错误SEH工具包可以对错误进行分类处理,帮助建立中心错误处理管理。由于即使是相同的错误,也会出现不同的处理方法,所以需要对错误进行分类处理。例如:同样是文件不存在,如果是关键的配置文件不存在,则需要提示并且终止运行,而日志文件不存在,我们只需要重新创建一个即可。
错误可以同时使用Classify Error VI或者使用Express VI来分类使用分类会在错误信息中,增加一个*Error Class = XXX*的信息,用于分类错误 5.Call VI
需要注意的是 1. 这里VI必须是内存中的VI,否则会报错;这里可以将需要调用的VI以静态引用的方式放在程序框图中,确保VI可以加载 2. 调用的VI相当于一个执行脚本,不会弹出前面板,所以不要调用一些需要UI处理的脚本,只适合做一些简单的操作
6.Error Communication 错误通讯在通讯页面,可以将错误发送到*处理循环SEH工具,使用功能全局变量进行通讯。功能全局变量初始化的时候,你可以定义错误的优先级,定义 每一个优先级的错误个数功能全局变量实现一个简单的优先级队列。 优先级队列是一个队列,其中每个入队单元被赋予优先级,并且高优先级元素总是在低优先级元素之前从队列中返回。 具有相同优先级的两个元素将以先入先出(FIFO)的方式返回,就像普通队列一样。 为了提高性能,SEH通信机制的优先级以相反的顺序实现,0是优先级最高的优先级。
您可以通过调用SEH Get Next错误从通信系统出现错误
7.Central Error Handler 【*错误处理程序】使用*错误处理程序,可以启动引擎,并且对不同分类的错误进行处理
后记SEH工具包的下载地址为: http://www.ni.com/example/31253/en/
null