广义预测控制+经典PID控制如何用matlab编程实现?在工业上如何实现控制(硬件平台)?请这方面的高手帮助

广义预测控制+经典PID控制如何用matlab编程实现?在工业上如何实现控制(硬件平台)?请这方面的高手帮助,第1张

广义预测控制需要实现四个功能:1、参数估计,可以用递推最小二乘法实现;2、使用丢番图方程对模型分解分解为当前状态和历史输入对模型未来输出值的作用公式,未来输入对模型未来输出值的作用公式;推导过程过于繁琐,可以直接套用公式计算。3、参考轨迹生成,可以使用下面公式递推得到:r(n)=(1-k)*y(n-1)+k*(s-y(n-1)),其中k为时间常量,决定系统的调节速度,s为设定值。4、最优值计算,可以直接套用公式。实现过程:首先辨识系统模型,然后使用丢番图方程对辨识得到的模型进行分解,计算参考轨迹,最后把参考估计和分解后的系统模型带入公式得到最优输出值(其实是次优解),如此反复即可实现预测控制。

经典PID计算:可以使用增量式的公式:y(n)=y(n-1)+Kp*[e(n)-e(n-1)]+Ki*e(n)+Kd*[e(n)+e(n-2)-2*e(n-1)]

需要说明广义预测控制和PID控制输出都需要设置输出值限幅。

工业实现:可以用c语言编写程序作为控制软件的控制代码,硬件平台可以是一台工控机或者PLC,另外也有这方面的软件包,不过很贵。

我没有自己看你的程序,不过通过图可以看得清楚啊,实际输出用‘o’表示,预测的用‘+’表示。第一个图估计是初始化,也就是第一步,预测还没有开始,还是相等的点。而下图表示,已经预测结束,与实际基本吻合。

%由于数据比较大,我又懒得用归一化,所以直接把数据降了3个数量级,

%不过我觉得应该没问题,但用归一化结果应该更准确些。。

%由于初始权值和阀值均是随机给的,所以每次仿真都有点点不同,这是正常的。

p=[1183 1303 12781303 1278 12841278 1284 1187 ...

1284 1187 11541187 1154 12671154 1267 1241...

1267 1241 13021241 1302 11951302 1195 1256]'*0.001

t=[ 1284 1187 1154 1267 1241 1302 1195 1256 1348]*0.001

net=newff(minmax(p),[3,1],{'tansig','purelin'},'traingda')

net.trainParam.goal=0.001

net.trainParam.show=20

net.trainParam.epochs=1000

net.trainParam.min_grad=1e-10

net.trainParam.mc=0.95

[net,tr]=train(net,p,t)

t1=sim(net,[1302 1195 1256]'*0.001)

t2013=t1*1000%2013 的 预测 数据

运行结果:

t2013 =

1301.9


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11380152.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存