西门子PLC1200内使用SCL实现简化版PID算法
西门子自带的PID效果很好,但是会比较吃性能,使用次数有限,很多地方需要PID但不需要这么精准的PID,所以网上找个简单的算法自己调用。
新建数据类型

前三个就是PID三个参数

新建FC块:

#PIDInfo.Step += ;
IF #PIDInfo.Step >= #PIDInfo.MaxStep- THEN
#PIDInfo.Step := ;
#PIDInfo.Ek := #SetValue - #ActualValue;
#PIDInfo.LocSum += #PIDInfo.Ek; //累计误差
#PIDResult := #PIDInfo.Kp * #PIDInfo.Ek + (#PIDInfo.Ki * #PIDInfo.LocSum) + #PIDInfo.Kd * (#PIDInfo.Ek1 - #PIDInfo.Ek);
#PIDInfo.Ek1 := #PIDInfo.Ek;
END_IF;
调用:
DB块内增加变量

Step和MaxStep用于控制扫描多少次调用一次,以及可以错开调用

左边填入设置值,实际值,和刚才添加的变量,右边输出PID,PID输出值没有明确的范围,自己用Limite限制范围,调整P值让输出值在范围内浮动
附C#实现
class PID_Info
{
float Kp = ; //比例系数Proportional
float Ki = 0.2f; //积分系数Integral
float Kd = 0.1f; //微分系数Derivative float Ek; //当前误差
float Ek1; //前一次误差 e(k-1)
float Ek2; //再前一次误差 e(k-2)
float LocSum; //累计积分位置 public static float PID_Calc1(float SetValue, float ActualValue, PID_Info PID)
{
float PIDLoc; //位置 PID.Ek = SetValue - ActualValue;
PID.LocSum += PID.Ek; //累计误差 PIDLoc = PID.Kp * PID.Ek + (PID.Ki * PID.LocSum) + PID.Kd * (PID.Ek1 - PID.Ek); PID.Ek1 = PID.Ek;
return PIDLoc;
} public float Calc1(float SetValue, float ActualValue)
{
return PID_Calc1(SetValue, ActualValue, this);
} public static float PID_Inc(float SetValue, float ActualValue, PID_Info PID)
{
float PIDInc; //增量 PID.Ek = SetValue - ActualValue;
PIDInc = (PID.Kp * PID.Ek) - (PID.Ki * PID.Ek1) + (PID.Kd * PID.Ek2); PID.Ek2 = PID.Ek1;
PID.Ek1 = PID.Ek;
return PIDInc;
} public float Inc(float SetValue, float ActualValue)
{
return PID_Inc(SetValue, ActualValue, this);
}
}
算法来自
blog。csdn。net/weibo1230123/article/details/80812211
西门子PLC1200内使用SCL实现简化版PID算法的更多相关文章
- 线性控制原理——PID算法应用
使用控制系统(PID)控制被控对象 PID控制的三要素:控制器,被控对象,反馈器.控制器就是一个数学模型,就PID来说,等同于PID算法.是对反馈量的一个处理与输出.通俗的说就是对于每个被控的量,我的 ...
- PID算法笔记2
总所周知,PID算法是个很经典的东西.而做自平衡小车,飞行器PID是一个必须翻过的坎.因此本节我们来好好讲解一下PID,根据我在学习中的体会,力求通俗易懂.并举出PID的形象例子来帮助理解PID.一. ...
- PID算法(c 语言)(转)
PID算法(c 语言)(来自老外) #include <stdio.h> #include<math.h> //定义PID 的结构体 struct _pid { int pv; ...
- 单片机之PID算法
说到PID算法,想必大部人并不陌生,PID算法在很多方面都有重要应用,比如电机的速度控制,恒温槽的温度控制,四轴飞行器的平衡控制等等,作为闭环控制系统中的一种重要算法,其优点和可实现性都成为人们的首选 ...
- PID算法通俗理解,平衡车,倒立摆,适合不理解PID算法的人来看!
先插句广告,本人QQ522414928,不熟悉PID算法的可以一起交流学习,随时在线(PID资料再我的另一篇博客里) 倒立摆资料连接↓ https://www.cnblogs.com/LiuXinyu ...
- PID算法的理解及场景模拟
增量式PID算法的简化版之后的公式: △u(t)=Ae(t)-Be(t-1)+Ce(t-2) △u:PID控制器输出的下一时刻的调整量 e(t):PID控制器在当前时刻的状态变化量-给定值 e(t-1 ...
- 023_STM32之PID算法原理及应用
(O)关于程序BUG说明,看最后面的红色字体,视频和源代码中都没有说明 (一)PID控制算法(P:比例 I:积分 D:微分) (二)首先先说明原理,使用的是数字PID算法,模拟PID算法在计算机这样的 ...
- 某科学的PID算法学习笔记
最近,在某社团的要求下,自学了PID算法.学完后,深切地感受到PID算法之强大.PID算法应用广泛,比如加热器.平衡车.无人机等等,是自动控制理论中比较容易理解但十分重要的算法. 下面是博主学习过程中 ...
- 广告成本控制-PID算法
今天我们来聊聊广告成本控制中常用的PID算法. 0.PID算法简介 首先我们可以看下维基百科中给PID算法的定义:由比例单元(Proportional).积分单元(Integral)和微分单元(Der ...
随机推荐
- 使用批处理打包C#开发程序
最近项目接近尾声,测试比较频繁,每天需要发布多个版本 @echo off set zip=C:\Program Files\7-Zip\7z.exe set timestamp=%date:~6,4% ...
- [POJ2083] Fracal
Description A fractal is an object or quantity that displays self-similarity, in a somewhat technica ...
- Echo团队Alpha冲刺 - 测试随笔
目录 测试工作的安排 测试工具选择和运用 测试用例文档 测试体会 项目测试评述 测试工作的安排 模块 测试人 测试内容 单元测试 李东权,黄少勇 测试类或者函数是否能正确处理用户请求 接口测试 林弘杰 ...
- delete properties inside object
- less-6
首先输入id=1和id=1’未报错,均显示You are in.....(如下图所示) 由上图可以看到,如果运行返回结果正确的时候只返回you are in...,不会返回数据库当中的信息了,可以从这 ...
- LeetCode 1135. Connecting Cities With Minimum Cost
原题链接在这里:https://leetcode.com/problems/connecting-cities-with-minimum-cost/ 题目: There are N cities nu ...
- Web 项目的文件/文件夹上传下载
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...
- packr 方便的潜入静态资源文件到golang 二进制文件中
类似的工具以前有介绍过statik,今天使用的工具是packr 也是很方便的golang tools 安装 go get -u github.com/gobuffalo/packr/packr 或者我 ...
- (转)React事件处理函数必须使用bind(this)的原因
1.JavaScript自身特性说明如果传递一个函数名给一个变量,之后通过函数名()的方式进行调用,在方法内部如果使用this则this的指向会丢失.示例代码:首先我们创建test对象并直接调用方法 ...
- element ui input 输入时触发事件
<el-form-item label="客户名" :label-width="labelWidth"> <el-input v-model= ...