测控课程设计微机实时测控系统.docx

上传人:b****6 文档编号:8152822 上传时间:2023-01-29 格式:DOCX 页数:27 大小:500.27KB
下载 相关 举报
测控课程设计微机实时测控系统.docx_第1页
第1页 / 共27页
测控课程设计微机实时测控系统.docx_第2页
第2页 / 共27页
测控课程设计微机实时测控系统.docx_第3页
第3页 / 共27页
测控课程设计微机实时测控系统.docx_第4页
第4页 / 共27页
测控课程设计微机实时测控系统.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

测控课程设计微机实时测控系统.docx

《测控课程设计微机实时测控系统.docx》由会员分享,可在线阅读,更多相关《测控课程设计微机实时测控系统.docx(27页珍藏版)》请在冰豆网上搜索。

测控课程设计微机实时测控系统.docx

测控课程设计微机实时测控系统

xx邮电大学课程设计报告

课程设计

名称

测控系统

学院

自动化

指导教师

学生姓名

班级

学号

设计一套完整的微机实时测控系统,具体内容包括:

1、了解测控系统设计相关知识和具体指标要求。

2、多功能A/D采集板的编程使用和信号采集。

3、信号的显示与处理。

4、控制信号的输出。

(选项)

5、测控系统软件设计与联调。

学生

课程设计

报告

(附页)

见附件

评语:

 

成绩:

 

指导教师签名:

年月日

一、设计任务

测控系统的设计涉及许多技术,其应用领域众多,在现代国防、现代工业、科研教育、机械医疗等领域里有着广泛的应用。

另一方面,它的理论性与实践性都很强,需要努力做到理论与实践相结合,为此我们安排此课程设计实验,加深同学们对测试技术理论的理解,加强同学们对实践操作能力的培养。

重点是了解测控系统设计的一般流程,掌握设计测控系统的一般方法,树立计算机测控系统的整体概念。

在生产过程和科学研究中所接触到的被测量大多数是非电物理量,例如位移,力,转速,扭矩,温度,振动,流量,风速,等等。

非电量种类繁多,特性千差万别,很多又是不便于直接测量的模拟信号。

为了测量与处理方便,需要把非电量转换为电量,这一步通常是通过各式传感器来转换,常称为一次转换;为适应计算机的统计分析处理,又需要把模拟量转化为数字量,这一步是通过A/D转换来实现的,常称为二次转换。

这两方面是测试系统的两个重要环节(在测控领域里,有时还需要把处理好的数字量再转换成模拟量反馈回来控制工作进程,常称为三次转换)。

它们的关系如下:

 

本次课程设计实验是设计一套完整的微机实时测控系统,具体内容包括:

1、了解测控系统设计相关知识和具体指标要求。

2、多功能A/D采集板的编程使用和信号采集。

3、信号的显示与处理。

4、控制信号的输出。

(选项)

5、测控系统软件设计与联调。

编写A/D板的初始化程序与采集程序,调试上述程序,绘制波形,可用信号发生器输出的信号调试。

注意:

图形曲线以及幅值刻度和时间刻度要与实际信号一直。

调试程序可参考所给的参考程序。

调试成功后可编辑其他相关功能,(如设置采样长度、采样间隔、形成数据文件、FFT分析及波形、统计分析等)。

自动检测系统在数据处理功能上除了可进行FFT分析外,还应给出检测信号的最大值、最小值、平均值。

自动分析得出信号的频率和周期。

所编程序包括菜单的实现及相关功能,如举例所示,其中功能必须包括数据的采集及保存,波形显示,数据显示、FFT变换、信号周期和频率的自动检测。

通过D/A输出相关波形,由示波器进行观测的内容作为选项,完成基本内容的同学可以设计实习。

二、小组分工

在这次的课程设计中,为了提高效率,我们小组安排了合理的分工,每人负责50%左右的工作。

具体如下:

小组成员魏峰负责测控软件中主界面的设计、程序校验和报告的撰写;

小组成员刘汉生负责工作菜单的设计及相关程序的编写、主干程序的编写以及程序的调试。

三、设计内容

1.设计思路

