作者 | 主题 |
---|---|
luwei~ 游侠 经验值:514 发帖数:16 精华帖:0 |
楼主 2023-07-11 19:32:12
主题:PLC实现最小二乘法计算拟合一次函数 楼主最近碰到了一个需求,需要计算两段加热区域的加热时间的区别,控制较慢的那个区域进行延迟加热,最终两个区域在同一时间达到设定温度。 主要的思路是计算每个区域的温升斜率,再根据设定值,实际值,计算出可能的加热时间。今天主要想介绍一下温升斜率的计算。 上图是正常的一个温升曲线。可以发现随着温度的升高,每分钟增加的温度并不一致。单纯计算斜率并不精确。 最开始的思路是记录100个点(温度,时间),在加热开启之后通过lintab的形式计算对应的加热时间。这个方案遇到了两个问题:1,一百个点都需要断电保持。由于为了可扩展性,增加了至多73组的加热区域,对CPU资源占用较大。2.由于加热材料,环境温度的变化,需要反复学习这些点,对应用上也是一个负担。在网上找了一些资料,由于这个曲线线性拟合性较好,所以想着通过拟合函数的形式简化计算。以下是代码。(ST语言环境编写的) 变量声明部分: 代码实现部分: 其中Ramp是斜率,offset是偏移部分。 仿真实现:模拟了几个数据。 代码仿真结果: Excel验算: 由于实际的加热过程并不是理想的一次函数,最小二乘法的引入能将偏差缩小。实际的应用过程中,偏差能控制在10s以内,较好的实现了设计的目标。 |