EPICS加热器控制PID仿真
创作时间:
作者:
@小白创作中心
EPICS加热器控制PID仿真
引用
CSDN
1.
https://m.blog.csdn.net/yuyuyuliang00/article/details/138443657
本文详细介绍了使用PID控制算法对水箱加热系统的仿真设计。内容涵盖PID控制的基本原理、系统架构,并通过具体的代码示例展示了如何在实际系统中实现PID控制。
PID控制框图
PID控制的基本框架包括以下几个关键组件:
- 更新周期(dT)
- 误差读数(E(n))
- 输出读数(O(n))
- 比例增益(Kp)、积分增益(KI)和微分增益(KD)
水箱加热控制模拟
水箱加热控制模拟涉及多个关键组件:
- 室温设置($(P)Room):默认25摄氏度,范围0-100摄氏度。
- 加热电压设置($(P)Heat_V):默认0V,范围0-110V。
- 加热功率计算($(P)Heat_Pwr):根据加热电压计算加热功率。
- 水箱温度计算($(P)Tank_clc):每秒根据当前温度、室温和加热计算新的温度。
- 传感器状态($(P)Sensor):模拟传感器是否正常工作。
以下是具体的配置代码:
record(ao, "$(P)Room") {
field(DESC, "Room Temperature")
field(SCAN, "Passive")
field(PINI, "YES")
field(DTYP, "Soft Channel")
field(DOL, "25")
field(EGU, "oC")
field(DRVH, "100")
field(DRVL, "0")
field(HOPR, "100")
field(LOPR, "0")
}
record(ao, "$(P)Heat_V") {
field(DESC, "Heater Voltage")
field(SCAN, "Passive")
field(PINI, "YES")
field(DTYP, "Soft Channel")
field(LINR, "NO CONVERSION")
field(EGU, "V")
field(DRVH, "110")
field(DRVL, "0")
field(HIGH, "110")
field(HSV, "MINOR")
field(IVOA, "Set output to IVOV")
field(IVOV, "0")
}
record(calc, "$(P)Heat_Pwr") {
field(DESC, "Heater Power")
field(SCAN, "Passive")
field(CALC, "A*A / 12.1")
field(INPA, "$(P)Heat_V PP")
field(EGU, "W")
}
record(bi, "$(P)Sensor") {
field(DESC, "Sensor Simulation")
field(SCAN, "Passive")
field(PINI, "YES")
field(ZNAM, "OK")
field(ONAM, "Broken")
}
record(calc, "$(P)Tank_clc") {
field(DESC, "Water Tank Simulation")
field(SCAN, "1 second")
field(PINI, "YES")
field(FLNK, "$(P)Tank")
field(CALC, "A+(B-A)*D+C*E")
field(INPA, "$(P)Tank_clc")
field(INPB, "$(P)Room")
field(INPC, "$(P)Heat_Pwr PP")
field(INPD, "0.01")
field(INPE, "0.001")
field(EGU, "oC")
field(PREC, "4")
}
record(calc, "$(P)Tank") {
field(DESC, "Tank Temperature or Invalid")
field(SCAN, "Passive")
field(CALC, "A?C:B")
field(INPA, "$(P)Sensor")
field(INPB, "$(P)Tank_clc")
field(INPC, "-100")
field(EGU, "oC")
field(PREC, "1")
field(HOPR, "100")
field(LOPR, "0")
field(HIHI, "100")
field(LOLO, "-100")
field(HIGH, "70")
field(LOW, "0")
field(HHSV, "MAJOR")
field(LLSV, "INVALID")
field(HSV, "MINOR")
field(LSV, "MINOR")
}
PI控制部分设计
PI控制部分涉及以下组件:
- 温度设置点($(P)Setpoint):默认30摄氏度,范围0-100摄氏度。
- 温度偏差计算($(P)Error):计算设置温度和水箱温度之间的偏差。
- 积分温度偏差($(P)Integral):对温度偏差进行积分。
- PID运算($(P)PID):计算输出电压。
- P系数设置($(P)P)和I系数设置($(P)I)。
以下是具体的配置代码:
record(ao, "$(P)Setpoint") {
field(DESC, "Temperature Setpoint")
field(SCAN, "Passive")
field(PINI, "YES")
field(DOL, "30")
field(PREC, "1")
field(EGU, "oC")
field(DRVH, "100")
field(DRVL, "0")
field(HIHI, "90")
field(LOLO, "0")
field(HIGH, "80")
field(LOW, "0")
field(HHSV, "MAJOR")
field(LLSV, "NO_ALARM")
field(HSV, "MINOR")
field(LSV, "NO_ALARM")
}
record(calc, "$(P)Error") {
field(DESC, "Temperature Error")
field(SCAN, "1 second")
field(PINI, "NO")
field(FLNK, "$(P)Integral")
field(CALC, "A-B")
field(INPA, "$(P)Setpoint")
field(INPB, "$(P)Tank MS")
field(EGU, "oC")
field(PREC, "1")
}
record(calc, "$(P)Integral") {
field(DESC, "Integrate Error for PID")
field(SCAN, "Passive")
field(CALC, "(B+A>C)?C:(B+A<-C)?(-C):(A+B)")
field(INPA, "$(P)Error")
field(INPB, "$(P)Integral")
field(INPC, "20")
field(PREC, "3")
field(FLNK, "$(P)PID")
}
record(calc, "$(P)PID") {
field(DESC, "Water Tank PID")
field(SCAN, "Passive")
field(PINI, "NO")
field(CALC, "A*B+C*D")
field(INPA, "$(P)Error")
field(INPB, "$(P)P")
field(INPC, "$(P)Integral")
field(INPD, "$(P)I")
field(PREC, "3")
field(HOPR, "1000")
field(LOPR, "-1000")
field(HIHI, "900")
field(LOLO, "-900")
field(HIGH, "500")
field(LOW, "500")
field(HHSV, "MAJOR")
field(LLSV, "MAJOR")
field(HSV, "MINOR")
field(LSV, "MINOR")
}
record(ao, "$(P)P") {
field(DESC, "Proportional")
field(SCAN, "Passive")
field(PINI, "YES")
field(DOL, "10")
field(OMSL, "supervisory")
field(PREC, "2")
field(DRVH, "100")
field(DRVL, "0")
}
record(ao, "$(P)I") {
field(DESC, "Intergral")
field(SCAN, "Passive")
field(PINI, "YES")
field(DTYP, "Soft Channel")
field(DOL, "5")
field(OMSL, "supervisory")
field(PREC, "2")
field(DRVH, "100")
field(DRVL, "0")
}
record(ao, "$(P)Heat_V") {
field(DOL, "$(P)PID")
field(OMSL, "closed_loop")
}
添加微分项D控制部分
为了实现完整的PID控制,需要添加微分项(D)的计算:
- 修改$(P)Error的SCAN属性为被动,使其由新的$(P)Error_Diff触发。
- 添加微分误差计算项$(P)Error_Diff。
- 在PID计算中增加微分项的计算。
以下是具体的配置代码:
record(calc, "$(P)Error") {
field(SCAN, "Passive")
}
record(calc, "$(P)Error_Diff") {
field(DESC, "Temperature Difference")
field(SCAN, "1 second")
field(INPA, "$(P)Error")
field(INPB, "$(P)Error MS PP")
field(CALC, "(B-A)/1.0")
}
record(calc, "$(P)PID") {
field(INPE, "$(P)D")
field(INPF, "$(P)Error_Diff MS")
field(CALC, "A*B+C*D+E*F")
}
通过以上配置,可以实现一个完整的PID控制系统,用于水箱加热的温度控制。
热门推荐
概率分布与统计参数的计算
24寸行李箱尺寸:一切尽在掌握
微利时代,鸡蛋产业如何稳健前行?
王学辉作品赏析:山水含情诗意盛,乡村着意画魂悠
卡波姆滴眼液药品信息
24寸行李箱尺寸:一切尽在掌握
意外伤害保险承保范围是什么
如何购买适合建筑工地的意外保险?这种保险购买有哪些要点和注意事项?
新研究:Wi-Fi频谱带宽的缺失削弱了中国对光纤的投资成效
摄影进阶之光影塑造空间层次
大学创新创业比赛指南
玫瑰花是什么植物,玫瑰花可以食用吗?
Windows 7旗舰版忘记开机密码怎么办?四种实用解决方案详解
用“中式教育”对待父母:正视苦难,以爱为伴
全合成机油分类详解:如何选择适合的机油?
不签订劳动合同的人员有哪些权利
怎样花更少的预算买到可靠二手车?这6大技巧务必学会!
如何应对财务困境?个人和企业的应急措施全攻略
改进无线充电:新技术可通过动态频率适应提高效率
智能选股怎么设置条件?这些选股策略有哪些实际应用?
科普:央行降息降准 对个人贷款利率有什么影响?
大蒜能预防感冒、帮助减肥!了解大蒜8大功效、食用禁忌再推荐你3道大蒜料理
健康科普丨口服降糖药物您吃对了吗?
js怎么获取准确时间
如何合理估算二手商品的价值?这种估算如何影响我们的购买决策?
南昌高新区专精特新企业研发机构实现全覆盖带动科技创新实现“四个90%”
儿童混合性结缔组织病如何护理
雅思出分大改革!机考最快1天出成绩,已在多国实施
美白食物TOP.10-这样吃出嫩白肌!
CSGO驱动版本过旧怎么办?三种实用解决方案帮你轻松应对