接到老师下达的任务后,我们首先完成了主界面和菜单的设计,通过了期中验收。

一个好的采集系统程序应有一个方便、实用、友好、快捷的工作界面,因此编制一个好的菜单很重要。

而后我们根据界面及工作菜单编写程序。

其中包括画频谱图、存取数据、fft变换、A/D板采集数据等等。

2.流程图

 

16位转12位

并转换到相应电压

 

Y

NN

 

Y

 

N

Y

 

3.主要程序

 

1)FFT变换:

PublicFunctionFFT0(AR()AsDouble,AI()AsDouble,nAsInteger,niAsInteger)

DimiAsInteger,jAsInteger,kAsInteger,lAsInteger,mAsInteger

DimIPAsInteger,LEAsInteger

DimL1AsInteger,N1AsInteger,n2AsInteger

DimSNAsDouble,TRAsDouble,TIAsDouble,wrAsDouble,wiAsDouble

DimURAsDouble,UIAsDouble,USAsDouble

m=NTOM(n)

n2=n/2

N1=n-1

SN=ni

j=1

Fori=1ToN1

Ifi

TR=AR(j-1)

AR(j-1)=AR(i-1)

AR(i-1)=TR

TI=AI(j-1)

AI(j-1)=AI(i-1)

AI(i-1)=TI

EndIf

k=n2

