Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++; 我在Simulink中有一个PID控制器,但我想把它传递给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;_C++_Transfer Function_Pid Controller - Fatal编程技术网

C++; 我在Simulink中有一个PID控制器,但我想把它传递给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;

C++; 我在Simulink中有一个PID控制器,但我想把它传递给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;,c++,transfer-function,pid-controller,C++,Transfer Function,Pid Controller,但是,这是我在研究中得到的唯一清楚的东西 我需要知道下一步是什么,我将传递函数离散化,但我不确定如何处理“z”参数、时间 手动PID控制器是否可以通过C++?怎么做?是的,这是可能的。您是否考虑过使用其他人的代码?还是你想自己写?如果使用allready编写的代码没有问题,请查看Github。它有很多PID项目。例如它有一个使用示例,您只需传入p、i和d参数(您可以从Matlab获得这些参数) 祝你好运 对于数字控制系统,您需要在每次采样时对数据进行采样并执行控制器。z变换将连续系统转换为离散系

但是,这是我在研究中得到的唯一清楚的东西

我需要知道下一步是什么,我将传递函数离散化,但我不确定如何处理“z”参数、时间


手动PID控制器是否可以通过C++?怎么做?

是的,这是可能的。您是否考虑过使用其他人的代码?还是你想自己写?如果使用allready编写的代码没有问题,请查看Github。它有很多PID项目。例如它有一个使用示例,您只需传入p、i和d参数(您可以从Matlab获得这些参数)


祝你好运

对于数字控制系统,您需要在每次采样时对数据进行采样并执行控制器。z变换将连续系统转换为离散系统。
例如,如果采样时间为“1”,则可以表示一个简单的时间序列模型,如下所示,

y(t)=a1*u(t-1)+a2*u(t-2)
-->y(t)=a1*z^-1*u(t)+a2*z^-2*u(t)
-->y(t)=A(z)u(t),其中A(z)=a1*z^-1+a2*z^-2
a1,a2=FIR系数

但是,此时间移位运算符“z^-1”不会出现在代码中。它通过采样时间和FOR或DO循环隐式表示,具体取决于您使用的语言。 PID控制器的速度形式请参见python代码。Velocity表单更容易实现,因为您不必担心反复位结束的附加逻辑

范围内的i(1,ns):#ns=模拟时间
#PID速度表
e[i]=sp[i]-pv[i]
P[i]=Kc*(e[i]-e[i-1])
I[I]=Kc*delta_t/tauI*(e[I])
D[i]=Kc*tauD/delta_t*(pv[i]-2*(pv[i-1])+pv[i-2])
op[i]=op[i-1]+P[i]+i[i]+D[i]
如果op[i]ophi:
#剪辑输出
op[i]=最大值(oplo,min(ophi,op[i]))
您还可以在以下链接中找到使用GEKKO软件包的PID控制器示例


基本上,您应该将值发送到某个地方。通过阅读注释,您希望及时绘制输出变量的曲线图,因此我猜您的最佳选择(也是更简单的方法)是使用

基本上,输出文本文件中的数据,然后使用GNUTRAP显示它。

< P>将Python的PID输出传递到通过串行USB接口运行C++代码的ARDUINO。如果你能为你的应用程序创建一个接口,那么用Python来绘制值比C++更容易。GitHub源代码是


我检查了您传递给我的链接,它与我的代码类似。但我想要的是类似于输出图的东西,可以在Matlab中编译带有传递函数的PID时获得,这是一个值的示例​​随着时间的推移,输出的变化。但是谢谢你抽出时间!当然没问题!我想你可以找到一个图库来绘制图表,对吗?我认为Boost有一个图形库,但我从未使用过它。如果需要添加离散时间传递函数模型与PID响应进行比较,则可以使用时间序列模型,其中每个z^-1、z^-2、z^-3等都是该变量的时间步数。