基于西门子PID程序的C程序代码(带自整定功能哦)
本帖最后由 tyw996 于 2013-6-1 09:54 编辑共享一个西门子PLC上所使用的软件PID程序(FB58),我已将其改为C语言代码,并已在关键地方附有中文注释,带自整定功能。经测试,自整定后的PID参数非常好用,这就解决了繁琐的参数整定问题了。不过就是占内存大些,基本都是浮点运算,如果使用stm32f3或f4那就更爽了。再上传一份西门子fb58的中文资料供参考。(后续补充说明在8楼。)
学习一下,非常好的资料。 研究一下 多谢谢楼主,学习一下PID 谢谢楼主,我找带自整的PID控制C码好几年了。 这个程序是比较繁琐,我研究了一个月时间才搞定。给大家一些提示,这是属于位置式PID,程序本身即可以模拟输出,又可以PWM控制输出功能(用开关变量控制),只要将程序放在定时器中断中或单独一个线程中(ucos或其它,我用的是RTT)直接调用就可以了。所谓step 7指的是参数自整定是用7步搞定的,这个在资料中有说明。 我控温的算法也是用浮点的(芯片是stm32F05x),省事啊! 本帖最后由 tyw996 于 2013-6-1 10:20 编辑
有一问题需要补充下:TIME_TCK()函数需要自已添加,他的功能大意是在自整定的1阶段时需要外部定时器计时,这个定时器要跟程序循环周期参数做比较,差值超过5%整定就会失败的。TIME_TCK()函数只要在外面用1ms的定时器就可以了。另外在C原程序中将//tTime = TIME_TCK();去掉注释,我没记错的话应该是两个地方。例如:
void TIM6_DAC_IRQHandler(void)//1ms中断程序
{
TIM_ClearFlag(TIM6, TIM_FLAG_Update);
if(Time_zzd++>=2147483647)
Time_zzd=0;
}
在PID程序中添加以下函数:
static s32 TIME_TCK(void)
{
return (Time_zzd);
} 不错。。。。。。 学习学习 MARK一下,以后用得到 有点复杂呢! 有时间的时候看一下,多谢lz! 谢谢lz共享好资料,谢谢。 非常好的资料 楼主真强人 如此强悍?先研究一下 我大略研究过,这个FB58的PID程序是经过优化的,即积分使用的是抗积分饱,微分属于不完全微分功能。整定后的参数有两组PI和PID,用户可以随时调用或切换。所以这个PID程序我认为已经可以满足大多数场合的需要了,当然也不只是控制温度变量,其它压力,流量等慢速响应变量都可以应用的。 mark ,以后慢慢看 mark ,以后看 这是个好资料 先顶后看,好资料 tyw996 发表于 2013-5-31 18:47 static/image/common/back.gif
我大略研究过,这个FB58的PID程序是经过优化的,即积分使用的是抗积分饱,微分属于不完全微分功能。整定后 ...
正在看源代码,能否大致说一下程序的思路? pid,马克,好资料! 学习,好资料 下载了,还要记录下,看一下后续的更新。 先标记再看。
mark............. 手机标记一下,明天电脑上研究。多谢lz分享 控制效果有超调么 怎么看不了啊 怎么下载不了了呢 下载不了,请楼主重开个帖吧,谢谢了 应用在一个大滞后环节的负载上咋样?另外问下这个PID如果是改变控温点,原来设定温度的那套整定参数在设定温度改变多大范围内无需重新整定? 研究下 好东东,关注 下载不了,请楼主重开个帖吧,谢谢了
重新上传了,大家看看能不能下载。 应用在一个大滞后环节的负载上咋样?另外问下这个PID如果是改变控温点,原来设定温度的那套整定参数在设定温度改变多大范围内无需重新整定?
你担心的问题都能在资料上找到答案,上面都有说明的,可以先看资料。 兄弟太给力了,不过你已经实测过了吗? 目前是测温度PID调整,温度0.5的精度有吗?
tyw996 发表于 2013-5-31 18:47
我大略研究过,这个FB58的PID程序是经过优化的,即积分使用的是抗积分饱,微分属于不完全微分功能。整定后 ...
正在看源代码,能否大致说一下程序的思路?
单看原代码不好理解,当你看明白资料我想你也就会怎么使用了,至于PID算法,原程序我也看不明白的,只是别人在PLC论坛上通过公式验证了这是个递推算法。当然了,程序公开出来了嘛,大家也可以继续研究,探讨下它到底是什么积分和微分。 本帖最后由 tyw996 于 2013-6-1 09:42 编辑
兄弟太给力了,不过你已经实测过了吗? 目前是测温度PID调整,温度0.5的精度有吗?
我测试的控温精度能达到0.1度(结果出来后,我自己都感到惊叹),当然这只是在我这个项目中的测试结果。以后也看大家测试效果了。这跟你使用的控温环境及控制策略等有很大关系。 搞不清楚为何自整定失败, 楼主能否描述一下,自整定成功的必备条件? 本帖最后由 tyw996 于 2013-6-1 10:14 编辑
ddqq 发表于 2013-6-1 10:05 static/image/common/back.gif
搞不清楚为何自整定失败, 楼主能否描述一下,自整定成功的必备条件?
这个不太好说,还是先吃透资料吧,上面有告诉你整定失败的大致原因。提示下:看看STATUS_H和STATUS_D变量回的数据是多少,对照资料说明可查下原因。 最近正在接触这方面!太太谢谢楼主了! mark!!!!!!!!!!!! 这是好东西啊 好东西,先留着 好东西呀,谢谢楼主的分享 温度的量程多大?几位的A/D能达到0.1度的精度呀 先学习下,回头慢慢研究 先顶,后学习。 谢谢楼主分享这么好的资料楼,学习了。 正在学习,云里雾里,参考程序很需要!~ 下来研究一下,】{:tongue:}! 果断研究下~~期待大家的测试结果~ 文档需要PLC基础才能看懂,要是有个流程图就好了~ 增量式的怎么办? 不错,但只适用于温度控制! 不知道楼主是否已经试验成功么?? wns245249509 发表于 2013-6-3 09:09 static/image/common/back.gif
不知道楼主是否已经试验成功么??
我试验是可以的。当然好不好用,等大家把使用的情况反馈回来就知道了。 guohua 发表于 2013-6-2 21:51 static/image/common/back.gif
不错,但只适用于温度控制!
还不能这么早下结论,起码资料上已有说明。 自整定PID 好东西,学习中 果断收藏 {:handshake:}{:handshake:}非常好的资料 楼主真强人 1400行程序,准备开始看 mark PID 感谢楼主分享 学习了,测试要求温度控制的场合越来越来多,需要掌握! 标记,明天研究研究,顶楼主 本帖最后由 cf5257 于 2013-6-12 18:13 编辑
没搞过PID,感谢分享。 建议楼主能程序整理一下,加个.h文件,把接口明确一下。 好东西!做个记号! {:victory:}{:victory:}{:victory:}{:victory:}{:victory:}{:victory:} 本帖最后由 tyw996 于 2013-6-13 13:17 编辑
cf5257 发表于 2013-6-12 18:12 static/image/common/back.gif
建议楼主能程序整理一下,加个.h文件,把接口明确一下。
原程序之所以将所有变量定义成全局变量,就是这个意思。也就是说所有大写的变量都是接口,所以定义到.h文件也就设多大意义了。这个只要根据自已的应用去引用相应的外部变量就行了。比如QPULSE 就是对应外部输出脉冲引脚的接口,只要一条赋值语句就行了。 mark{:smile:}{:smile:}{:smile:}{:smile:} STEP 7-PID温度控制.PDF 不能下载啊。 学习一下,谢谢了! 谢谢分享 谢谢分享。PID一直没研究透,继续努力。 "......通过公式验证了这是个递推算法.....". 效果应该有保证,好资料。 mark 再看 PID控制
先赞一个 好资料,多谢LZ 红啊,不懂帮顶 路过学习一下, 帮顶! 程序很多地方都能找到,但很少说到具体是如何调整输出 这个要顶 这个不错 收藏 太刁了,得仔细研究研究 新手上路,多多指教 ,谢谢楼主 学习学习 本帖最后由 blueice1108 于 2013-8-16 16:50 编辑
楼主
能说下拐点计算和检测到拐点后怎么计算出参数吗
看了满久 看不明白
也就是PDF p27 图PID_TUNER的部分
或给点相关资料
谢谢
好东东,关注 持续关注中!希望楼主能讲讲自己对程序的理解! 回去再看看 谢谢楼主分享! 楼主你好!能不能简单介绍下这个怎么用呢,或者弄个简单的例程,比如目标值、输出值这些变量怎么用。谢谢!! 顶 支持分享 好东西好像挺复杂,研究一下, 很复杂的一个程序