增量PID算法的VS2010软件实现代码(C#语言)这段代码实现的功能:输入量可以测量获得到,而且输入量是连续变化的,并且变化比较快,
现在要求输出量始终跟随输入量的大小。首先网上找到PID算法的原理跟简介,然后套用公式编写下面代码(VS2010软件、C#语言的控制台应用程序)。
为了验证PID算法控制输出量的跟随性,鄙人产生50个(-5,5)的随机数作为输入量,运行输出输入量的50个值,输出50个PID算法计算出的50个输出值,并计算输出误差值,最后输出PID算法总共用了//多少ms计算得到结果。
下面代码直接复制粘贴到VS软件的应用控制台里运行即可实现。若有问题可联系我c...
这段代码实现的功能:输入量可以测量获得到,而且输入量是连续变化的,并且变化比较快,
现在要求输出量始终跟随输入量的大小。首先网上找到PID算法的原理跟简介,然后套用公式编写下面代码(VS2010软件、C#语言的控制台应用程序)。
为了验证PID算法控制输出量的跟随性,鄙人产生50个(-5,5)的随机数作为输入量,运行输出输入量的50个值,输出50个PID算法计算出的50个输出值,并计算输出误差值,最后输出PID算法总共用了//多少ms计算得到结果。
下面代码直接复制粘贴到VS软件的应用控制台里运行即可实现。若有问题可联系我cbscb@sina.cn
using System;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
using System.IO;
namespacekeshana
{
class _pid //采用的是增量PID算法类的定义
{
public float SetSpeed; //定义设定值
public float ActualSpeed; //定义实际值
public float err; //定义偏差值
public float err_next; //定义上一个偏差值
public float err_last; //定义最上前的偏差值
public float Kp, Ki, Kd; //定义比例、积分、微分系数
///
/// PID算法初始化
///
public void PID_init()
{
SetSpeed=0;
ActualSpeed=0;
err=0;
err_last=0;
err_next=0;
}
///
/// 增量PID算法实现的方法
///
///
///
返回值为最终的输出值
public double PID_realize(float a) //这里的参数a是设定值,即你要输出量为//多大
{
Kp = 0.4f;//比例系数
Ki = 0.53f;//积分系数
Kd = 0.1f; //微分系数
SetSpeed=a;
err=SetSpeed-ActualSpeed;
floatincrementSpeed;
incrementSpeed=Kp*(err-err_next+Ki*err+Kd*(err-2*err_next+err_last));
//这是增量PID算法的公式
ActualSpeed = ActualSpeed + incrementSpeed;
err_last=err_next;
err_next=err;
returnActualSpeed;
}
}
class Program
{
static inti=0,k=0;//循环用的中间变量
constint t = 50;//产生随机数的个数
static int[] num=new int[t];//用来存储产生的随机数
static void Main(string[] args)
{
_pidpid=new _pid();
float speed; //这个变量用来存储逼近设定值的值
// int count=0;
pid.PID_init();
Random r = new Random();
for ( i = 0; i< t; i++)
{
num[i] = r.Next(-5, 5);
Console.Write(num[i]+"\t");
if ((i % 10) == 0)
{
Console.Write("");
}
}
Console.WriteLine("****************************上面是产生的随机数作为输入量*********************");
Console.WriteLine();
Console.WriteLine("****************************下面是输出值*************************************");
DateTimebegintime = DateTime.Now;//用PID算法开始时记下时间
do
{
Speed = (float)pid.PID_realize(num[k]);
if (System.Math.Abs (pid.err ) > 0.0001) continue;
k++;
Console.Write(speed+"\t");
if ((k % 10) == 0)
{
Console.Write("");
}
} while (k
本文档为【增量PID算法的VS2010软件实现代码(C#语言)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。