无线通信实验.docx
- 文档编号:10972867
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:21
- 大小:427.88KB
无线通信实验.docx
《无线通信实验.docx》由会员分享,可在线阅读,更多相关《无线通信实验.docx(21页珍藏版)》请在冰豆网上搜索。
无线通信实验
目录
一无线通信网络简介1
二无线通信平台的VB控制系统实验2
1实验目的2
2实验仪器3
3实验内容3
4实验电路3
5实验步骤3
三基于无线通信平台的VB温度PID控制系统硬件设计5
1系统硬件设计5
2系统界面设计5
3数据采集与显示程序设计6
4系统控制方法设计9
四系统运行结果与分析19
1系统运行结果19
2分析改进措施20
五参考文献20
一无线通信网络简介
VisualBasic(VB)是一种由微软公司开发的包含协助开发环境的事件驱动编程语言。
从任何标准来说,VB都是世界上使用人数最多的语言——不仅是盛赞VB的开发者还是抱怨VB的开发者的数量。
它源自于BASIC编程语言。
VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、RDO、ADO连接数据库,或者轻松的创建ActiveX控件。
程序员可以轻松的使用VB提供的组件快速建立一个应用程序。
无线通信(WirelessCommunication)是利用电磁波信号可以在自由空间中传播的特性进行信息交换的一种通信方式,近些年信息通信领域中,发展最快、应用最广的就是无线通信技术。
无线通信网络,由于其特有的非接线通信方式的优点,广泛地应用于特定的地理位置(如山区、油田和水利设施等)的现场遥测遥控领域。
尤其在分布距离较远且数据传输量不大时,无线通信控制网络的优势更为明显。
典型无线通信网络分布式控制系统见图1所示
232232
图1.无线通信控制网络
图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图标,进入“7000Utility”界面,程序自动搜索模块。
再点击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图标,进入“7000Utility”界面,程序自动搜索模块。
再点击7012模块,点击setting。
结果如图5所示
图57000Utility界面
“7000Utility”界面6串口监视精灵双击串口监视精灵软件,进程ID选择25847000util.exe,串口号选择所有COM口,点击启动,界面如图6所示:
图6串口监视精灵
串口监视精灵界面通过观察监视结果的数据得知指令为#02“回车”;串口调试助手在串口调试助手的界面下方中:
加入指令,#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
'EndSub
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("&H"+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
NAP7000X1.ModuleAddress=Val("&H"+"01")
NAP7000X1.ModuleID=CLng("&H"+"7021")
NAP7000X1.AnalogOut(0)
Text5.Text="0.00"
EndSub
PrivateSubForm_Unload(CancelAsInteger)
TimerDin.Enabled=False
TimerCurOutV.Enabled=False
'------------使PID输出0
TimerOutV.Enabled=False
NAP7000X1.ModuleAddress=Val("&H"+"01")
NAP7000X1.ModuleID=CLng("&H"+"7021")
NAP7000X1.AnalogOut(0)
'OpenIconFrmFace.hWnd
EndSub
PrivateSubText8_Change()
'''''''''''phoenixaddition'''''''''''''''''''''''''''''''''
'm_v_Din=(20/2)*Din
'Text8.Text=Format(m_v_Din,"###.0")'每0.1秒显示一次温度
''''''''''phoenixaddition'''''''''''''''''''''''''''''''''''''
EndSub
PrivateSubTimerDin_Timer()
'-------------输入温度
NAP7000X1.ModuleAddress=Val("&H"+Combo3.Text)
NAP7000X1.ModuleID=CLng("&H"+Combo4.Text)
Din=NAP7000X1.AnalogIn
IfDin<0ThenDin=0
fCountAllDin=Din+fCountAllDin
iCounterDin=iCounterDin+1
If(iCounterDin>9)Then
Din=fCountAllDin/10
'Text8.Text=Format(20*Din,"###.0")'每0.1秒显示一次温度
iCounterDin=0
fCountAllDin=0
EndIf
EndSub
PrivateSubTimerOutV_Timer()
'Fori=0To9
'NAP7000X1.ModuleAddress=Val("&H"+Combo3.Text)
'NAP7000X1.ModuleID=CLng("&H"+Combo4.Text)
'Din=NAP7000X1.AnalogIn
'
'fCountAllDin=Din+fCountAllDin
'iCounterDin=iCounterDin+1
'If(iCounterDin>=9)Then
'Din=fCountAllDin/10
'Text8.Text=Format(20*Din,"###.0")'每显示一次温度
'iCounterDin=0
'fCountAllDin=0
'EndIf
'Next
'-------------平均处理
'fCountAllDin=Din+fCountAllDin
'iCounterDin=iCounterDin+1
'If(iCounterDin>9)Then
'Din=fCountAllDin/10
'iCounterDin=0
'fCountAllDin=0
Text8.Text=Format(10*Din,"###.0")'每0.6显示一次温度
'------------计算偏差及PID输出值
CurTemp=Din
'''''''''''phoenixaddition'''''''''''''''''''''''''''''''''
'CurTemp=m_v_Din
''''''''''phoenixaddition'''''''''''''''''''''''''''''''''''''
ETemp(3)=ETemp
(2)
ETemp
(2)=ETemp
(1)
'ETemp
(1)=TargTemp-CurTemp
ETemp
(1)=m_i_TargTemp-CurTemp
'''''''''''phoenixaddition'''''''''''''''''''''''''''''''''
'CurTemp=m_v_Din
'ETemp
(1)=TargTemp-CurTemp
''''''''''phoenixaddition'''''''''''''''''''''''''''''''''''''
'&&&&&&&&&&&&&&&&&&&
'IfTargTemp-CurTemp>LimTempThen
'OutV=5
'Else
'EndIf
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
OutV=5
ElseIfOutV<0.05Then
OutV=0
EndIf
'OutV=OutV+OutPid
'IfOutV>1Then
'OutV=1
'EndIf
'IfOutV<0Then
'OutV=0
'EndIf
'OutV=OutV*5
''&&&&&&&&&&&&&&&&&&&
m_i_test=OutV
NAP7000X1.ModuleAddress=Val("&H"+"01")
NAP7000X1.ModuleID=CLng("&H"+"7021")
NAP7000X1.AnalogOut(OutV)
Text5.Text=Format(OutV,"#0.00")
'EndIf
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)
Next
'----------横坐标
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)
Fori=0To10
FrmPID.Line(WarmCurve1.Left+i*Xd,WarmCurve1.Top+WarmCurve1.Height)-(WarmCurve1.Left+i*Xd,WarmCurve1.Top+WarmCurve1.Height+150),RGB(0,0,255)
Next
Fori=0To19
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)
Next
EndSub
PrivateSubCombo5_Click()
DimiAsInteger
CtlTime=Val(Combo5.Text)
Fori=0To9
Label15(i).Caption=(i+1)*Val(Combo5.Text)/10
Next
TimerCurReTemp.Interval=Val(Combo5.Text)*60
EndSub
'PrivateSubWarmCurve1_MouseMoveGetData(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
'StatusBar1.Panels
(1).Text="当前坐标为:
"+Str(X)+","+Str(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 无线通信 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)