编辑好此面板,在.c文件中生成函数框架的基础上,需要添加代码,实现函数功能。根据函数输入的控件状态值,结合控件状态及硬件中操作寄存器相应位的关系,将状态值转化。可以先将各个控件值进行转化,然后进行逻辑或运算。例如将时基的控件值进行转化的代码如下:
switch (shiji)
{// D9 D8 D7
case 0:shiji=(0x0380|0x0000);break; //0000 0011 1000 0000 5us
case 1:shiji=(0x0300|0x0000);break; //0000 0011 0000 0000 2us
case 2:shiji=(0x0280|0x0000);break; //0000 0010 1000 0000 1us
case 3:shiji=(0x0200|0x0000);break; //0000 0010 0000 0000 0.5us
case 4:shiji=(0x0180|0x0000);break; //0000 0001 1000 0000 0.2us
case 5:shiji=(0x0100|0x0000);break; //0000 0001 0000 0000 0.1us
case 6:shiji=(0x0080|0x0000);break; //0000 0000 1000 0000 0.05us
case 7:shiji=(0x0000|0x0000);break; //0000 0000 0000 0000 0.025us
default:shiji=(0x0380|0x0000);break;
}
然后在应用函数(Application Functions)中添加应用函数供上层应用函数调用。
因本测试模块涉及到写操作寄存器操作、写控制寄存器操作、个数寄存器读取操作,所以针对这三个操作添加写操作寄存器函数Write_OperateREG、写控制寄存器函数Write_ControlREG、读个数寄存器函数Read_GeshuReg,另外添加了模块初始化函数CSY_INIT,用于实现对仪器中测试相关的各参数初始值的设置,此外,上位机需要对硬件模块存储器中的数据进行读取,所以另外设计了数据读取函数,考虑到使用者的不同需求,设计了三个功能略有区别的数据读取函数READ_DATA、READ_DATA zhu和READ_DATA fu,下面分别进行介绍。
3.2.3 对写操作寄存器及写控制寄存器添加函数
Write_OperateREG函数的原型为ViStatus _VI_FUNC CSY_WRITE_OperateREG (ViSession vi, ViInt16 zhuangtai_in),其中vi为仪器的句柄,zhuangtai_in为输入参数,提供将要写入操作寄存器的表示控件状态的二进制数值。此函数可以使用上述的属性设置函数代替,同样可以将数据zhuangtai_in写入寄存器,即Ivi_SetAttributeViInt32 (vi, "",CSY_ATTR_OperateREG, 0, zhuangtai_in)。但属性获得函数一般供IVI驱动器中的其它函数调用,而此函数可以直接被上层应用函数调用。
此函数中操作寄存器写操作的实现使用的是VISA资源管理中的特定资源操作函数。在VISA特定资源的操作类中包含了消息基通信函数和寄存器基通信函数。因为本测速模块是基于寄存器基的仪器,不能对收到的信息进行解释,所以只能在了解仪器内部寄存器定义及地址分配的情况下,对寄存器直接进行编程。
VISA为寄存器数据传输提供了高级存取(High-Lever Access)和低级存取(Low-Lever Access)两类函数。使用低级存取的方法虽然速度快,但是必须首先使用viMapAddress函数进行寄存器地址映射,将VXI硬件寄存器映射到程序的地址空间,数据传输完成后要使用viUnmapAddress解除地址映射,以释放内存资源。所以此处使用高级存取函数viIn16()及viOut16()。
应该注意的是,尽管IVI资源管理是通过VISA的资源管理间接实现的,但是这里的IVI通信句柄与VISA中的通信句柄不同,如果要使用VISA的通信函数,则可以通过Ivi_GetAttributeViSession或者Ivi_IOSession函数获取IVI通信句柄内在的VISA资源管理句柄或仪器通信句柄,而不能直接使用IVI通信句柄。另外,虽然两个函数都可以获得内在的VISA通信句柄,但是两者存在一些差别,Ivi_GetAttributeViSession函数在获得句柄的同时会锁定此句柄对应的仪器资源,在操作完成后应释放资源。例如语句Ivi_GetAttributeViSession (vi, VI_NULL, IVI_ATTR_IO_SESSION, 0, &io)将获取的句柄赋值给io,io即为IVI通信句柄内在的VISA仪器通信句柄,当操作完成后使用函数Ivi_UnlockSession(vi, VI_NULL)解除对仪器的锁定;Ivi_IOSession也可以获得通信句柄,且速度较快,但是它并不对仪器进行锁定,所以使用此函数的前提是要进行操作的仪器已经被锁定,当操作完成后同样需要对仪器进行解锁。可以使用函数Ivi_LockSession (vi, VI_NULL)对IVI通信句柄为vi的仪器进行锁定,同样使用Ivi_UnlockSession函数进行解锁。 基于VXI总线枪弹杀伤力测试系统应用程序开发(13):http://www.751com.cn/jixie/lunwen_1973.html