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()循环,逐个读取。这种方式使用于调试程序会使调试比较方便。核心语句如下:
上一篇:卷绕式真空镀膜机卷绕系统结构设计+CAD图纸
下一篇:SolidWorks交通路锥自动输送机构设计+文献综述

基于DEFORM的棒材旋转挤压工艺研究

基于弹性联接的杯形柔轮...

基于瓶颈的生产线动态平衡研究

ANSYS基于舰船的精密冲击防护装置设计

基于MATLAB+ADAMS的电动轮椅的联合仿真研究

基于ADAMS的6L20型柴油机运动仿真研究

基于NAPA的57.2m内河油船总体设计+CAD图纸

从政策角度谈黑龙江對俄...

压疮高危人群的标准化中...

上海居民的社会参与研究

STC89C52单片机NRF24L01的无线病房呼叫系统设计

酵母菌发酵生产天然香料...

浅谈高校行政管理人员的...

AES算法GPU协处理下分组加...

基于Joomla平台的计算机学院网站设计与开发

浅论职工思想政治工作茬...

提高教育质量,构建大學生...