前言

通过上一个文章的介绍,我们发现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部分

6.配置特定错误的通知

名称 说明 备注
Notify 将错误传送到中央错误处理程序 参阅错误通信部分
Priority 确定应处理通知的顺序, 较低优先级号码具有较高的优先级,0是最高优先级
Classify 对通知进行分类。 请注意,此分类仅适用于通知,不适用于错误输出。 请参阅分类错误部分
Classification 错误类型的字符串描述。 请注意,在实时版本的库中,字符串必须为四个或更少的字符 有关详细信息,请参阅分类错误部分。

7.配置输出的错误处理

 
名称     说明     备注
Clear Error 清除错误
Convert to Warning 将错误转换为警告
Classification 错误类型的字符串描述 有关详细信息,请参阅分类错误部分。

8.保留Default分支,用于配置默认的一些执行

点击保存和加载,可以快速的配置一些已经有的模板

常规用法

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/  


【LabVIEW技巧】LabVIEW中的错误2的更多相关文章

  1. 【LabVIEW技巧】LabVIEW中的错误1

    前言 前几日,小黑充电学习意外的看到了下面的这个东东. 编程许久竟然没有见过这样子的错误枚举,甚为好奇,问刘大后才知道是Error Ring,为此恶补一下LabVIEW中与错误处理相关的内容. 错误的 ...

  2. [开发技巧]·TensorFlow中numpy与tensor数据相互转化

    [开发技巧]·TensorFlow中numpy与tensor数据相互转化 个人主页–> https://xiaosongshine.github.io/ - 问题描述 在我们使用TensorFl ...

  3. python编程中常见错误

    python编程培训中常见错误最后,我想谈谈使用更多python函数(数据类型.函数.模块.类等)时可能遇到的问题.由于篇幅有限,我们试图将其简化,特别是一些高级概念.有关更多详细信息,请阅读学习py ...

  4. 【转】SQL Server -- 已成功与服务器建立连接,但是在登录过程中发生错误

    SQL Server -- 已成功与服务器建立连接,但是在登录过程中发生错误 最近在VS2013上连接远程数据库时,突然连接不上,在跑MSTest下跑的时候,QTAgent32 crash.换成IIS ...

  5. vs2015 编译时错误列表中没有错误,dll却没有生成出来

    最近发现vs2015的一个问题, 编译时,错误列表中没有错误,dll却没有生成出来,vs重启也无效 解决: 多次排查发现如果一个类库设置的是framework 4.0版本,但引用了framework4 ...

  6. PHP中的错误处理、异常处理机制详解

    在编写PHP程序时,错误处理是一个重要的部分.如果程序中缺少错误检测代码,那么看上去很不专业,也为安全风险敞开了大门 例: <?php $a = fopen('test.txt','r'); / ...

  7. ASP.NET MVC中的错误处理

    ASP.NET MVC中的错误的错误处理跨越了两个主要领域:程序异常和路由异常的处理.前者是关于在控制器和视图中捕获错误的;而后者更多是有关重定向和HTTP错误的. 1.在WebConfig中把过滤器 ...

  8. javascript中的错误处理机制

    × 目录 [1]对象 [2]类型 [3]事件[4]throw[5]try[6]常见错误 前面的话 错误处理对于web应用程序开发至关重要,不能提前预测到可能发生的错误,不能提前采取恢复策略,可能导致较 ...

  9. Sql server2012连接Sql server 2008时出现的问题:已成功与服务器建立连接,但在登陆过程中发生错误。(provider:SSL Provider,error:0-接收到的消息异常,或格式不正确。)

    以前连接是正常的,就这两天连不上了.(没有耐心的直接看末尾解决办法) 错误消息如下: 1.尝试读取或写入受保护的内存.这通常指示其他内存已损坏.(System.Data) 2.已成功与服务器建立连接, ...

  10. Yii中的错误及异常处理

    Yii中的错误及异常处理 Yii已经默认已经在CApplication上实现了异常和错误的接管,这是通过php的set_exception_handler, set_error_handler实现的. ...

随机推荐

  1. VS2017常用快快捷键

    VS2017常用快快捷键 VS中代码对齐等快捷键        在VS中,选定代码后,按Ctrl+K+F组合键,可以自动进行代码对齐.        注意:要先按下Ctrl和K,再按下F,因为Ctrl ...

  2. 转 :hlda文献学习笔记

    David M.BLEI nCR文献学习笔记(基本完成了)  http://yhbys.blog.sohu.com/238343705.html 题目:The Nested Chinese Resta ...

  3. kaptcha验证码在windows下正常,在linux下无法显示

    有几种情况,记录备忘: 1.两个环境字体不一样,linux环境下可能没有字体,重新安装字体即可. 2.tomcat等容器下没有temp目录,手动建立即可. 3.如果报找不到类的错误,检查JDK是否正确 ...

  4. 一些技巧 && 常数优化 && 出现の错误

    开坑原因 7.21 今天DTZ大爷教了我一个算欧拉函数的好方法......是质因数复杂度的 这让我想到,这些小技巧小idea,很多时候,可能就是考场上最致命.最一击必杀的"大招" ...

  5. ARC072 D Alice&Brown 博弈论

    ---题面--- 题解: 题目大意:有2堆石子数分别为x, y的石子,你每次可以从中间的某一堆中取出2i个石子,扔掉i个,并把剩下的i个放到另一堆,无法操作的人就输了. 现在给定x,y,判断先手必赢还 ...

  6. Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) A B C D 水 模拟 构造

    A. Neverending competitions time limit per test 2 seconds memory limit per test 512 megabytes input ...

  7. P2075 [NOIP2012T5]借教室 区间更新+二分查找

    P2075 [NOIP2012T5]借教室 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 noip2012-tg 描述 在大学期间,经常需要租借教室.大到院 ...

  8. Coconuts HDU - 5925 二维离散化 自闭了

    TanBig, a friend of Mr. Frog, likes eating very much, so he always has dreams about eating. One day, ...

  9. getopt和getopt_long参数处理

    1:getopt函数 getopt主要用于解析程序运行时所带的参数,原型如下: #include <unistd.h> int getopt(int argc, char * const ...

  10. POJ 3579 二分

    Median Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7687   Accepted: 2637 Descriptio ...