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控制系统,用于水箱加热的温度控制。
热门推荐
腰痛伴腿麻?警惕腰椎峡部裂的“求救信号”
在物流快递行业如何有效使用呼叫中心
三亚自由行经济实惠旅游攻略:必去景点与预算建议
淮安白马湖做好生态“+”文章
稀释涂布平板法详细介绍(原理及操作步骤)
生食—最适合人类的饮食方式
十类最畅销的生鲜食品推荐 热销的生鲜食品有哪些
怎样缓解心理压力带来的窒息感
“开门见4物,添财又添福”:传统家居布置中的吉祥寓意
AI面试官来了 你准备好了吗
什么是脑图?可视化大屏和脑图结合,结果会怎样?
王阳明心学精髓:内心强大则无所畏惧,你的感知,决定了你的世界
床上用品多久清洗一次,多久更新换代?
如何判断与优化电脑CPU和显卡性能的全面指南
洋参和红茶能否一起泡水饮用?
股市交易日查询指南:四种实用方法助你掌握交易时间
王琪《望江南·江南月》鉴赏及译文答案
1月逾百亿美元外资净流入,DeepSeek概念带动机构重估中国市场价值
如何在五险一金变动时保障自身利益?这种利益保障有哪些方法?
选择性缄默症
车辆损坏保险需要提供哪些证据才能理赔
坐月子禁忌全解析:哪些是迷思,哪些需注意?
“乌克兰国际军团”何去何从
窗户用什么材料最合适?深入探讨窗户材料选择
提升家中Wi-Fi信号必知的十大神技!
适合睡眠的温度和湿度?如何保持卧室凉爽?
供暖时间规定及室内湿度调节方法
华阳新材:2024年上半年亏损4943.03万元
500万房子首付多少?全面解析购房规划策略
松花蛋怎么做最好吃