While(k

j=j-k

k=k/2

Wend

j=j+k

Nexti

Forl=1Tom

LE=2^l

L1=LE/2

UR=1#

UI=0#

wr=Cos(Pi/L1)

wi=SN*Sin(Pi/L1)

Forj=1ToL1

Fori=jTonStepLE

IP=i+L1

TR=AR(IP-1)*UR-AI(IP-1)*UI

TI=AI(IP-1)*UR+AR(IP-1)*UI

AR(IP-1)=AR(i-1)-TR

AI(IP-1)=AI(i-1)-TI

AR(i-1)=AR(i-1)+TR

AI(i-1)=AI(i-1)+TI

Nexti

US=UR

UR=US*wr-UI*wi

UI=UI*wr+US*wi

Nextj

Nextl

IfSN<>-1Then

Fori=1Ton

AR(i-1)=AR(i-1)/n

AI(i-1)=AI(i-1)/n

Nexti

EndIf

EndFunction

PublicFunctionFFT1(AR()AsDouble,AI()AsDouble,nAsInteger,niAsInteger)

DimiAsInteger,jAsInteger,kAsInteger,lAsInteger,mAsInteger

DimIPAsInteger,LEAsInteger

DimL1AsInteger,N1AsInteger,n2AsInteger

DimSNAsDouble,TRAsDouble,TIAsDouble,wrAsDouble,wiAsDouble

DimURAsDouble,UIAsDouble,USAsDouble

m=NTOM(n)

n2=n/2

N1=n-1

SN=ni

j=1

Fori=1ToN1

Ifi

TR=AR(j)

AR(j)=AR(i)

AR(i)=TR

TI=AI(j)

AI(j)=AI(i)

AI(i)=TI

EndIf

k=n2

While(k

j=j-k

k=k/2

Wend

j=j+k

Nexti

Forl=1Tom

LE=2^l

L1=LE/2

UR=1#

UI=0#

wr=Cos(Pi/L1)

wi=SN*Sin(Pi/L1)

Forj=1ToL1

Fori=jTonStepLE

IP=i+L1

TR=AR(IP)*UR-AI(IP)*UI

TI=AI(IP)*UR+AR(IP)*UI

AR(IP)=AR(i)-TR

AI(IP)=AI(i)-TI

AR(i)=AR(i)+TR

AI(i)=AI(i)+TI

Nexti

US=UR

UR=US*wr-UI*wi

UI=UI*wr+US*wi

Nextj

Nextl

IfSN<>-1Then

Fori=1Ton

AR(i)=AR(i)/n

AI(i)=AI(i)/n

Nexti

EndIf

EndFunction

2)数据保存和读取:

PublicSubload()'数据保存

Dimtemp

Dimi,jAsInteger

IfCount<>0Then

res=MsgBox("当前数据数否保存?

",vbYesNo)

Ifres=6Then

Callstore

EndIf

EndIf

CD.ShowOpen

i=0

IfCD.FileName<>""Then

OpenCD.FileNameForInputAs#1

DoWhileNotEOF

(1)

Input#1,temp

data(i)=temp

i=i+1

Loop

Close1

Text4=maxdata()

Text5=mindata()

Text6=avdata()

Text7.Text=sample_length

Text8.Text=sample_fre

MsgBox("数据读取完成!

")

EndIf

EndSub

PublicSubstore()'数据读取

DimstrAsString

j=0

g=sample_length

Ifsample_length<>0Then

str=Format(Now,"yyyymmddhhmmss")&".txt"

OpenstrForAppendAs#1

DoWhilej<>g

Print#1,data(j)

j=j+1

Loop

Close1

MsgBox("完成数据储存!

")

Else

MsgBox("无数据,无法储存!

")

EndIf

EndSub

3)AD数据采集模块

temp=AC_6111_AD(NTportio,cardid(0),4000/sample_fre,sample_path,sample_path,3,0,0,0,0,0,0,Data1(0),sample_length)

Fori=0Tosample_length'转换数据,16位转化为12位

data(i)=((Data1(i)And&HFFF0&)/16-2048)/2048#*10#'设置为显示到-10V到10V

Nexti

4)数据的时域曲线显示和频率周期的计算

PublicSubshi()

Text10.Visible=False

Picture2.Visible=True

Picture2.BackColor=RGB(255,255,255)

Picture2.Scale(0,10)-(512,-10)

Picture2.Line(0,0)-(512,0)

Picture2.Line(0,10)-(0,-10)

'绘制与x轴平行的直线,并标记y轴

Fori=0To10

Picture2.Line(0,10-2*i)-(512,10-2*i)

Picture2.CurrentX=5

Picture2.CurrentY=10-2*i

Picture2.Print(10-2*i)&"V"

Nexti

'绘制与y轴平行的直线,并标记x轴

DimjAsSingle

Forj=0To512Step30'''一个格含50个数

Picture2.Line(j,-10)-(j,10),vbBlue

Picture2.CurrentY=0

Picture2.CurrentX=j

IfAbs(j/sample_fre)<1Then

Picture2.PrintFormat(j/sample_fre,"#0.####")

Else

Picture2.PrintFormat(j/sample_fre,"##.####")

EndIf

Nextj

'绘制波形

Dimt1,t2,t3AsInteger

DimperiodAsDouble

period=1/sample_fre

Fori=1Tosample_length-1

Ifdata(i)*data(i+1)<=0Anddata(i)<0Andt1=0Then'采样值发生正跳变

t2=i

t1=t1+1

EndIf

Ifdata(i)*data(i+1)<=0Anddata(i)>0Andt1=1Then'采样值发生负跳变

t3=i

t1=t1+1

EndIf

Nexti

interv=2*Abs(t3-t2)*period'周期

Ifinterv<>0Thenfrequency=1/interv'频率

Text4=maxdata()&"V"

Text5=mindata()&"V"

Text6=avdata()&"V"

Text7.Text=sample_length

Text8.Text=sample_fre

Fori=1Tosample_lengthStep1

data(i)=data(i)*zy

Nexti

Fori=1Tosample_lengthStep1

Picture2.Line(i-1,data(i-1))-(i,data(i)),vbRed

Nexti

Text9.Text=interv

Text11.Text=frequency

'CL.Add(data(j)/10*s1)

'DRW.Draw

'Nextj

 

EndSub

5)FFT曲线显示

PublicSubfft()

ConstfftIn=2048

DimiAsInteger

Dimxr(2048)AsDouble

Dimxi(2048)AsDouble

'赋值,IaIn(i)是采得的数据。

Fori=0To2048

xr(i)=100*data(i)

xi(i)=0

Next

CallFFT0(xr(),xi(),2048,1)

'绘图

PicI_FFT.Scale(0,100)-(fftIn-1,-10)

PicI_FFT.DrawWidth=2

Fori=0TofftIn-1

PicI_FFT.Line(i,Abs(xr(i)))-(i+1,Abs(xr(i+1))),vbBlue

Nexti

EndSub

6)导出图形

PrivateSubCommand4_Click()

CommonDialog3.ShowSave''显示另存为对话框

CommonDialog3.Filter="(*.bmp)|*.bmp"

FileName=CommonDialog3.FileName

SavePicturePicture2.Image,"filename.BMP"

'EndSub

7)截图

PrivateSubCommand1_Click()

DoEvents

BitBltForm2.hDC,0,0,Screen.Width,Screen.Height,GetDC(GetDesktopWindow),0,0,&HCC0020

SetWindowPosForm2.hWnd,HWND_TOPMOST,0,0,Screen.Width\Screen.TwipsPerPixelX,Screen.Height\Screen.TwipsPerPixelY,SWP_SHOWWINDOW

EndSub

调用模块如下

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'

OptionExplicit

OptionBase0

PublicDeclareFunctionSetWindowPosLib"USER32"(ByValhWndAsLong,ByValhWndInsertAfterAsLong,ByValxAsLong,ByValyAsLong,ByValcxAsLong,ByValcyAsLong,ByValwFlagsAsLong)AsLong

PublicConstHWND_TOPMOST=-1

PublicConstSWP_SHOWWINDOW=&H40

PublicTypePALETTEENTRY

peRedAsByte

peGreenAsByte

peBlueAsByte

peFlagsAsByte

EndType

PublicTypeLOGPALETTE

palVersionAsInteger

palNumEntriesAsInteger

palPalEntry(255)AsPALETTEENTRY'Enoughfor256colors.

EndType

PublicTypeGUID

Data1AsLong

Data2AsInteger

Data3AsInteger

Data4(7)AsByte

EndType

PublicConstRASTERCAPSAsLong=38

PublicConstRC_PALETTEAsLong=&H100

PublicConstSIZEPALETTEAsLong=104

PublicDeclareFunctionCreateCompatibleDCLib"GDI32"(ByValhDCAsLong)AsLong

PublicDeclareFunctionCreateCompatibleBitmapLib"GDI32"(ByValhDCAsLong,ByValnWidthAsLong,ByValnHeightAsLong)AsLong

PublicDeclareFunctionGetDeviceCapsLib"GDI32"(ByValhDCAsLong,ByValiCapabilitiyAsLong)AsLong

PublicDeclareFunctionGetSystemPaletteEntriesLib"GDI32"(ByValhDCAsLong,ByValwStartIndexAsLong,ByValwNumEntriesAsLong,lpPaletteEntriesAsPALETTEENTRY)AsLong

PublicDeclareFunctionCreatePaletteLib"GDI32"(lpLogPaletteAsLOGPALETTE)AsLong

PublicDeclareFunctionSelectObjectLib"GDI32"(ByValhDCAsLong,ByValhObjectAsLong)AsLong

PublicDeclareFunctionBitBltLib"GDI32"(ByValhDCDestAsLong,ByValXDestAsLong,ByValYDestAsLong,ByValnWidthAsLong,ByValnHeightAsLong,ByValhDCSrcAsLong,ByValXSrcAsLong,ByValYSrcAsLong,ByValdwRopAsLong)AsLong

PublicDeclareFunctionDeleteDCLib"GDI32"(ByValhDCAsLong)AsLong

PublicDeclareFunctionSelectPaletteLib"GDI32"(ByValhDCAsLong,ByValhPaletteAsLong,ByValbForceBackgroundAsLong)AsLong

PublicDeclareFunctionRealizePaletteLib"GDI32"(ByValhDCAsLong)AsLong

PublicDeclareFunctionGetWindowDCLib"USER32"(ByValhWndAsLong)AsLong

PublicDeclareFunctionGetDCLib"USER32"(ByValhWndAsLong)AsLong

PublicDeclareFunctionReleaseDCLib"USER32"(ByValhWndAsLong,ByValhDCAsLong)AsLong

PublicDeclareFunctionGetDesktopWindowLib"USER32"()AsLong

PublicTypePicBmp

SizeAsLong

TypeAsLong

hBmpAsLong

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1