tyw996 发表于 2013-5-31 15:38:04

基于西门子PID程序的C程序代码(带自整定功能哦)

本帖最后由 tyw996 于 2013-6-1 09:54 编辑

共享一个西门子PLC上所使用的软件PID程序(FB58),我已将其改为C语言代码,并已在关键地方附有中文注释,带自整定功能。经测试,自整定后的PID参数非常好用,这就解决了繁琐的参数整定问题了。不过就是占内存大些,基本都是浮点运算,如果使用stm32f3或f4那就更爽了。再上传一份西门子fb58的中文资料供参考。(后续补充说明在8楼。)

dxf5200 发表于 2013-5-31 15:50:53

学习一下,非常好的资料。

postek 发表于 2013-5-31 16:02:53

研究一下   

edawn 发表于 2013-5-31 16:08:39

多谢谢楼主,学习一下PID

lans0625 发表于 2013-5-31 16:09:32

谢谢楼主,我找带自整的PID控制C码好几年了。

tyw996 发表于 2013-5-31 16:20:29

这个程序是比较繁琐,我研究了一个月时间才搞定。给大家一些提示,这是属于位置式PID,程序本身即可以模拟输出,又可以PWM控制输出功能(用开关变量控制),只要将程序放在定时器中断中或单独一个线程中(ucos或其它,我用的是RTT)直接调用就可以了。所谓step 7指的是参数自整定是用7步搞定的,这个在资料中有说明。

coleyao 发表于 2013-5-31 16:23:43

我控温的算法也是用浮点的(芯片是stm32F05x),省事啊!

tyw996 发表于 2013-5-31 16:27:45

本帖最后由 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);
}

365mcu 发表于 2013-5-31 16:29:21

不错。。。。。。

943941946 发表于 2013-5-31 16:44:05

学习学习

f8023m 发表于 2013-5-31 17:38:08

MARK一下,以后用得到

ljt80158015 发表于 2013-5-31 17:51:17

有点复杂呢!

sunnyqd 发表于 2013-5-31 18:27:42

有时间的时候看一下,多谢lz!

taishandadi 发表于 2013-5-31 18:28:22

谢谢lz共享好资料,谢谢。

Halley 发表于 2013-5-31 18:33:55

非常好的资料 楼主真强人

Flyback 发表于 2013-5-31 18:46:42

如此强悍?先研究一下

tyw996 发表于 2013-5-31 18:47:43

我大略研究过,这个FB58的PID程序是经过优化的,即积分使用的是抗积分饱,微分属于不完全微分功能。整定后的参数有两组PI和PID,用户可以随时调用或切换。所以这个PID程序我认为已经可以满足大多数场合的需要了,当然也不只是控制温度变量,其它压力,流量等慢速响应变量都可以应用的。

feverkim 发表于 2013-5-31 18:54:57

mark ,以后慢慢看

bsz84 发表于 2013-5-31 19:06:19

mark ,以后看

sedulity11 发表于 2013-5-31 19:07:37

这是个好资料

mcu5i51 发表于 2013-5-31 19:09:37

先顶后看,好资料

Flyback 发表于 2013-5-31 19:15:10

tyw996 发表于 2013-5-31 18:47 static/image/common/back.gif
我大略研究过,这个FB58的PID程序是经过优化的,即积分使用的是抗积分饱,微分属于不完全微分功能。整定后 ...

正在看源代码,能否大致说一下程序的思路?

fiddly 发表于 2013-5-31 20:11:30

pid,马克,好资料!

jsntzxh 发表于 2013-5-31 20:29:09

学习,好资料

TANK99 发表于 2013-5-31 20:34:53

下载了,还要记录下,看一下后续的更新。

ahuang227 发表于 2013-5-31 21:10:28

先标记再看。

zl_123 发表于 2013-5-31 23:38:22

mark.............

ringan865 发表于 2013-5-31 23:57:06

手机标记一下,明天电脑上研究。多谢lz分享

tbkmcjl 发表于 2013-6-1 00:21:54

控制效果有超调么

TheRealK 发表于 2013-6-1 01:31:31

怎么看不了啊

gzhmcu 发表于 2013-6-1 08:03:26

怎么下载不了了呢

gzhmcu 发表于 2013-6-1 08:09:49

下载不了,请楼主重开个帖吧,谢谢了

marshallemon 发表于 2013-6-1 08:59:33

应用在一个大滞后环节的负载上咋样?另外问下这个PID如果是改变控温点,原来设定温度的那套整定参数在设定温度改变多大范围内无需重新整定?

MINI2440 发表于 2013-6-1 09:02:32

研究下   

formatme 发表于 2013-6-1 09:16:02

