前言

通过上一个文章的介绍,我们发现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. 【题解】SDOI2017树点涂色

    LCT强强!以前总是觉得LCT非常的难懂(当然现在也是的),但实际上它真的是很厉害的一种东西.它是一种动态的链剖分结构,其实就是对于剖分出来的重链使用LCT去进行维护.cut 与 link 两个操作让 ...

  2. BZOJ5248:[九省联考2018]一双木棋——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5248 https://www.luogu.org/problemnew/show/P4363#su ...

  3. 洛谷 P4597 序列sequence 解题报告

    P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...

  4. 阿里云学生机——Mysql配置---教小白入门篇

    首先,我的学生机默认配置为:CentOS 7.2 64位 + Tomcat 8 + Jdk8 + MySQL5.7.16 扩展:Linux 如何查看 MySQL 版本号----使用命令 mysql - ...

  5. 洛谷P4135 作诗 (分块)

    洛谷P4135 作诗 题目描述 神犇SJY虐完HEOI之后给傻×LYD出了一题: SHY是T国的公主,平时的一大爱好是作诗. 由于时间紧迫,SHY作完诗之后还要虐OI,于是SHY找来一篇长度为N的文章 ...

  6. Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2) 题解

    Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2) 题目链接:https://codeforces.com/contest/1130 ...

  7. 搭建JavaWeb应用开发环境

    下载和安装Tomcat服务器 下载Tomcat安装程序包:http://tomcat.apache.org/,下载一个zip版本,解压到本地即完成了Tomcat的安装. 测试是否安装成功:进入Tomc ...

  8. bzoj2428 [HAOI2006]均分数据 模拟退火

    [HAOI2006]均分数据 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 3434  Solved: 1091[Submit][Status][Dis ...

  9. HDU 3605 最大流+状态压缩

    Escape Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  10. [LeetCode] 4. Median of Two Sorted Arrays ☆☆☆☆☆

    There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two ...