3.1.4 显示数据
“显示数据”部分包括存储器中数据的读取,及对读取的数据的初步处理、显示。按下“显示数据”按钮后的程序流程图如图3-11所示。
当按下“显示数据”按钮后,进行数据的读取和处理,此时不允许再进行测量,所以将“开始测量”按钮设置为禁用。然后读取“靶间距离”及“直方图块数”控件值,供数据处理时使用。另外需要获得本次测量使用的计时基准脉冲的周期值,这需要获得“计数基频”控件值,然后根据控件值对应的基频进行计算。核心代码如下:
GetCtrlVal (panelHandle, PANEL_RINGSLIDE_JIPIN, &c);
switch (c)
{
case 0:zhouqi=5000;break; // 200k周期 5000ns
case 1:zhouqi=2000;break; // 500k周期 2000ns
case 2:zhouqi=1000;break; // 1M周期 1000ns
case 3:zhouqi=500; break; // 2M周期 500ns
case 4:zhouqi=200; break; // 5M周期 200ns
case 5:zhouqi=100; break; // 10M周期 100ns
case 6:zhouqi=50; break; // 20M周期 50ns
case 7:zhouqi=25; break; // 40M周期 25ns
default:zhouqi=5000;break;
}
获得需要的控件值后,准备对弹丸个数进行读取。在读取之前先将首发时间间隔T存入存储器中。之所以要使用上位机给出存储信号,是因为数据存入存储器的允许信号是以下一个弹丸的过靶信号来触发的,而首发时间间隔是在最后一个弹丸到来时写入锁存器,所以不会再有下一个弹丸到来,而改用上位机给出存储允许信号。同样可以使用IVI驱动器中的写操作寄存器函数实现。
完成T的存储之后,就可以进行弹丸个数的读取。使用IVI驱动器中的函数CSY_READ_GeshuReg (ViSession vi, int *ge_shu)直接实现函数个数的读取。此函数首先使用写操作寄存器函数向操作寄存器D2位写入读弹丸个数寄存器预置信号,然后对弹丸个数寄存器进行读取,此时读取的实际是存储器中数据的个数,然后将此数据进行转换,换算成实际弹丸的个数,由指针*ge_shu输出。
读取弹丸个数后,先判断弹丸个数是否为0,如果弹丸个数为0则给出提示信号,表示此次测试没有弹丸通过;如果不为0,就可也以用它来限定循环此处进行存储器中数据的处理了。通过驱动部分可以知道,在IVI驱动器中包含了三个数据读取函数。所以在应用软件中可以有两种方法实现主、辅存储器的读取。
如果使用CSY_READ_DATA (ViSession vi, int zhu_fu, ViInt16 addr, int *d_out)实现读取,需要使用for()循环,逐个读取。这种方式使用于调试程序会使调试比较方便。核心语句如下: 基于VXI总线枪弹杀伤力测试系统应用程序开发(9):http://www.youerw.com/jixie/lunwen_1973.html