好东东,关注

tyw996 发表于 2013-6-1 09:16:52

下载不了,请楼主重开个帖吧,谢谢了
重新上传了,大家看看能不能下载。

tyw996 发表于 2013-6-1 09:18:46

应用在一个大滞后环节的负载上咋样?另外问下这个PID如果是改变控温点,原来设定温度的那套整定参数在设定温度改变多大范围内无需重新整定?
你担心的问题都能在资料上找到答案,上面都有说明的,可以先看资料。

kinsno 发表于 2013-6-1 09:21:19

兄弟太给力了,不过你已经实测过了吗? 目前是测温度PID调整,温度0.5的精度有吗?

tyw996 发表于 2013-6-1 09:29:36

tyw996 发表于 2013-5-31 18:47
我大略研究过,这个FB58的PID程序是经过优化的,即积分使用的是抗积分饱,微分属于不完全微分功能。整定后 ...
正在看源代码,能否大致说一下程序的思路?
单看原代码不好理解,当你看明白资料我想你也就会怎么使用了,至于PID算法,原程序我也看不明白的,只是别人在PLC论坛上通过公式验证了这是个递推算法。当然了,程序公开出来了嘛,大家也可以继续研究,探讨下它到底是什么积分和微分。

tyw996 发表于 2013-6-1 09:39:21

本帖最后由 tyw996 于 2013-6-1 09:42 编辑

兄弟太给力了,不过你已经实测过了吗? 目前是测温度PID调整,温度0.5的精度有吗?

我测试的控温精度能达到0.1度(结果出来后,我自己都感到惊叹),当然这只是在我这个项目中的测试结果。以后也看大家测试效果了。这跟你使用的控温环境及控制策略等有很大关系。

ddqq 发表于 2013-6-1 10:05:49

搞不清楚为何自整定失败, 楼主能否描述一下,自整定成功的必备条件?

tyw996 发表于 2013-6-1 10:13:37

本帖最后由 tyw996 于 2013-6-1 10:14 编辑

ddqq 发表于 2013-6-1 10:05 static/image/common/back.gif
搞不清楚为何自整定失败, 楼主能否描述一下,自整定成功的必备条件?

这个不太好说,还是先吃透资料吧,上面有告诉你整定失败的大致原因。提示下:看看STATUS_H和STATUS_D变量回的数据是多少,对照资料说明可查下原因。

谁非过客 发表于 2013-6-1 12:11:24

最近正在接触这方面!太太谢谢楼主了!

max-men 发表于 2013-6-1 12:13:56

mark!!!!!!!!!!!!

xiaosi1102 发表于 2013-6-1 12:53:21

这是好东西啊

zq6220 发表于 2013-6-1 13:01:45

好东西,先留着

mxfahm 发表于 2013-6-1 13:45:09

好东西呀,谢谢楼主的分享

liuyingqing139 发表于 2013-6-1 15:26:48

温度的量程多大?几位的A/D能达到0.1度的精度呀

gao_hailong 发表于 2013-6-2 12:00:46

先学习下,回头慢慢研究

ourdevstm32 发表于 2013-6-2 14:16:27

先顶,后学习。

liulei19920612 发表于 2013-6-2 15:52:01

谢谢楼主分享这么好的资料楼,学习了。

liber798A 发表于 2013-6-2 18:21:11

正在学习,云里雾里,参考程序很需要!~

uzufk 发表于 2013-6-2 18:34:24

下来研究一下,】{:tongue:}!

sunnydragon 发表于 2013-6-2 18:36:39

果断研究下~~期待大家的测试结果~

sunnydragon 发表于 2013-6-2 19:26:31

文档需要PLC基础才能看懂,要是有个流程图就好了~

summarize 发表于 2013-6-2 19:44:12

增量式的怎么办?

guohua 发表于 2013-6-2 21:51:16

不错,但只适用于温度控制!

wns245249509 发表于 2013-6-3 09:09:23

不知道楼主是否已经试验成功么??

tyw996 发表于 2013-6-3 12:48:34

wns245249509 发表于 2013-6-3 09:09 static/image/common/back.gif
不知道楼主是否已经试验成功么??

我试验是可以的。当然好不好用,等大家把使用的情况反馈回来就知道了。

tyw996 发表于 2013-6-3 12:52:44

guohua 发表于 2013-6-2 21:51 static/image/common/back.gif
不错,但只适用于温度控制!

还不能这么早下结论,起码资料上已有说明。

yixuanyuxiao 发表于 2013-6-3 13:18:41

自整定PID

ka1265 发表于 2013-6-3 13:30:04

好东西,学习中

wei669 发表于 2013-6-3 13:37:36

