⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpubbs_test_dll.c

📁 labview for USB usb2.0采集卡学习资料
💻 C
📖 第 1 页 / 共 3 页
字号:
/************************************************************************************************
本软件版权归CPUBBS论坛(www.cpubbs.com)所有!

软件编写:赖卫国(cpubbs):QQ:56720725  email:cpubbs@163.com     tel:0755-2105-1981
    硬件:陈智灵        :QQ:54016877  email:zlche89@163.com    tel:0755-2105-1980
	
有任何问题欢迎到我们网站交流:www.cpubbs.com---------------cpu+bbs=cpubbs
************************************************************************************************/


/************************************************************************************************
编写者	:赖卫国(cpubbs)
硬件	:陈智灵
时间  	: 2006-6-6-15-13
版本号	:版本1.0
函数作用: CPUBBS论坛USB2.0版本采集卡第一版本示例程序头文件列表
网站	: http://www.cpubbs.com
调用函数:无
函数参数:无
参数返回:无

************************************************************************************************/
#include "windows.h"					//操作系统相关头文件
#include <analysis.h>
#include <cvirte.h>		
#include <userint.h>
#include "cpubbs_test_dll.h"			
#include "cpubbs_usb20_ver1_dll.h"		//cpubbs论坛采集卡库函数头文件


static int panelHandle;
static int cpubbs_sended_points;

/************************************************************************************************
编写者	:赖卫国(cpubbs)
硬件	:陈智灵
时间  	: 2006-6-6-15-13
版本号	:版本1.0
函数作用: 主函数,系统自动产生的代码
网站	: http://www.cpubbs.com
调用函数:无 
函数参数:无
参数返回:无 
************************************************************************************************/
int main (int argc, char *argv[])
{
	if (InitCVIRTE (0, argv, 0) == 0)
		return -1;	/* out of memory */
	if ((panelHandle = LoadPanel (0, "cpubbs_test_dll.uir", PANEL)) < 0)
		return -1;
	DisplayPanel (panelHandle);
	RunUserInterface ();
	DiscardPanel (panelHandle);
	return 0;
}

/************************************************************************************************
编写者	:赖卫国(cpubbs)
硬件	:陈智灵
时间  	: 2006-6-6-15-13
版本号	:版本1.0
函数作用: 单点AD值采集;
网站	: http://www.cpubbs.com
调用函数:unsigned char cpubbs_ad_sample_1_point(double cpubbs_ad_result[4],int *cpubbs_write_statue,
                                                 int *cpubbs_read_statue) 
函数参数:cpubbs_ad_result[]---采集回来的值存于此数组之中,为double型的,单位是毫伏
		  					---cpubbs_ad_result[0]为第一通道AD值
							---cpubbs_ad_result[1]为第二通道AD值
							---cpubbs_ad_result[2]为第三通道AD值
							---cpubbs_ad_result[3]为第四通道AD值
		  cpubbs_write_statue--为写指令,卡返回状态,如果为1,则发送指令成功,如果为-1则失败;
		  cpubbs_read_statue---为读数据指令,卡返回状态,如果为1,则读取数据成功,如果为-1则为失败;
参数返回:unsigned char型式的数据类型,如果返回为1则成功,为-1则失败; 
************************************************************************************************/
int CVICALLBACK cpubbs_send_read_ad (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	int cpubbs_ad_ch;
	double cpubbs_ad_result[4]={0};
	int cpubbs_write_statue=0,cpubbs_read_statue=0;
	switch (event)
	{
		case EVENT_COMMIT:
			SetCtrlAttribute (panelHandle, PANEL_TIMER_FAST_AD, ATTR_ENABLED, 0);					//单点采集要先停掉高速采集定时程序,否则会冲突导致板卡死机
			cpubbs_stop_fast_ad_sample(&cpubbs_write_statue);										//发停止高速采集指令给板卡
			cpubbs_ad_sample_1_point(cpubbs_ad_result,&cpubbs_write_statue,&cpubbs_read_statue);	//单点AD读取函数,是我们的DLL里面提供的函数
			GetCtrlVal (panelHandle, PANEL_CH_RING, &cpubbs_ad_ch);
			switch(cpubbs_ad_ch)
			{
				case 1:
					PlotStripChartPoint (panelHandle, PANEL_STRIPCHART, cpubbs_ad_result[0]/1000);	//因为采回来的是毫伏,要变成伏需除以1000
					break;
				case 2:
					PlotStripChartPoint (panelHandle, PANEL_STRIPCHART, cpubbs_ad_result[1]/1000);	//因为采回来的是毫伏,要变成伏需除以1000
					break;
				case 3:
					PlotStripChartPoint (panelHandle, PANEL_STRIPCHART, cpubbs_ad_result[2]/1000);	//因为采回来的是毫伏,要变成伏需除以1000
					break;
				case 4:
					PlotStripChartPoint (panelHandle, PANEL_STRIPCHART, cpubbs_ad_result[3]/1000);	//因为采回来的是毫伏,要变成伏需除以1000
					break;
				default:
					break;
			}
			if(cpubbs_read_statue==-1)														//读数出错处理
			{
				SetCtrlAttribute (panelHandle, PANEL_TIMER_AD1_POINT, ATTR_ENABLED, 0);		//采集出错则停止单点采集定时器
				SetCtrlAttribute (panelHandle, PANEL_TIMER_FAST_AD, ATTR_ENABLED, 0);		//采集出错则也同时停止高速采集定时器
				SetCtrlAttribute (panelHandle, PANEL_TIMER_DA, ATTR_ENABLED, 0);			//写DA值出错则停止DA输出定时器
			}
			break;
	}
	return 0;
}


