我有一个PID控制器在simulink中工作,但我想把它传递给C++代码。我发现如何用代码制作PID,类似于这样:
error = input - refeed;
iError += error * sampleTime;
dError = (error - lastError)/ sampleTime;
//PID Function
output = Kp * error + Ki * iError + Kd * dError;
refeed = output;
lastError = error;
字符串
但是,这是我在研究中得到的唯一明确的东西。
我需要知道下一步是什么,我有离散化的传递函数,但我不确定我应该如何处理“z”参数,时间,.
是否可以手动传递一个PID控制器到C++?如何传递?
4条答案
按热度按时间fnx2tebb1#
Temperature Control Lab将Python的PID输出传递到Arduino,Arduino通过串行USB接口运行C代码。如果可以为应用程序创建接口,使用Python绘制值比C更容易。GitHub源代码为here。
的数据
wnavrhmk2#
对于数字控制系统,需要在每个采样时刻进行数据采样并执行控制器。z变换将连续系统转换为离散系统。
例如,如果采样时间为“1”,则可以如下所示表示简单的时间序列模型,
y(t)= a1u(t-1)+ a2u(t-2)
--> y(t)= a1z^-1u(t)+ a2z^-2u(t)
y(t)= A(z)u(t),其中A(z)= a1z^-1 + a2z^-2
a1,a2 = FIR系数
但是,这个时移运算符'z^-1'并没有出现在你的代码中。它是用你的采样时间和FOR或DO循环隐式表达的,具体取决于你使用的语言。请参阅PID控制器的velocity形式的python代码。Velocity形式更容易实现,因为你不用担心抗复位饱和的额外逻辑。
字符串
您还可以在以下链接中找到使用GEKKO软件包的PID控制器示例。
https://apmonitor.com/wiki/index.php/Main/GekkoPythonOptimization
lnvxswe23#
基本上,你应该把值发送到某个地方。阅读注解,你想及时绘制输出变量的图,所以我想你最好的选择(也是更简单的方法)是使用gnuplot。
基本上,在文本文件中输出数据,然后使用gnuplot显示它。
erhoui1w4#
是的,这是可能的。你有没有考虑过使用别人的代码?或者你想自己写它?如果你使用所有已经写好的代码没有问题,看看Github。它有很多PID项目。例如PID-controller。它有一个使用示例,你只需要传入你的p,i和d参数(你已经从Matlab得到了)。