果断收藏

windancerhxw 发表于 2013-6-3 14:05:25

{:handshake:}{:handshake:}非常好的资料 楼主真强人

Flyback 发表于 2013-6-7 10:04:14

1400行程序,准备开始看

铁驴不倒 发表于 2013-6-9 12:14:05

mark PID 感谢楼主分享

zbsht550 发表于 2013-6-9 12:58:04

学习了,测试要求温度控制的场合越来越来多,需要掌握!

07611128 发表于 2013-6-12 15:17:40

标记,明天研究研究,顶楼主

cf5257 发表于 2013-6-12 18:06:01

本帖最后由 cf5257 于 2013-6-12 18:13 编辑

没搞过PID,感谢分享。

cf5257 发表于 2013-6-12 18:12:06

建议楼主能程序整理一下,加个.h文件,把接口明确一下。

omlarn 发表于 2013-6-13 09:39:52

好东西!做个记号!

mcu1234mcu 发表于 2013-6-13 09:45:51

{:victory:}{:victory:}{:victory:}{:victory:}{:victory:}{:victory:}

tyw996 发表于 2013-6-13 13:12:50

本帖最后由 tyw996 于 2013-6-13 13:17 编辑

cf5257 发表于 2013-6-12 18:12 static/image/common/back.gif
建议楼主能程序整理一下,加个.h文件,把接口明确一下。

原程序之所以将所有变量定义成全局变量,就是这个意思。也就是说所有大写的变量都是接口,所以定义到.h文件也就设多大意义了。这个只要根据自已的应用去引用相应的外部变量就行了。比如QPULSE 就是对应外部输出脉冲引脚的接口,只要一条赋值语句就行了。

macaroni 发表于 2013-6-13 15:16:54

mark{:smile:}{:smile:}{:smile:}{:smile:}

wys123 发表于 2013-6-16 23:01:53

STEP 7-PID温度控制.PDF    不能下载啊。

fyy 发表于 2013-6-17 01:37:41

学习一下,谢谢了!

haitao10086 发表于 2013-6-17 08:58:46

谢谢分享

lxh413458727 发表于 2013-6-17 10:53:49

谢谢分享。PID一直没研究透,继续努力。

hujian228 发表于 2013-6-17 11:08:19

"......通过公式验证了这是个递推算法.....".   效果应该有保证,好资料。

jknew2008 发表于 2013-6-17 13:58:53

mark 再看

BruceZeng 发表于 2013-6-17 18:07:03

PID控制

amwox 发表于 2013-6-17 20:03:37

先赞一个

adwinter 发表于 2013-6-18 14:38:49

好资料,多谢LZ

Hz01800475 发表于 2013-6-19 10:02:45

红啊,不懂帮顶

weiqs_fj 发表于 2013-6-19 14:13:14

路过学习一下, 帮顶!

mcujack 发表于 2013-6-19 16:06:12

程序很多地方都能找到,但很少说到具体是如何调整输出

gotofly100 发表于 2013-6-19 17:01:04

这个要顶

flyhorse 发表于 2013-6-19 17:34:09

这个不错 收藏

对妮说 发表于 2013-6-20 15:48:19

太刁了,得仔细研究研究

wangcunyue 发表于 2013-6-20 17:53:02

新手上路,多多指教 ,谢谢楼主

hhhyyy78 发表于 2013-6-21 11:05:14

学习学习

blueice1108 发表于 2013-8-16 14:47:05

本帖最后由 blueice1108 于 2013-8-16 16:50 编辑

楼主
能说下拐点计算和检测到拐点后怎么计算出参数吗
看了满久 看不明白
也就是PDF p27 图PID_TUNER的部分
或给点相关资料
谢谢

Feco 发表于 2013-8-16 15:12:12

好东东,关注

g22261846 发表于 2013-8-16 16:07:05

持续关注中!希望楼主能讲讲自己对程序的理解!

canopen 发表于 2013-8-16 16:33:11

回去再看看

fayuanye 发表于 2013-8-16 17:31:49

谢谢楼主分享!

Halley 发表于 2013-8-18 22:34:54

楼主你好!能不能简单介绍下这个怎么用呢,或者弄个简单的例程,比如目标值、输出值这些变量怎么用。谢谢!!

SHIYOULAN 发表于 2013-8-18 22:52:39

顶 支持分享                                                                                    

johnsonjqxu 发表于 2013-9-23 20:32:50

好东西好像挺复杂,研究一下,

chengsong 发表于 2013-9-23 22:06:25

很复杂的一个程序
页: [1] 2 3 4 5 6 7
查看完整版本: 基于西门子PID程序的C程序代码(带自整定功能哦)