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

📄 insnadts.cpp

📁 研华812pg卡在linux环境下的应用
💻 CPP
字号:
#include <stdio.h>		//standard input output library#include <stdlib.h>#include <comedilib.h>		//comedilib library#include <unistd.h>		//standard symbolic constants and types library#include <errno.h>		//error codes report library #include <getopt.h>		//argument analyse function library#include <sys/time.h>		//time and date library #include <string.h>		//string function library#include "insnadts.h"Insnadts::Insnadts(){    subdevice = 0;		    channel = 3;			    range = 0;}void Insnadts::init(){    int i;    struct timeval t1,t2;    filename="/dev/comedi0";    device = comedi_open(filename);    n_channels = comedi_get_n_channels(device, subdevice);	//get device channel numbers, function comedi_get_n_channel provide by comedi package    n_range = comedi_get_n_ranges(device, subdevice, channel);	//get ai range, function comedi_get_n_ranges provide by comedi package     for (i=0; i<16; i++)	data[i] = 0;    memset(&il,0,sizeof(il));    memset(insn,0,sizeof(insn));    il.n_insns = 9;    il.insns = insn;	    insn[0].insn = INSN_GTOD;		//GTOD:指令的作用运行“Get Time Of Day"    insn[0].n=2;//loop time of insn operation 采样数    insn[0].data = (lsampl_t *)&t1;    for(i=1; i<=7; i++) {	insn[i].subdev = subdevice;			insn[i].insn = INSN_READ;	//在模拟通道执行读指令        //according to this macro, driver call the exact function which defined in driver	insn[i].n = 1;	//loop time of insn operation         //macro CR_PACK is defined in /comedilib-0.7.xx/include/comedi.h 	     //compress three parameter into one structure and easily to pass it to driver	insn[i].chanspec = CR_PACK(i-1, range, 0);//初始化comedi_insn 中的chanspec成员 (chan,rng,aref)	insn[i].data = &data[i-1];    }    insn[8].insn = INSN_GTOD;		    insn[8].n=2;    insn[8].data = (lsampl_t *)&t2;}void Insnadts::adts(int n){    int ret,i,j;    int save_errno;    float sensor[7];    ret = comedi_do_insnlist(device,&il);	//sample data    save_errno = errno;		    for(i=0; i<7; i++){	readdata[i]=0;	insn[i+1].chanspec = CR_PACK(i, range, 0);    }        maxdata = comedi_get_maxdata(device, subdevice, channel);    srange = comedi_get_range(device, subdevice, channel, range);    if(ret<0){	comedi_perror(filename);	exit(0);    }    for (j=0;j<n;j++){	for(i=0; i<7; i++) {	    sensor[i]=comedi_to_phys(data[i], srange, maxdata);	}	readdata[0]=sensor[0]/5.0*60.0+readdata[0];  //输入力 大位移	readdata[1]=sensor[1]/5.0*2000.0+readdata[1];  //输出力 输入力	readdata[3]=sensor[3]/5.0*10000.0+readdata[3];   //真空 输出力 	readdata[4]=sensor[4]/5.0*100.0+readdata[4];     //小位移 真空	readdata[2]=sensor[2]/5.0*5.0+readdata[2];    //大位移 小位移    }    readdata[0]=readdata[0]/(n);    readdata[1]=readdata[1]/(n);//shuruli    readdata[3]=readdata[3]/(n);//shuchuli    readdata[4]=readdata[4]/(n); //zhenkongdu    readdata[2]=readdata[2]/(n);	//comedi_close(device);}	/*	void Insnadts::readdate(){	int ret,i;	int save_errno;		//printf("subdevice: %d\n", subdevice);		//printf("channel = %d\n", channel);				for(i=0; i<7; i++)		insn[i+1].chanspec = CR_PACK(i, range, 0);		maxdata = comedi_get_maxdata(device, subdevice, channel);		srange = comedi_get_range(device, subdevice, channel, range);        			ret = comedi_do_insnlist(device,&il);	//sample data		save_errno = errno;	        if(ret<0){	        	comedi_perror(filename);			exit(0);        	}    		for(i=0; i<6; i++) {		outdate[i]=comedi_to_phys(data[i], srange, maxdata);		}	//comedi_close(device);}*/							

⌨️ 快捷键说明

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