/************************************************************************************************
编写者	:赖卫国(cpubbs)
硬件	:陈智灵
时间  	: 2006-6-6-15-13
版本号	:版本1.0
函数作用: 开启定时器TIMER_AD1_POINT,进行连续单点采集,具体采集程序在定时器事件函数里面进行,
		  一定也要在这里关闭高速采集定时器,否则系统冲突,下面有注解(如果不用高速采集就不用关);
网站	: http://www.cpubbs.com
调用函数:无 
函数参数:无
参数返回:无 
************************************************************************************************/
int CVICALLBACK cpubbs_start_TIMER_AD1_POINT_callback (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	int cpubbs_write_statue=0;
	switch (event)
	{
		case EVENT_COMMIT:
			SetCtrlAttribute (panelHandle, PANEL_TIMER_FAST_AD, ATTR_ENABLED, 0);		//停止高速采集
			cpubbs_stop_fast_ad_sample(&cpubbs_write_statue);							//为了避免高速采集和单点采集冲突导致系统出问题,所以必须在这里把高速采集定时器关闭
			
			SetCtrlAttribute (panelHandle, PANEL_TIMER_AD1_POINT, ATTR_ENABLED, 1);		//启动单点采集定时器
			
			break;
	}
	return 0;
}

/************************************************************************************************
编写者	:赖卫国(cpubbs)
硬件	:陈智灵
时间  	: 2006-6-6-15-13
版本号	:版本1.0
函数作用: 定时器TIMER_AD1_POINT事件回调函数,采集就在这里进行,它是通过调用单点采集的函数来采的,
          这样程序简单,也为了能让学习CVI的朋友们多学一个知识点,其实可以直接把单点采集的程序拷
		  贝到这里就可以的
网站	: http://www.cpubbs.com
调用函数:int CVICALLBACK cpubbs_send_read_ad (int panel, int control, int event,
		                                       void *callbackData, int eventData1, int eventData2) 
函数参数:系统自动生成的回调函数
参数返回:int 
************************************************************************************************/
int CVICALLBACK cpubbs_sample_1_point_timer_callback (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_TIMER_TICK:
			cpubbs_send_read_ad (panelHandle, PANEL_SEND_READ_BUTTON, EVENT_COMMIT,0, 0, 0);
			break;
	}
	return 0;
}

/************************************************************************************************
编写者	:赖卫国(cpubbs)
硬件	:陈智灵
时间  	: 2006-6-6-15-13
版本号	:版本1.0
函数作用: 单点DA值输出函数,使卡输出一个值为cpubbs_da_value伏的电压;
网站	: http://www.cpubbs.com
调用函数:unsigned char cpubbs_da_output_1_point(double cpubbs_da_value,int *cpubbs_write_statue) 
函数参数:cpubbs_da_value:		DA值,单位为伏,数据类型为DOUBLE
		  cpubbs_write_statue:	为写指令,卡返回状态,如果为1,则发送指令成功,如果为-1则失败;
参数返回:unsigned char型式的数据类型,如果返回为1则成功,为-1则失败; 
************************************************************************************************/
int CVICALLBACK cpubbs_da_1_point_output_callback (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	double cpubbs_user_input_da_value;
	double cpubbs_da_input_data;
	int cpubbs_write_statue=0;
	switch (event)
	{
		case EVENT_COMMIT:
			GetCtrlVal (panelHandle, PANEL_NUMERIC_DA_1_POINT, &cpubbs_user_input_da_value);
			cpubbs_da_output_1_point(cpubbs_user_input_da_value,&cpubbs_write_statue);			//DA输出发送函数,是我们提供的DLL里面的库函数
			break;
	}
	return 0;
}

/************************************************************************************************
编写者	:赖卫国(cpubbs)
硬件	:陈智灵
时间  	: 2006-6-6-15-13
版本号	:版本1.0
函数作用: 连续输出波形的定时器启动函数,是前面板的波形发生按钮的事件,通过它启动定时器发送数据出去
		  具体操作在定时器回调函数里面进行;
网站	: http://www.cpubbs.com
调用函数:无 
函数参数:无
参数返回:无
************************************************************************************************/
int CVICALLBACK cpubbs_start_da_timer_callback (int panel, int control, int event,
		void *callbackData, int eventData1, int eventData2)
{
	switch (event)
	{
		case EVENT_COMMIT:
			SetCtrlAttribute (panelHandle, PANEL_TIMER_DA, ATTR_ENABLED, 1);					//启动定时器TIMER_DA
			cpubbs_sended_points=0;
			break;
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -