在使用事件结构时需要while循环的配合,而事件结构有一特殊的事件,那就是超时,一般使用事件结构时超时事件都是不要保留的,一般不建议给删掉。前面已经讲过超时怎么用了,但是有些人编写程序喜欢在事件结构和循环之间插入一些代码,而有时恰恰是这些操作导致程序运行起来有问题,得不到正确结果,这是因为如果你不设置超时时间这段代码只有有事件响应时才能执行,
所以在事件与循环之间尽量不要插入代码,除非你可以保证这些代码可以被正确执行。
言归正传,在测试测量时总会伴随着数据的存储,而用事件结构如何编写数据存储呢?一般数据存储有三个步骤打开文件、读写文件、关闭文件。如果程序频繁进行数据的存储,这时打开文件和关闭文件尽量只执行一次,这样既节省系统资源又减少了程序复杂性。我们知道文件被打开后是以引用(所谓的句柄)来传递数据的,那么存在while循环时,数据传递的方式你就应该想到了移位寄存器,于是利用移位寄存器来传递文件的引用。那么事件怎么划分呢,我们把数据存储就分为了打开文件、文件读写、关闭文件三个事件,其中打开或关闭文件可以由按钮或者程序来触发事件完成,数据读写可以在数据处理时进行执行。
我们先看一下有些人是怎么编写的,如下图,有人说了我这样写有何不可?我设置了超时,打开文件代码可以被执行到啊。是啊,可以被执行到,那你没发现每过100ms就打开一次文件吗,一直在打开从未被关闭,如果你选择的是Replace模式,你的数据还会被存进去吗?
我们就先以按钮触发文件操作为例,简单介绍一下:前面板有两个按钮“Open”、“Close”。我们规定点击“Open”时根据操作打开文件、点击“Close”时关闭文件。
在看看我们的编程方法,我们先为两个按钮添加事件。我们就以打开一个TDMS文件为例,现在桌面上建立一个TDMS文件test.tdms,怎么建你知道。我们使用文件对话框来选择TDMS文件,当触发Open事件是弹出选择文件对话框,我们为Open事件添加如下代码:
如图,在case输出隧道上点击右键选择默认,或者在Error case内给隧道赋个空值然后将输出连至事件框上又会产生一个隧道节点,前面说了利用移位寄存器来传递文件引用,于是右键while循环添加移位寄存器,并将文件引用连上,这样Open事件编写完毕,接下来处理Close事件,这个就很简单了,就是用来关闭文件引用的,文件引用从左边的移位寄存器引入,程序如下:
那么TDMS数据读写就根据你的要求进行编写了。这样我们利用事件结构对文件的操作就结束了吗?NO,还没结束我们注意到事件结构上产生了2个隧道节点,这个节点与case结构的隧道节点一样在每一帧上都需要赋值,否者就会出现数据错误,而事件结构的输出接点只有一种输出模式就是为连线就是用默认值,文件引用默认值是空,这不是我们想要的,于是就需要我们在其他事件分支内将文件引用进行连接,输入即为左边移位寄存器。完成程序如下,这样利用事件打开文件的操作就完成了,点击Open时打开文件引用,点击Close时关闭引用。文件不会被往复打开。
在使用各种隧道节点时尤其注意输出,连线及隧道方式要仔细检查,确保输出值是正确的。
4