ccmdf
级别: 略有小成
精华主题: 0
发帖数量: 82 个
工控威望: 231 点
下载积分: 612 分
在线时间: 56(小时)
注册时间: 2008-12-13
最后登录: 2023-11-21
查看ccmdf的 主题 / 回贴
36楼  发表于: 2019-07-17 19:04
谢谢分享,辛苦
湛蓝小尔
工控交流 Q703935819
级别: 家园常客

精华主题: 0
发帖数量: 349 个
工控威望: 642 点
下载积分: 2096 分
在线时间: 80(小时)
注册时间: 2014-03-03
最后登录: 2024-04-12
查看湛蓝小尔的 主题 / 回贴
37楼  发表于: 2021-09-24 15:24
谢谢分享,我需要的
专心搞钱
Q群943838323   博图
Q群703935819   昆仑通态
liulingmiao
级别: 正式会员
精华主题: 0
发帖数量: 14 个
工控威望: 82 点
下载积分: 3430 分
在线时间: 45(小时)
注册时间: 2021-02-23
最后登录: 2024-04-19
查看liulingmiao的 主题 / 回贴
38楼  发表于: 2021-09-26 09:01
谢谢分享
hoojjj
级别: 正式会员
精华主题: 0
发帖数量: 6 个
工控威望: 95 点
下载积分: 534 分
在线时间: 12(小时)
注册时间: 2010-04-30
最后登录: 2023-11-27
查看hoojjj的 主题 / 回贴
39楼  发表于: 2021-09-30 09:10
FUNCTION_BLOCK "块_1"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT
      p值 : Real;
      积分 : Real;
      反馈值 : Int;
      设定值 : Real;
      PID死区 : Real;
      PID上限 : Real;
      PID下限 : Real;
   END_VAR

   VAR_OUTPUT
      输出控制值 : Real;
      反馈过程值 : Real;
      PID输出 : Int;
   END_VAR

   VAR_TEMP
      当前误差 : Real;
      上次误差 : Real;
      计算当前输出值 : Real;
      计算上次输出值 : Real;
      反馈过程值临时存储 : Real;
      输出过程值临时存储 : Real;
   END_VAR


BEGIN
    
    #反馈过程值临时存储 := INT_TO_REAL(#反馈值);//反馈值转成浮点数存入到临时存储区。
    #反馈过程值 := (#反馈过程值临时存储 - 0.0) / 27648.0 * (#PID上限 - #PID下限) + #PID下限;//反馈过程值处理公式。
    #当前误差 := #设定值 - #反馈过程值;//算出当前误差值。
    IF  ABS(#当前误差)<#PID死区 THEN//PID死区大于当前误差的绝对值时。(使用绝对值表示无论是整数还是负数都不允许超出比较范围)。
        #计算当前输出值 := 0;      //如果上述条件成立,当前输出值为0.
    ELSIF  ABS(#当前误差)>=#PID死区 THEN//PID死区小于等于当前误差,执行下面公式。
        #计算当前输出值 := #p值 * (#当前误差 - #上次误差) + #积分 * #当前误差;//此公式在S7-200PID课程有讲,PID输出=p值*(当前误差-上次误差)+积分*当前误差。
    END_IF;
    #输出控制值 := #计算当前输出值;//将当前值输出值传送到输出控制值,再进行下一步处理。
    IF #输出控制值 > #PID上限 THEN//如果输出控制值大于PID上限值。
        #输出控制值 := #PID上限;//将上限值写入输出控制值。
    ELSIF #输出控制值 < #PID下限 THEN//如果输出控制值小于PID下限值。
        #输出控制值 := #PID下限;//将下限值写入输出控制值。
    END_IF;
    #上次误差 := #当前误差;//处理完成将当前误差写入上次误差。
    #计算上次输出值 := #输出控制值;//处理完成将输出控制值写入上次输出值。
    #输出过程值临时存储 := (#输出控制值 - #PID下限) / (#PID上限 - #PID下限) * 27648.0 + 0.0;//PID输出处理成0.0--27648.0范围。
    #PID输出 := REAL_TO_INT(#输出过程值临时存储);//再小数0.0--27648.0转换成16位整数0-27648范围。
END_FUNCTION_BLOCK
cdjszdh
级别: 网络英雄
精华主题: 0
发帖数量: 313 个
工控威望: 9655 点
下载积分: 10768 分
在线时间: 505(小时)
注册时间: 2016-08-27
最后登录: 2024-04-18
查看cdjszdh的 主题 / 回贴
40楼  发表于: 2021-09-30 11:39
谢谢分享,研究一下方法。
hoojjj
级别: 正式会员
精华主题: 0
发帖数量: 6 个
工控威望: 95 点
下载积分: 534 分
在线时间: 12(小时)
注册时间: 2010-04-30
最后登录: 2023-11-27
查看hoojjj的 主题 / 回贴
41楼  发表于: 2021-09-30 11:40
#计算当前输出值 := #p值 * (#当前误差 - #上次误差) + #积分 * #当前误差;
這PID 有點問題, 好像不是很純正
還是感謝分享
hoojjj
级别: 正式会员
精华主题: 0
发帖数量: 6 个
工控威望: 95 点
下载积分: 534 分
在线时间: 12(小时)
注册时间: 2010-04-30
最后登录: 2023-11-27
查看hoojjj的 主题 / 回贴
42楼  发表于: 2021-09-30 11:59
正確的PD 控制器如下計算方式

#计算当前输出值 := #p值 *   #当前误差+ #微分 * (#当前误差 - #上次误差)
f2830565
级别: 探索解密
精华主题: 0
发帖数量: 72 个
工控威望: 189 点
下载积分: 1187 分
在线时间: 72(小时)
注册时间: 2012-08-27
最后登录: 2024-04-19
查看f2830565的 主题 / 回贴
43楼  发表于: 2021-10-21 21:10
试试效果怎么样! 谢谢分享
toptron
天生我材必有用
级别: 略有小成
精华主题: 0
发帖数量: 47 个
工控威望: 205 点
下载积分: 3899 分
在线时间: 133(小时)
注册时间: 2012-05-12
最后登录: 2024-04-19
查看toptron的 主题 / 回贴
44楼  发表于: 2021-10-23 09:15
谢谢分享!
加勒比海带
级别: 论坛先锋
精华主题: 0
发帖数量: 2123 个
工控威望: 1771 点
下载积分: 6390 分
在线时间: 57(小时)
注册时间: 2021-07-19
最后登录: 2024-03-06
查看加勒比海带的 主题 / 回贴
45楼  发表于: 2021-11-01 19:56
下载学习学习
mimidog111
级别: 探索解密
精华主题: 0
发帖数量: 49 个
工控威望: 157 点
下载积分: 660 分
在线时间: 48(小时)
注册时间: 2012-08-28
最后登录: 2024-01-10
查看mimidog111的 主题 / 回贴
46楼  发表于: 2022-01-22 19:13
      
15930648543
级别: 略有小成
精华主题: 0
发帖数量: 40 个
工控威望: 207 点
下载积分: 6229 分
在线时间: 25(小时)
注册时间: 2021-07-26
最后登录: 2024-03-20
查看15930648543的 主题 / 回贴
47楼  发表于: 2022-02-08 10:46
谢谢分享,