📄 insnadts.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 + -