测控课程设计微机实时测控系统Word格式.docx
《测控课程设计微机实时测控系统Word格式.docx》由会员分享,可在线阅读,更多相关《测控课程设计微机实时测控系统Word格式.docx(27页珍藏版)》请在冰豆网上搜索。
![测控课程设计微机实时测控系统Word格式.docx](https://file1.bdocx.com/fileroot1/2023-1/29/39f21135-ecdf-4849-b4b9-5789d11432d0/39f21135-ecdf-4849-b4b9-5789d11432d01.gif)
指导教师签名:
年月日
一、设计任务
测控系统的设计涉及许多技术,其应用领域众多,在现代国防、现代工业、科研教育、机械医疗等领域里有着广泛的应用。
另一方面,它的理论性与实践性都很强,需要努力做到理论与实践相结合,为此我们安排此课程设计实验,加深同学们对测试技术理论的理解,加强同学们对实践操作能力的培养。
重点是了解测控系统设计的一般流程,掌握设计测控系统的一般方法,树立计算机测控系统的整体概念。
在生产过程和科学研究中所接触到的被测量大多数是非电物理量,例如位移,力,转速,扭矩,温度,振动,流量,风速,等等。
非电量种类繁多,特性千差万别,很多又是不便于直接测量的模拟信号。
为了测量与处理方便,需要把非电量转换为电量,这一步通常是通过各式传感器来转换,常称为一次转换;
为适应计算机的统计分析处理,又需要把模拟量转化为数字量,这一步是通过A/D转换来实现的,常称为二次转换。
这两方面是测试系统的两个重要环节(在测控领域里,有时还需要把处理好的数字量再转换成模拟量反馈回来控制工作进程,常称为三次转换)。
它们的关系如下:
本次课程设计实验是设计一套完整的微机实时测控系统,具体内容包括:
编写A/D板的初始化程序与采集程序,调试上述程序,绘制波形,可用信号发生器输出的信号调试。
注意:
图形曲线以及幅值刻度和时间刻度要与实际信号一直。
调试程序可参考所给的参考程序。
调试成功后可编辑其他相关功能,(如设置采样长度、采样间隔、形成数据文件、FFT分析及波形、统计分析等)。
自动检测系统在数据处理功能上除了可进行FFT分析外,还应给出检测信号的最大值、最小值、平均值。
自动分析得出信号的频率和周期。
所编程序包括菜单的实现及相关功能,如举例所示,其中功能必须包括数据的采集及保存,波形显示,数据显示、FFT变换、信号周期和频率的自动检测。
通过D/A输出相关波形,由示波器进行观测的内容作为选项,完成基本内容的同学可以设计实习。
二、小组分工
在这次的课程设计中,为了提高效率,我们小组安排了合理的分工,每人负责50%左右的工作。
具体如下:
小组成员魏峰负责测控软件中主界面的设计、程序校验和报告的撰写;
小组成员刘汉生负责工作菜单的设计及相关程序的编写、主干程序的编写以及程序的调试。
三、设计内容
1.设计思路
接到老师下达的任务后,我们首先完成了主界面和菜单的设计,通过了期中验收。
一个好的采集系统程序应有一个方便、实用、友好、快捷的工作界面,因此编制一个好的菜单很重要。
而后我们根据界面及工作菜单编写程序。
其中包括画频谱图、存取数据、fft变换、A/D板采集数据等等。
2.流程图
16位转12位
并转换到相应电压
Y
NN
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<
jThen
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=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
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
EndFunction
PublicFunctionFFT1(AR()AsDouble,AI()AsDouble,nAsInteger,niAsInteger)
TR=AR(j)
AR(j)=AR(i)
AR(i)=TR
TI=AI(j)
AI(j)=AI(i)
AI(i)=TI
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
AR(i)=AR(i)/n
AI(i)=AI(i)/n
EndFunction
2)数据保存和读取:
PublicSubload()'
数据保存
Dimtemp
Dimi,jAsInteger
IfCount<
0Then
res=MsgBox("
当前数据数否保存?
"
vbYesNo)
Ifres=6Then
Callstore
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<
str=Format(Now,"
yyyymmddhhmmss"
)&
.txt"
OpenstrForAppendAs#1
DoWhilej<
g
Print#1,data(j)
j=j+1
Loop
Close1
完成数据储存!
Else
MsgBox("
无数据,无法储存!
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"
绘制与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.####"
##.####"
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
=0Anddata(i)>
0Andt1=1Then'
采样值发生负跳变
t3=i
interv=2*Abs(t3-t2)*period'
周期
Ifinterv<
0Thenfrequency=1/interv'
频率
Text4=maxdata()&
Text5=mindata()&
Text6=avdata()&
Fori=1Tosample_lengthStep1
data(i)=data(i)*zy
Picture2.Line(i-1,data(i-1))-(i,data(i)),vbRed
Text9.Text=interv
Text11.Text=frequency
CL.Add(data(j)/10*s1)
DRW.Draw
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
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
调用模块如下
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.
PublicTypeGUID
Data1AsLong
Data2AsInteger
Data3AsInteger
Data4(7)AsByte
PublicConstRASTERCAPSAsLong=38
PublicConstRC_PALETTEAsLong=&
H100
PublicConstSIZEPALETTEAsLong=104
PublicDeclareFunctionCreateCompatibleDCLib"
GDI32"
(ByValhDCAsLong)AsLong
PublicDeclareFunctionCreateCompatibleBitmapLib"
(ByValhDCAsLong,ByValnWidthAsLong,ByValnHeightAsLong)AsLong
PublicDeclareFunctionGetDeviceCapsLib"
(ByValhDCAsLong,ByValiCapabilitiyAsLong)AsLong
PublicDeclareFunctionGetSystemPaletteEntriesLib"
(ByValhDCAsLong,ByValwStartIndexAsLong,ByValwNumEntriesAsLong,lpPaletteEntriesAsPALETTEENTRY)AsLong
PublicDeclareFunctionCreatePaletteLib"
(lpLogPaletteAsLOGPALETTE)AsLong
PublicDeclareFunctionSelectObjectLib"
(ByValhDCAsLong,ByValhObjectAsLong)AsLong
PublicDeclareFunctionBitBltLib"
(ByValhDCDestAsLong,ByValXDestAsLong,ByValYDestAsLong,ByValnWidthAsLong,ByValnHeightAsLong,ByValhDCSrcAsLong,ByValXSrcAsLong,ByValYSrcAsLong,ByValdwRopAsLong)AsLong
PublicDeclareFunctionDeleteDCLib"
PublicDeclareFunctionSelectPaletteLib"
(ByValhDCAsLong,ByValhPaletteAsLong,ByValbForceBackgroundAsLong)AsLong
PublicDeclareFunctionRealizePaletteLib"
PublicDeclareFunctionGetWindowDCLib"
(ByValhWndAsLong)AsLong
PublicDeclareFunctionGetDCLib"
PublicDeclareFunctionReleaseDCLib"
(ByValhWndAsLong,ByValhDCAsLong)AsLong
PublicDeclareFunctionGetDesktopWindowLib"
()AsLong
PublicTypePicBmp
SizeAsLong
TypeAsLong
hBmpAsLong