vb PID 调节算法 — Windows Live
Windows Live ™
Hotmail Messenger Office 照片
MSN
个人资料 工业集散控制 照片 日志 列表 更多
Page 1 of 2
登录
工具
帮助
< 上一页 下一页 >
日志
日志
摘要
排列方式:
日期
2011年 3月
2011年 2月
2011年 1月
2010年 12月
2010年 11月
2010年 10月
2010年 9月
2010年 8月
2010年 7月
2010年 6月
2010年 5月
2010年 4月
2010年 3月
2010年 2月
2010年 1月
2009年 12月
2009年 11月
2009年 10月
2009年 9月
2009年 8月
2009年 7月
2009年 6月
2009年 5月
2009年 4月
2009年 3月
2009年 2月
2009年 1月
2008年 12月
2008年 11月
2008年 10月
2008年 9月
5月31日
vb PID 调节算法
Public Type PID
ParP As Single '比例系数
ParI As Single '积分系数
ParD As Single '微分系数
OP As Double
PvMin As Double '给定值下限
PvMax As Double '给定值上限
SvMin As Double '设定值下限
SvMax As Double '设定值上限
OpMin As Double '输出值下限
OpMax As Double '输出值上限
ChangeMin As Double '死区范围
ChangeMax As Double '调节范围
OutPutMax As Double '超调时输出
CtlDirection As Long '调节方向
ControlT As Double 'PID设备调控中期
PvRange As Double 'PV值的量程
OutDx As Double 'PID计算出的输出增加值
SvPvdx As Double
SvPvdx1 As Double
SvPvdx2 As Double
Lvbo As Integer
End Type
Public Function PIDCALC(ByVal Sv As Double, ByVal Pv As Double, PIDC As PID) As Double
On Error Resume Next
If PIDC.ControlT = 0 Then PIDC.ControlT = 1 '确保控制周期不为零
PIDC.PvRange = PIDC.PvMax - PIDC.PvMin
If PIDC.PvRange <= 0 Then PIDC.PvRange = 1 '计算pv值的量程,并确保其不为零
PIDC.ChangeMax = PIDC.PvRange * PIDC.ChangeMax / 100 '把超调值由百分比转换成实际物理量
If Pv < PIDC.PvMin Then Pv = PIDC.PvMin 'pv值和sv值必须设定在设定的限值范围内
If Pv > PIDC.PvMax Then Pv = PIDC.PvMax
If Sv < PIDC.PvMin Then Sv = PIDC.PvMin
If Sv > PIDC.SvMax Then Sv = PIDC.SvMax
'计算sv和pv的差值,第一次计算时,取SvPvdx1、SvPvdx2值和SvPvdx相同
PIDC.SvPvdx = Sv - Pv
'初始设定SvPvdx1的初值为9999;标记是否第一次进行pid计防止SvPvdx和SvPvdx2的值为0
If PIDC.SvPvdx1 = 9999 Then
PIDC.SvPvdx1 = PIDC.SvPvdx
PIDC.SvPvdx2 = PIDC.SvPvdx
End If
'进行PID运算,ParI=0 和 ParI<>0的算法不一样
'ControlT :调节周期,和设备的采集周期相同(单位为:秒)
If PIDC.ParI <> 0 Then
PIDC.OutDx = PIDC.ParP * (PIDC.SvPvdx - PIDC.SvPvdx1 + PIDC.SvPvdx * PIDC.ControlT / PIDC.ParI + _
(PIDC.SvPvdx - 2 * PIDC.SvPvdx1 + PIDC.SvPvdx2) * PIDC.ParD / PIDC.ControlT)
Else
PIDC.OutDx = PIDC.ParP * (PIDC.SvPvdx - PIDC.SvPvdx1 + (PIDC.SvPvdx - 2 * PIDC.SvPvdx1 + PIDC.SvPvdx2) * PIDC.ParD / PIDC.ControlT)
End If
PIDC.SvPvdx2 = PIDC.SvPvdx1
PIDC.SvPvdx1 = PIDC.SvPvdx
'处在死区输出值保持不变
If Abs(PIDC.SvPvdx) < Abs(PIDC.ChangeMin) Then
PIDC.OutDx = 0
End If
If PIDC.CtlDirection = 1 Then
PIDC.OP = PIDC.OP + PIDC.OutDx
'正向控制时的超调处理
If Abs(PIDC.SvPvdx) > PIDC.ChangeMax And PIDC.ChangeMax > 0 Then
If PIDC.SvPvdx > 0 Then
PIDC.OP = PIDC.OutPutMax
End If
End If
Else
PIDC.OP = PIDC.OP - PIDC.OutDx
'反向控制时的超调处理
http://liuyao0321.spaces.live.com/Blog/cns!7C199C1DD05686B9!126.entry
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
2011-3-7
vb PID 调节算法 — Windows Live
Page 2 of 2
If Abs(PIDC.SvPvdx) >= PIDC.ChangeMax And PIDC.ChangeMax > 0 Then
If PIDC.SvPvdx < 0 Then
PIDC.OP = PIDC.OutPutMax
End If
End If
End If
'OP值必须在设定的限值范围之内
If PIDC.OP < PIDC.OpMin Then
PIDC.OP = PIDC.OpMin
End If
If PIDC.OP > PIDC.OpMax Then
PIDC.OP = PIDC.OpMax
End If
End Function
函数 PIDCALC 计算PID增量OP
13:54 计算机与 Internet
|
2008年 8月
2008年 7月
2008年 6月
2008年 5月
2008年 4月
2008年 3月
2008年 2月
2008年 1月
2007年 12月
2007年 11月
2007年 10月
2007年 9月
2007年 8月
2007年 7月
2007年 6月
2007年 5月
© 2011 Microsoft 使用条款 隐私声明 关于我们的广告 广告
行为准则 安全 帮助中心 反馈 举报不良信息 简体中文
http://liuyao0321.spaces.live.com/Blog/cns!7C199C1DD05686B9!126.entry
PDF 文件使用 "pdfFactory Pro" 试用版本创建 www.fineprint.cn
2011-3-7