无线通信实验Word格式.docx
《无线通信实验Word格式.docx》由会员分享,可在线阅读,更多相关《无线通信实验Word格式.docx(21页珍藏版)》请在冰点文库上搜索。
图1中,采用台湾威达(ICP)无线通信模块SST900EXT,通信距离1km;
波特率最大19200;
232/485通信接口。
二无线通信平台的VB控制系统实验
1实验目的
1)掌握电热炉温度控制的原理及方法。
2)掌握基于无线通信平台VB电热炉温度控制系统PID控制算法。
2实验仪器
微机、自动控制实验箱、无线通信网络(泓格i7000系列)或以太网通信平台
3实验内容
(1)利用VisualBasic6.0软件和无线通信控制网络来设计模拟加热炉温度控制实验。
(2)通过VisualBasic6.0界面,调节PID实现对模拟加热炉温度的实时控制。
4实验电路
图2温度自动控制实验连接图
5实验步骤
(1)按照实验指导书上的电路图连线连接实验箱。
(2)在电脑上打开7000Utility界面双击7000Utility图标,进入&
#8220;
7000Utility&
#8221;
界面,程序自动搜索模块。
再点击7012模块,点击setting。
(3)在电脑上打开串口监视精灵双击串口监视精灵软件,进程ID选择25847000util.exe,串口号选择所有COM口,点击启动。
(4)串口监视精灵界面通过观察监视结果的数据得知指令为#02&
回车&
打开串口调试助手,在串口调试助手的界面下方中:
加入指令,#02回车,打开串口,手动发送,则在界面上就会显示实时的温度数据。
(5)打开VisualBASIC的对象窗体界面双击VisualBASIC,在对象窗体的工具栏处双击,选择部件选项,勾选MicrosoftCommControl6.0。
(6)部件界面添加按钮控件、文本控件,及com控件。
(7)VisualBASIC的代码窗体界面根据各个空件的功能,进行编程。
(8)将Pt100放入电烤箱能观察主界面温度曲线的变化,并且做记录。
三基于无线通信平台的VB温度PID控制系统硬件设计
1系统硬件设计
图3硬件电路设计
2系统界面设计
图4系统界面设计
3数据采集与显示程序设计
7000Utility界面双击7000Utility图标,进入&
结果如图5所示
图57000Utility界面
&
界面6串口监视精灵双击串口监视精灵软件,进程ID选择25847000util.exe,串口号选择所有COM口,点击启动,界面如图6所示:
图6串口监视精灵
串口监视精灵界面通过观察监视结果的数据得知指令为#02&
#8221;
串口调试助手在串口调试助手的界面下方中:
加入指令,#02回车,打开串口,手动发送,则在界面上就会显示实时的温度数据,串口调试助手的界面如图所示:
图7串口调试助手界面
VisualBASIC的对象窗体界面双击VisualBASIC,在对象窗体的工具栏处双击,选择部件选项,勾选MicrosoftCommControl6.0,结果如图8所示
图8VisualBASIC界面
图9VisualBASIC主界面
VisualBASIC的代码窗体界面根据各个空件的功能,进行编程,程序代码如图10所示
图10程序代码界面
4系统控制方法设计
控制系统主要由控制器和控制对象两部分组成,通过一定的控制方法使系统达到所要求的控制性能。
控制模式有开环控制、闭环控制和复合控制三种。
所谓的开环控制是控制器与控制对象之间只有正向作用,没有反向联系,是一种单向的控制过程。
如果控制器与控制对象之间既有正向作用又有反向联系,这种控制方式称为闭环控制或反馈控制。
在某种情况下,为了达到较好的控制效果,往往将开环控制和闭环控制结合起来,这种控制方式称为复合控制。
过程控制的基本算法很多,本实验主要采用PID控制算法。
PID控制是最早发展起来的控制策略之一,由于算法简单、鲁棒性好和可靠性高,被广泛应用于过程控制和运动控制中,尤其适用于可建立精确数学模型的确定性控制系统。
随着计算机进入控制领域,不仅可以用软件实现PID控制,而且可以利用计算机的逻辑功能,使PID控制更加灵活。
常规的PID控制系统原理框图如下图所示,系统由PID控制器和被控对象组成。
PID控
图11PID控制系统框图
制器是一种线性控制器,它根据给定值r(t)与实际输出值c(t)构成控制偏差:
e(t)=r(t)-c(t)将偏差的比例(P)、积分(I)和微分(D)通过线性组合构成控制量,对被控对象进行控制,故称PID控制器。
PID控制器各校正环节的作用如下:
1.比例环节:
比例调节的方程为y=
.e(t)其中y为比例调节器的输出,
为比例系数,e(t)为调节器的输入或偏差值,而e(t)=
-
。
这里
为设定的目标值,
为tt时刻的采样值。
比例调节器的输出变化与输入偏差成比例。
比例调节作用的大小除了与偏差e(t)有关外,主要取决于比例系数
的大小。
越大,比例调节作用越强,反之则越弱。
但对于大多数来说,
太大时,会引起系统自激振荡。
2.积分环节:
积分调节的方程为:
其中,Ti为积分时间。
积分调节的主要特点是调节器的输出不仅取决于偏差信号的大小,而且还主要与偏差存在时间有关。
只要有偏差存在,输出就会随时间不断增长,直到偏差消除后,调节器的输出才不会变化。
因此,积分作用能消除静差,这是它的主要优点。
但是它的主要缺点是动作缓慢。
而且在偏差刚一出现时,积分作用很弱,不能及时克服扰动的影响,使被调参数的动偏差增大,调节过程变长。
3.微分环节:
微分调节的方程如下:
,其中,dT为微分时间。
微分调节的主要特点是输出可以反映偏差的变化速度。
因此,对于一个固定不变的偏差,不管其数值有多大,也不会有微分作用输出。
所以微分作用不能消除静差,而只能在偏差发生变化时,产生调节作用。
4.系统设计程序代码
DimDin,OutPid,OutVAsSingle'
输入输出电压
DimLimTempAsSingle'
阈值
DimfCountAllOutv,fCountAllDinAsSingle'
DimiCounterOutv,iCounterDinAsInteger
Dimm_i_testAsInteger
DimdVoltAsSingle
DimdTempAsSingle
Dimm_i_TargTempAsSingle
'
DimTimeAsLong
Dimm_start_timeAsDate
DimCtlTimeAsLong
Dimm_v_DinAsSingle
------------输出电压曲线
PrivateSubCmdCurOutV_MouseEnter()
EndSub
'
‘WarmCurve1.YMaxValue=10
WarmCurve1.YAxisDiv=10
WarmCurve1.XAxisDiv=10
TimerCurOutV.Enabled=True
CallTimerCurOutV_Timer
PrivateSubCmdStart_Click()
DimXAsLong
DimRetAsVariant
IfText1.Text="
"
OrText2.Text="
OrText3.Text="
OrText4.Text="
Then
Ret=MsgBox("
请设定好各参数"
vbDefaultButton1+vbOKOnly,"
警告"
)
ExitSub
EndIf
------------设置PID参数
T=Val(Text1.Text)*1000
Kp=Val(Text2.Text)
Td=Val(Text3.Text)
Ti=Val(Text4.Text)
TimerOutV.Interval=T
Td=kp*Td/Val(Text1.Text)
Ti=Kp*Val(Text1.Text)/Ti
TargTemp=Val(Text6.Text)
TargTemp=TargTemp*1/20
m_i_TargTemp=TargTemp*1/10
-----------设置模块参数
NAP7000X1.PortOpen=True
NAP7000X1.BaudRate=Val(Combo2.Text)
NAP7000X1.CheckSum=True
NAP7000X1.COMPort=Val(Combo1.Text)
NAP7000X1.ModuleAddress=Val("
&
H"
+Combo3.Text)
NAP7000X1.ChannelNo=Val(Text7.Text)
NAP7000X1.ModuleID=CLng("
+Combo4.Text)
-----------开始工作
Text8.Text=Str(20*Din)+"
"
+Str(u)
WarmCurve1.iCurCuve=2
ForX=WarmCurve1.LeftToWarmCurve1.Left+WarmCurve1.WidthStep7
WarmCurve1.AddLineDot(TargTemp*20)
WarmCurve1.AddLineDot(m_i_TargTemp*10)
NextX
TimerDin.Enabled=True
TimerOutV.Enabled=True
m_start_time=Time
PrivateSubCmdExit_Click()
TimerDin.Enabled=False
TimerOutV.Enabled=False
------------使PID输出0
+"
01"
7021"
NAP7000X1.AnalogOut(0)
Text5.Text="
0.00"
PrivateSubForm_Unload(CancelAsInteger)
TimerCurOutV.Enabled=False
OpenIconFrmFace.hWnd
PrivateSubText8_Change()
phoenixaddition'
m_v_Din=(20/2)*Din
Text8.Text=Format(m_v_Din,"
###.0"
)'
每0.1秒显示一次温度
PrivateSubTimerDin_Timer()
-------------输入温度
Din=NAP7000X1.AnalogIn
IfDin<
0ThenDin=0
fCountAllDin=Din+fCountAllDin
iCounterDin=iCounterDin+1
If(iCounterDin>
9)Then
Din=fCountAllDin/10
Text8.Text=Format(20*Din,"
iCounterDin=0
fCountAllDin=0
PrivateSubTimerOutV_Timer()
Fori=0To9
=9)Then
Text8.Text=Format(20*Din,"
每显示一次温度
Next
-------------平均处理
Text8.Text=Format(10*Din,"
每0.6显示一次温度
------------计算偏差及PID输出值
CurTemp=Din
CurTemp=m_v_Din
ETemp(3)=ETemp
(2)
ETemp
(2)=ETemp
(1)
ETemp
(1)=TargTemp-CurTemp
ETemp
(1)=m_i_TargTemp-CurTemp
IfTargTemp-CurTemp>
LimTempThen
OutV=5
Else
OutPid=Ti*ETemp
(1)+Kp*(ETemp
(1)-ETemp
(2))'
+'
Td*(ETemp
(1)-2*ETemp
(2)+ETemp(3))
OutV=OutV/2
OutPid=OutPid/2
OutV=OutV+OutPid
OutV=OutV/2+OutPid/2
IfOutV>
4.95Then
ElseIfOutV<
0.05Then
OutV=0
OutV=OutV+OutPid
IfOutV>
1Then
OutV=1
EndIf
IfOutV<
0Then
OutV=OutV*5
m_i_test=OutV
NAP7000X1.AnalogOut(OutV)
Text5.Text=Format(OutV,"
#0.00"
EndSub
-----Picture2初始设置
FrmPID.Picture2.AutoRedraw=True
FrmPID.Picture2.ScaleWidth=1000
FrmPID.Picture2.ScaleHeight=10
FrmPID.Picture2.ScaleTop=-5
FrmPID.Picture2.ScaleLeft=0
FrmPID.Picture2.Line(0,0)-(FrmPID.Picture2.ScaleLeft+FrmPID.Picture2.ScaleWidth,0),RGB(192,192,0)
FrmPID.Picture2.PSet(0,0)
Me.AutoRedraw=True
----------纵坐标
Line5.Y1=(WarmCurve1.Top+WarmCurve1.Height/2)
Line5.Y2=Line5.Y1
Line6.Y1=(WarmCurve1.Top+WarmCurve1.Height)
Line6.Y2=Line6.Y1
Yd=(WarmCurve1.Height)/10
Fori=0To10
FrmPID.Line(WarmCurve1.Left-150,WarmCurve1.Top+i*Yd)-(WarmCurve1.Left,WarmCurve1.Top+i*Yd),RGB(0,0,255)
Next
Fori=0To19
FrmPID.Line(WarmCurve1.Left-150/2,WarmCurve1.Top+((i+1)/2)*Yd)-(WarmCurve1.Left,WarmCurve1.Top+((i+1)/2)*Yd),RGB(0,0,255)
----------横坐标
Line8.X1=WarmCurve1.Left+WarmCurve1.Width/2
Line8.X2=Line8.X1
Line9.X1=WarmCurve1.Left+WarmCurve1.Width
Line9.X2=Line9.X1
Xd=(WarmCurve1.Width/10)
FrmPID.Line(WarmCurve1.Left+i*Xd,WarmCurve1.Top+WarmCurve1.Height)-(WarmCurve1.Left+i*Xd,WarmCurve1.Top+WarmCurve1.Height+150),RGB(0,0,255)
FrmPID.Line(WarmCurve1.Left+((i+1)/2)*Xd,WarmCurve1.Top+WarmCurve1.Height)-(WarmCurve1.Left+((i+1)/2)*Xd,WarmCurve1.Top+WarmCurve1.Height+150/2),RGB(0,0,255)
PrivateSubCombo5_Click()
DimiAsInteger
CtlTime=Val(Combo5.Text)
Label15(i).Caption=(i+1)*Val(Combo5.Text)/10
TimerCurReTemp.Interval=Val(Combo5.Text)*60
PrivateSubWarmCurve1_MouseMoveGetData(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
StatusBar1.Panels
(1).Text="
当前坐标为:
+Str(X)+"
"
+Str(