资料库

VB PID 算法代码.pdf

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
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
分享到:
收藏