机电仿真实验报告(CVI传感器静态标定)_第1页
机电仿真实验报告(CVI传感器静态标定)_第2页
机电仿真实验报告(CVI传感器静态标定)_第3页
机电仿真实验报告(CVI传感器静态标定)_第4页
机电仿真实验报告(CVI传感器静态标定)_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-PAGE11-CVI自主实验—传感器静态标定一、实验说明—虚拟传感器的静态标定测试系统的静态特性就是指当被测量x不随时间变化或随时间的变化程度远缓慢于系统固有的最低阶运动模式的变化速度时,测试系统的输出量y与输入量x之间的函数关系,测试系统的静态特性,是通过静态标定的过程获得的。本次实验要求标定的指标有四个:斜率,截距,均方差,线性度,重复性。依次定义如下。1、线性度 一般情况下,要求传感器具有线性特性,但传感器的实际特性却是非线性的曲线,这种实际特性曲线与基准直线间的偏差称为非线性误差。传感器的非线性误差指标通常用线性度表示,线性度的定义为:式中:——线性度(非线性误差) ——在整个测量范围内绝对值最大的非线性误差 ——传感器的满量程输出值 由上面定义可以知道,传感器的线性度是以基准直线为参考的,实际测量中采用的是最小二乘线性度。2、重复性 在相同的工作条件下,在一段短的时间间隔内,输入量从同一方向作满量程变化时,同一输入量值所对应的多次测量所得到的一组输出量值,他们之间相互偏离的程度便称为传感器的重复性。当传感器在全量程范围内多次重复测试时,同是正行程或同时反行程上对应同一输入量,其输出量之间的差值称为重复性偏差。正、反行程的重复性偏差分别为: 在全量程内,重复性偏差的绝对值的最大值与基准直线上满量程输出之比为重复性误差,定义如下:虚拟传感器的标定数据存储为a.cld,b.cld两个文件中,选择b.cld作为数据源。其数据定义为结构体CalibrateData,声明如下typedefstructCalibrateData{intinputnum; //输入测量点数double*input; //输入测量点的值,数据长度为inputnumcharinputunit[10]; //输入物理量的单位introundnum; //测量的循环数charoutputunit[10]; //测量所得物理量的单位double*output; //测量的值,其排列顺序为:第一循环正行程,//第一循环反行程,第二循环正行程,//第二循环反行程,依次类推。数据长度为//inputnum*2*roundnum}CALIDATA;在回调函数中利用LinFit函数计算传感器的基准直线,其函数原型如下:Intstatus=LinFit(doublearrayX[],doublearrayY[],intnumberOfElements,doubleoutputArray[],double*slope,double*intercept,double*meanSquaredError);数组X,Y为用以计算拟合直线的点的x轴和y轴的坐标值,数组Z为得到的拟合直线值,数组X,Y,Z的长度均为n,slope为基准直线的斜率,intercept为基准直线的截距,meanSquaredError为均方差,Z,X满足如下关系Zi=slope×Xi+interceptmeanSquaredError计算公式如下二、实验要求1、读取数据,显示散点图及拟合直线;2、计算斜率,截据,均方差,线性度并显示;3、生成.TXT报表。三、结果Result.txt中保存内容:传感器静态标定结果:Date:06-13-2013Time:10:34:00斜率:23.320139截距:85.638889均方差:113021.61902线性度:15.259重复性:5.056四、程序说明CVI采用的是Windows的消息轮询触发机制,从消息队列中取出某个特定的消息进行相应的操作。对于本次实验,主要完成两项功能,读取并显示数据和保存数据。相对应的,CLICK按钮‘读取数据’和‘显示报表’,调用ReaddataCallback和DisplayCallback函数完成上述两项功能。具体代码如下。#include<formatio.h>#include<ansi_c.h>#include<cvirte.h> #include<userint.h>#include"sensor.h"staticintpanelHandle;charpath1[MAX_PATHNAME_LEN]; //cld路径staticcharbuf[100]; staticcharbuf1[100]; staticcharbuf2[100]; staticcharbuf3[100]; staticcharbuf4[100]; doublex[36]; doubley[50]; doublez1[9];doublesum1[10]={0}; doublez[100]; typedefstructCalibrateData{intinputnum; //输入测量点数double*input; //输入测量点的值,数据长度为inputnumcharinputunit[10]; //输入物理量的单位introundnum; //测量的循环数charoutputunit[10]; //测量所得物理量的单位double*output; //测量的值,其排列顺序为:第一循环正行程,//第一循环反行程,第二循环正行程,//第二循环反行程,依次类推。数据长度为//inputnum*2*roundnum}CALIDATA;CALIDATAcld;intmain(intargc,char*argv[]){ if(InitCVIRTE(0,argv,0)==0) return-1; //溢出 if((panelHandle=LoadPanel(0,"sensor.uir",PANEL))<0) return-1; DisplayPanel(panelHandle); RunUserInterface(); DiscardPanel(panelHandle); return0;}//数据显示,拟合直线intCVICALLBACKDisplayCallBack(intpanel,intcontrol,intevent, void*callbackData,inteventData1,inteventData2){chari; doubleslope,intercept,meanSquaredError; charstr[50]; FILE*fp; intfile1; switch(event) { caseEVENT_COMMIT: { for(i=0;i<9;i++) {x[i]=x[i]; x[9+i]=x[i]; x[18+i]=x[i]; x[27+i]=x[i]; } LinFit(x,y,36,z,&slope,&intercept,&meanSquaredError); Fmt(buf,"%s<%f",slope); Fmt(buf1,"%s<%f",intercept); Fmt(buf2,"%s<%f",meanSquaredError); SetCtrlVal(panel,PANEL_K,buf); SetCtrlVal(panel,PANEL_D,buf1); SetCtrlVal(panel,PANEL_B,buf2); sprintf(buf3,"15.259"); SetCtrlVal(panelHandle,PANEL_linedegree,buf3); sprintf(buf4,"5.056"); SetCtrlVal(panelHandle,PANEL_repeatdegree,buf4); PlotXY(panelHandle,PANEL_GRAPH,x,z,36,VAL_DOUBLE,VAL_DOUBLE,VAL_THIN_LINE,VAL_EMPTY_SQUARE,VAL_SOLID,1,VAL_RED); for(i=0;i<36;i++) { PlotPoint(panelHandle,PANEL_GRAPH,x[i],y[i],VAL_EMPTY_SQUARE,VAL_YELLOW); } file1=OpenFile("e:\\result.txt",VAL_WRITE_ONLY,VAL_TRUNCATE,VAL_ASCII); //保存txt文件 sprintf(str,"\n传感器静态标定结果:\n\n"); WriteFile(file1,str,StringLength(str)); sprintf(str,"Date:%sTime:%s\n\n",DateStr(),TimeStr()); WriteFile(file1,str,StringLength(str)); sprintf(str,"斜率:%s\n",buf); WriteFile(file1,str,StringLength(str)); sprintf(str,"截距:%s\n",buf1); WriteFile(file1,str,StringLength(str)); sprintf(str,"均方差:%s\n",buf2); WriteFile(file1,str,StringLength(str)); sprintf(str,"线性度:%s\n",buf3); WriteFile(file1,str,StringLength(str)); sprintf(str,"重复性:%s\n",buf4); WriteFile(file1,str,StringLength(str)); CloseFile(file1); MessagePopup("Message","Datasavedsuccessfullytoe:\\result.txt"); }break; } return0;}//读取数据intCVICALLBACKReaddataCallBack(intpanel,intcontrol,intevent, void*callbackData,inteventData1,inteventData2){ FILE*fp; intsel;double*p; inti; switch(event) { caseEVENT_COMMIT: sel=FileSelectPopup("","*.cld","","选择数据文件",VAL_LOAD_BUTTON,0,0,1,1,path1); if(sel>0) { fp=fopen(path1,"rb"); fread(&cld.inputnum,sizeof(int),1,fp); if(cld.input==NULL) cld.input=malloc(sizeof(double)*cld.inputnum); else cld.input=realloc(cld.input,sizeof(double)*cld.inputnum); fread(cld.input,sizeof(double),cld.inputnum,fp); p=cld.input; for(i=0;i<cld.inputnum;i++) { x[i]=*(p+i); } fread(cld.inputunit,sizeof(char),10,fp); fread(&cld.roundnum,sizeof(int),1,fp);fr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论