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交通路锥自动输送机构设计+文献综述

基于网络技术的转向架应力监测与评估

多层次总线下的煤矿安检...

RS-485总线的理论与实践【2945字】

profibus现场总线茬筛贮焦生...

基于ANSYS的螺纹连接受力与变形分析

基于3DMAX绞吸式挖泥船的动作仿真

基于轮-履变结构的轮椅式...

医院财务风险因素分析及管理措施【2367字】

C#学校科研管理系统的设计

神经外科重症监护病房患...

国内外图像分割技术研究现状

公寓空调设计任务书

志愿者活动的调查问卷表

中国学术生态细节考察《...

AT89C52单片机的超声波测距...

10万元能开儿童乐园吗,我...

承德市事业单位档案管理...