基于PID算法的房间温度控制及Python程序
学习Python的推荐顺序是:入门-基础语法-数据结构和算法-框架与库 #生活技巧# #工作学习技巧# #编程语言学习路径#
房间温度模糊PID控制研究
PID算法的基础知识
VAV 空调系统
VAV 空调系统主要由新风管、回风管、送风管等风管系统,空气处理及输送系统,压力传感器、变频器、温湿度传感器等自动控制系统,以及变风量末端装置等部件组成。其中,末端装置是本系统中十分重要的组成部分。房间温控器与变风量末端控制器共同构成串级自动控制回路,主控量为室内温度,辅控量为气流量。
首先,变风量末端控制器通过无线传感器网络采集房间温度,与设定的温度比较得出偏差,输出风量调整信号,调节风阀开度以改变送风量,保持室内温度在设定值附近。同时,通过风管内的压力传感器检测管道压力变化,通过变频器调整送风机转速,消除管道压力的波动对实际送风量的影响。因此,末端装置是变风量空调系统的关键设备之一。其基本构成图,如图 2.1 所示。
综上所述,中央空调主要通过变风量末端装置来实现室内温度调节,而风阀又是末端装置中控制空调房间温度的关键环节。因此,本文旨在基于嵌入式系统和无线传感器网络,选用合适的控制策略,提出便捷的监控方式,设计一套高效智能的 VAV 空调系统末端控制器,实现对变风量空调系统末端装置的风阀高效控制。
VAV 系统末端控制器总体设计方案
中央空调末端控制器是中央空调系统热交换的最后一个环节,更是中央空调系统中最重要的装置之一。特别是对变风量空调系统而言,其对空调系统节能有重要意义。此外,无线、多点的数据采集方式可提高空调房间环境表征的灵活性和准确性,对于保持空调房间舒适度也有十分重要的意义。因此,设计一个能灵活、准确地表征空间环境特征,并在不同送风条件和负荷下达到节能、高效控制效果的末端控制器,是节能和保持舒适度的关键。结合现有 VAV 系统末端控制器结构,本文设计的 VAV系统末端控制器结构示意图,如图 3.1 所示。
上图借助 Tiny OS 系统组建无线传感器网络,在嵌入式系统硬件平台上实现模糊 PID 控制策略,设计了一种基于无线传感器网络,并结合嵌入式系统和模糊 PID控制策略的 VAV 中央空调末端控制器。该控制器可对网络覆盖区域内多点进行无线实时检测,替代以往单点、有线的数据采集方式,提高系统数据采集的灵活性和环境信息表征的准确性;基于 ARM9 处理器以及 Linux 嵌入式操作系统,替代以往低端裸机,提高系统数据处理能力和控制效率;采用模糊 PID 控制策略,实现了智能控制策略在硬件系统平台上的应用,改善了控制器的实际控制效果;基于 TCP/IP 协议,应用 Wi-Fi无线网络和智能手机 APP,改进以往显示屏和按键,提高了空调房间温湿度显示与设定的便捷性。
VAV 系统模糊 PID 控制策略
虽然常规 PID 控制使用可靠,结构简单,控制精度高,但其 PID 参数难以在线调整,难以控制强时变、非线性等复杂工业过程。此外,当外部环境改变时,其抗干扰能力差,不能自动调整其参数。而模糊控制恰巧可以解决具有非线性、不确定性等复杂系统的控制问题。
VAV 空调系统有着时变性、非线性、大滞后、对象模型不精准等特点,因此用传统的 PID 很难达到很好的控制效果。若在常规 PID 的基础上采用模糊控制自动调整 PID 参数,则可使其不断适应外部环境的变化。
因此,将模糊控制与 PID 控制相结合构成模糊 PID 控制策略,其既具有模糊控制能够解决非线性、不确定性和有较强鲁棒性的优点,又延续了传统 PID 其较高的控制精度。采用模糊 PID 控制策略可以很好的克服上述缺陷,提高抗干扰能力和响应速度。模糊 PID 控制系统结构图,如图 4.2 所示。
上图中的模糊控制器选用二维控制器,以室内温度与设定温度的偏差 e 及其变化率ec 作输入,乘以各自的量化因子后进行模糊化处理,输出为 PID 控制器比例因子、积分与微分时间的变化量,用于调整控制器的 P、I、D 三个参量,最终在线校正得到三个参数Kp ,Ki,Kd。随后 PID 控制器采用增量式的离散算法,得到控制量的值。
VAV 系统模糊 PID 输入输出变量的模糊化设计
由于模糊控制算法本身变量是模糊量,而模糊控制器的输入、输出都要求是精确量。因此,需将 VAV 空调系统中的偏差 e 及偏差变化率 ec 精确量进行模糊化处理:一方面,是模糊的划分,主要确定论域中模糊量的个数;另一方面,是确定隶属度函数,主要是选择合适的隶属度函数。这样,便可以在模糊量和精确量之间随意转换。
VAV 系统模糊规则和推理算法设计
VAV 系统嵌入式末端控制器的输出控制量主要由 PID 控制的kp 、ki 、kd 三个参数决定,而 PID 的这三个参数是由模糊控制的模糊规则在线整定的。因此,模糊规则设计的好坏与否直接影响末端控制器的控制性能。
kp 用于提高精度,加快响应速度;ki 用于消除稳态误差;kd 用于改善动态特性。故对同 e 和 ec,被控过程对pk 、ik 、dk 的自整定应符合如下规律:
将模糊变量 E、EC 分为 7 个等级,模糊子集均取为:{NB,NM,NS,ZO,PS,PM,PB},对应的语言描述分别为:负大、负中、负小、零、正小、正中、正大。
上述已经制定了模糊控制的模糊规则,输入系统的精确量可以转换为对应的模糊集合。接着,需要精确化输出的控制量。模糊推理的过程实际就是根据已知条件,按照给出的模糊规则表求解控制输出量的过程。而对于 VAV 空调温度控制系统来说,按照表 4.1、4.2 和 4.3 给出的控制规则,推导出△kp 、△ki 和△kd 就是模糊推理的过程。
PID算法Python代码
位置式PID算法
PID的Python实现
#位置式PID import matplotlib.pyplot as plt class PID(): def __init__(self, dt, max, min, Kp, Ki, Kd): self.dt = dt # 循环时长 self.max = max # 操作变量最大值 self.min = min # 操作变量最小值 self.Kp = Kp # 比例增益 self.Ki = Ki # 微分增益 self.Kd = Kd # 积分增益 self.integral = 0 # 直到上一次的误差值 self.pre_error = 0 # 上一次的误差值 def calculate(self, setPoint, pv): # 其中 pv:process value 即过程值, error = setPoint - pv # 误差(设定值与实际值的差值) Pout = self.Kp * error # 比例项 Kp * e(t) self.integral += error * self.dt #∑e(t)*△t Iout = self.Ki * self.integral # 积分项 Ki * ∑e(t)*△t derivative = (error - self.pre_error) / self.dt #(e(t)-e(t-1))/△t Dout = self.Kd * derivative # 微分项 Kd * (e(t)-e(t-1))/△t output = Pout + Iout + Dout # 新的目标值 位置式PID:u(t) = Kp*e(t) + Ki * ∑e(t)*△t + Kd * (e(t)-e(t-1))/△t if (output > self.max): output = self.max elif (output < self.min): output = self.min self.pre_error = error # 保存本次误差,以供下次计算 e(k-1) = e(k) return output t = range(160) pid = PID(0.1, 100, -100, 0.1, 0.5, 0.01) val = 0 setpoint = 15 z = [] for i in t: inc = pid.calculate(setpoint, val) #新的目标值 print("val:%f inc:%f" % (val, inc)) z.append(val) val += inc #设置绘图风格 plt.style.use('ggplot') plt.figure(figsize=(8, 6), dpi=80) plt.plot(t, z, color="blue", linewidth=1.0, linestyle="-") plt.xlabel('time (s)') plt.ylabel('PID (PV)') plt.show() 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051'
结果:
val:0.000000 inc:3.750000 val:3.750000 inc:2.062500 val:5.812500 inc:2.484375 val:8.296875 inc:2.528906 val:10.825781 inc:2.480273 val:13.306055 inc:2.321807 val:15.627861 inc:2.074080 val:17.701941 inc:1.756347 val:19.458288 inc:1.389571 val:20.847860 inc:0.994899 val:21.842758 inc:0.592738 val:22.435497 inc:0.201906 val:22.637402 inc:-0.161072 val:22.476331 inc:-0.482483 val:21.993847 inc:-0.751786 val:21.242061 inc:-0.961780 val:20.280281 inc:-1.108617 val:19.171664 inc:-1.191655 val:17.980009 inc:-1.213186 val:16.766823 inc:-1.178055 val:15.588768 inc:-1.093201 val:14.495566 inc:-0.967145 val:13.528421 inc:-0.809457 val:12.718964 inc:-0.630228 val:12.088736 inc:-0.439565 val:11.649171 inc:-0.247134 val:11.402037 inc:-0.061765 val:11.340272 inc:0.108861 val:11.449133 inc:0.258456 val:11.707588 inc:0.382271 val:12.089859 inc:0.477169 val:12.567029 inc:0.541611 val:13.108640 inc:0.575574 val:13.684214 inc:0.580410 val:14.264624 inc:0.558654 val:14.823277 inc:0.513800 val:15.337078 inc:0.450052 val:15.787129 inc:0.372065 val:16.159194 inc:0.284697 val:16.443892 inc:0.192770 val:16.636661 inc:0.100853 val:16.737514 inc:0.013083 val:16.750597 inc:-0.066978 val:16.683619 inc:-0.136455 val:16.547164 inc:-0.193220 val:16.353944 inc:-0.235919 val:16.118025 inc:-0.263958 val:15.854067 inc:-0.277462 val:15.576605 inc:-0.277196 val:15.299410 inc:-0.264473 val:15.034937 inc:-0.241045 val:14.793892 inc:-0.208978 val:14.584914 inc:-0.170532 val:14.414382 inc:-0.128043 val:14.286339 inc:-0.083804 val:14.202534 inc:-0.039975 val:14.162560 inc:0.001512 val:14.164072 inc:0.039009 val:14.203080 inc:0.071204 val:14.274284 inc:0.097150 val:14.371434 inc:0.116269 val:14.487703 inc:0.128345 val:14.616047 inc:0.133500 val:14.749548 inc:0.132157 val:14.881705 inc:0.124991 val:15.006695 inc:0.112873 val:15.119569 inc:0.096819 val:15.216388 inc:0.077923 val:15.294312 inc:0.057305 val:15.351617 inc:0.036056 val:15.387672 inc:0.015191 val:15.402864 inc:-0.004385 val:15.398479 inc:-0.021912 val:15.376567 inc:-0.036797 val:15.339770 inc:-0.048617 val:15.291153 inc:-0.057131 val:15.234022 inc:-0.062268 val:15.171754 inc:-0.064115 val:15.107639 inc:-0.062901 val:15.044739 inc:-0.058969 val:14.985770 inc:-0.052754 val:14.933016 inc:-0.044751 val:14.888265 inc:-0.035489 val:14.852776 inc:-0.025505 val:14.827271 inc:-0.015317 val:14.811954 inc:-0.005402 val:14.806553 inc:0.003819 val:14.810372 inc:0.011997 val:14.822369 inc:0.018861 val:14.841230 inc:0.024227 val:14.865457 inc:0.027995 val:14.893452 inc:0.030146 val:14.923598 inc:0.030736 val:14.954334 inc:0.029887 val:14.984221 inc:0.027772 val:15.011993 inc:0.024607 val:15.036600 inc:0.020633 val:15.057233 inc:0.016105 val:15.073338 inc:0.011280 val:15.084618 inc:0.006404 val:15.091022 inc:0.001700 val:15.092722 inc:-0.002636 val:15.090087 inc:-0.006443 val:15.083644 inc:-0.009600 val:15.074044 inc:-0.012026 val:15.062017 inc:-0.013682 val:15.048335 inc:-0.014565 val:15.033770 inc:-0.014709 val:15.019062 inc:-0.014177 val:15.004885 inc:-0.013056 val:14.991829 inc:-0.011454 val:14.980374 inc:-0.009488 val:14.970887 inc:-0.007280 val:14.963607 inc:-0.004953 val:14.958654 inc:-0.002623 val:14.956030 inc:-0.000395 val:14.955635 inc:0.001640 val:14.957275 inc:0.003408 val:14.960683 inc:0.004857 val:14.965540 inc:0.005949 val:14.971489 inc:0.006670 val:14.978159 inc:0.007023 val:14.985183 inc:0.007027 val:14.992209 inc:0.006713 val:14.998923 inc:0.006127 val:15.005050 inc:0.005320 val:15.010370 inc:0.004351 val:15.014721 inc:0.003276 val:15.017997 inc:0.002156 val:15.020153 inc:0.001045 val:15.021199 inc:-0.000008 val:15.021190 inc:-0.000962 val:15.020229 inc:-0.001782 val:15.018447 inc:-0.002444 val:15.016003 inc:-0.002933 val:15.013070 inc:-0.003245 val:15.009826 inc:-0.003380 val:15.006445 inc:-0.003351 val:15.003094 inc:-0.003173 val:14.999921 inc:-0.002870 val:14.997051 inc:-0.002466 val:14.994585 inc:-0.001989 val:14.992596 inc:-0.001468 val:14.991129 inc:-0.000929 val:14.990199 inc:-0.000400 val:14.989799 inc:0.000097 val:14.989896 inc:0.000543 val:14.990439 inc:0.000922 val:14.991361 inc:0.001224 val:14.992585 inc:0.001442 val:14.994027 inc:0.001575 val:14.995601 inc:0.001624 val:14.997225 inc:0.001595 val:14.998820 inc:0.001498 val:15.000318 inc:0.001342 val:15.001660 inc:0.001140 val:15.002800 inc:0.000906 val:15.003706 inc:0.000654 val:15.004360 inc:0.000396 val:15.004755 inc:0.000144 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
增量式PID算法
PID算法之增量式控制温度
#增量式PID import matplotlib.pyplot as plt class PID(): def __init__(self, dt, max, min, Kp, Ki, Kd): self.dt = dt # 循环时长 self.max = max # 操作变量最大值 self.min = min # 操作变量最小值 self.Kp = Kp # 比例增益 self.Ki = Ki # 微分增益 self.Kd = Kd # 积分增益 self.error = 0 # 当前误差 self.error_1 = 0 #上次误差 self.error_2 = 0 # 上上次误差 self.pre_output = 0 #上次的输出值 def calculate(self, setPoint, pv): # 其中 pv:process value 即过程值, error = setPoint - pv # 误差(设定值与实际值的差值) Pout = self.Kp * (error - self.error_1) # 比例项 Kp * (e(t)-e(t-1)) Iout = self.Ki * error # 积分项 Ki * e(t) Dout = self.Kd * (error - 2*self.error_1 + self.error_2) # 微分项 Kd * (e(t)-2*e(t-1)+e(t-2)) output = Pout + Iout + Dout + self.pre_output # 新的目标值 位置式PID:u(t) = Kp*(e(t)-e(t-1)) + Ki*e(t) + Kd*(e(t)-2*e(t-1)+e(t-2)) + u(t-1 if (output > self.max): output = self.max elif (output < self.min): output = self.min self.pre_output = output self.error_2 = self.error_1 #e(k-2) = e(k) ,进入下一次计算使用 self.error_1 = error # e(k-1) = e(k) return output t = range(100) pid = PID(0.1, 100, -100, 0.2, 0.5, 0.05) val = 0 setpoint = 15 z = [] for i in t: inc = pid.calculate(setpoint, val) #新的目标值 print("val:%f inc:%f" % (val, inc)) z.append(val) val += inc #设置绘图风格 plt.style.use('ggplot') plt.figure(figsize=(8, 6), dpi=80) plt.plot(t, z, color="blue", linewidth=1.0, linestyle="-") plt.xlabel('time (s)') plt.ylabel('PID (PV)') plt.show() 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152'
结果:
val:0.000000 inc:11.250000 val:11.250000 inc:9.562500 val:20.812500 inc:4.828125 val:25.640625 inc:-1.221094 val:24.419531 inc:-5.384180 val:19.035352 inc:-6.116865 val:12.918486 inc:-3.816101 val:9.102385 inc:-0.219112 val:8.883274 inc:2.703224 val:11.586498 inc:3.723214 val:15.309712 inc:2.772716 val:18.082427 inc:0.724484 val:18.806911 inc:-1.221457 val:17.585454 inc:-2.172596 val:15.412859 inc:-1.896949 val:13.515910 inc:-0.789296 val:12.726613 inc:0.449874 val:13.176487 inc:1.209697 val:14.386184 inc:1.236674 val:15.622858 inc:0.676561 val:16.299420 inc:-0.080455 val:16.218965 inc:-0.635996 val:15.582969 inc:-0.772504 val:14.810465 inc:-0.516410 val:14.294055 inc:-0.072960 val:14.221094 inc:0.308912 val:14.530006 inc:0.463033 val:14.993039 inc:0.366201 val:15.359240 inc:0.118182 val:15.477422 inc:-0.131764 val:15.345658 inc:-0.265743 val:15.079915 inc:-0.245853 val:14.834062 inc:-0.114708 val:14.719354 inc:0.041999 val:14.761354 inc:0.145087 val:14.906441 inc:0.157695 val:15.064136 inc:0.093458 val:15.157594 inc:-0.000819 val:15.156775 inc:-0.074329 val:15.082446 inc:-0.097010 val:14.985436 inc:-0.069192 val:14.916244 inc:-0.014866 val:14.901377 inc:0.034702 val:14.936079 inc:0.057244 val:14.993323 inc:0.048006 val:15.041329 inc:0.018202 val:15.059532 inc:-0.013714 val:15.045818 inc:-0.032284 val:15.013534 inc:-0.031666 val:14.981868 inc:-0.016298 val:14.965571 inc:0.003408 val:14.968979 inc:0.017252 val:14.986231 inc:0.019994 val:15.006225 inc:0.012746 val:15.018970 inc:0.001074 val:15.020044 inc:-0.008579 val:15.011465 inc:-0.012113 val:14.999351 inc:-0.009190 val:14.990162 inc:-0.002579 val:14.987583 inc:0.003815 val:14.991398 inc:0.007033 val:14.998431 inc:0.006250 val:15.004681 inc:0.002699 val:15.007380 inc:-0.001354 val:15.006026 inc:-0.003893 val:15.002133 inc:-0.004054 val:14.998079 inc:-0.002275 val:14.995804 inc:0.000189 val:14.995993 inc:0.002032 val:14.998025 inc:0.002521 val:15.000546 inc:0.001719 val:15.002265 inc:0.000283 val:15.002548 inc:-0.000976 val:15.001572 inc:-0.001504 val:15.000069 inc:-0.001211 val:14.998858 inc:-0.000412 val:14.998445 inc:0.000408 val:14.998853 inc:0.000859 val:14.999712 inc:0.000808 val:15.000520 inc:0.000389 val:15.000909 inc:-0.000122 val:15.000787 inc:-0.000466 val:15.000321 inc:-0.000516 val:14.999805 inc:-0.000313 val:14.999492 inc:-0.000007 val:14.999486 inc:0.000237 val:14.999722 inc:0.000316 val:15.000038 inc:0.000230 val:15.000268 inc:0.000054 val:15.000322 inc:-0.000109 val:15.000213 inc:-0.000186 val:15.000028 inc:-0.000158 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
PID参数调节口诀:
参数整定找最佳,从小到大顺序查
先是比例后积分,最后再把微分加
曲线振荡很频繁,比例度盘要放大
曲线漂浮绕大湾,比例度盘往小扳
曲线偏离回复慢,积分时间往下降
曲线波动周期长,积分时间再加长
曲线振荡频率快,先把微分降下来
动差大来波动慢。微分时间应加长
理想曲线两个波,前高后低4比1
一看二调多分析,调节质量不会低
网址:基于PID算法的房间温度控制及Python程序 https://www.yuejiaxmz.com/news/view/434598
相关内容
基于STM32的家庭温湿度控制系统的设计深入浅出PID算法
智慧园区室内温度控制方法与流程
基于单片机的温控报警系统设计 (电路+程序+论文)
基于python+flask框架的校园旧物交易系统(开题+程序+论文) 计算机毕设
电热锅炉温度控制系统专业交流论坛
智能家居系统的人工智能控制方法研究
django基于Python的校园生活助手系统(程序+开题)
控制技术
海林自控申请基于半实物仿真的智能建筑温度控制专利,提高空调系统的稳定性、能效性和舒适性