tyw996 发表于 2018-8-13 13:44:46

本帖最后由 tyw996 于 2018-8-13 13:52 编辑

工程师030 发表于 2018-8-12 09:39
楼主你好,我的温度输出周期为1.2s,输出调节周期,pid()调用周期也是1.2s。PWM周期1200ms,分120份。
CYCL ...

既然关闭了PULSE_ON,其相关参数就没改动的必要了,除了CYCLE=1.2,其它参数在没弄懂之前还是不要改动,多看看手册吧。
很好奇你的PWM输出能分出120份!?

工程师030 发表于 2018-8-13 15:45:11

tyw996 发表于 2018-8-13 13:44
既然关闭了PULSE_ON,其相关参数就没改动的必要了,除了CYCLE=1.2,其它参数在没弄懂之前还是不要改动, ...

问题解决了,多谢楼主,PWM其实是软件控制的,所以分多少份都可以。
现在就是得提高一下采样速度才可以。

jackem 发表于 2018-8-13 17:10:21

下了不顶非好汉!

HANGKONG15 发表于 2018-8-16 10:06:29

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

kingcrum 发表于 2018-8-16 10:07:34

好资料,谢谢分享

sd_share 发表于 2018-8-22 18:32:25

本帖最后由 sd_share 于 2018-8-23 10:08 编辑

重复,删除。。

maomao0 发表于 2018-8-22 18:44:01

这个确实是难得的好资料

carefree1986 发表于 2018-8-22 19:37:06

不错 顶一个!!!!!!!!!!!!!!!!!!!

weidadejang 发表于 2018-8-22 21:32:46

正缺这个东西,谢谢楼主!

sedulity11 发表于 2018-8-22 23:50:14

挺好的,再细节一些就更容易理解了,支持分享

sd_share 发表于 2018-8-23 10:39:01

本帖最后由 sd_share 于 2018-8-23 10:50 编辑

不好意思,发错

sd_share 发表于 2018-8-23 10:51:01

tyw996 发表于 2018-8-13 13:44
既然关闭了PULSE_ON,其相关参数就没改动的必要了,除了CYCLE=1.2,其它参数在没弄懂之前还是不要改动, ...

楼主您好,你的帖子对我帮助很大,可否加好友请教下,万分感谢

yanyanyan168 发表于 2018-8-23 10:52:23

感谢楼主,效果非常不错。

yanyanyan168 发表于 2018-8-23 11:03:27

系统采用滞后30-40S,自整定非常不理想。
PID参数整定方法采用工业控制中常用的滞后控制参数整定模型(Ziegler-Nichols参数整定方法):


林州 发表于 2018-8-24 08:18:49

这个代码好复杂,能用,没看懂!

yangxizhong 发表于 2018-8-24 08:43:03

多谢谢楼主,学习一下PID

sd_share 发表于 2018-8-25 22:39:54

请问楼主,自整定过程中比例(GAIN)出现INF(无限大)一般是由于啥原因?

whuer 发表于 2018-8-26 00:11:55

谢谢分享非常不错

sd_share 发表于 2018-8-26 23:30:53

请问楼主,加热对象为水,不开启脉冲
CYCLE = 100ms
TU = 1S
TA = 500S
TUN_DLMN = 20
采用设置SP_INT阶跃的方式
出来的GAIN值为何是INF?

zhangfeibao 发表于 2018-8-27 18:18:35

这个我要好好学习一下.谢谢楼主.

zhangfeibao 发表于 2018-8-27 18:50:47

我要加楼主,向楼主学习.

sd_share 发表于 2018-8-27 20:05:07

从手册TU和TA这两个参数看手册是滞后时间和过程时间常数
实际测出来TU=75S,TA=300S,但是用这两个值整定会出现30500
一直减小TU到0.1s才整定成功
目前配置的TU=0.1S,TA=100S,可以整定出一套参数来
但是用户具体的使用环境也许和我的测试环境不一样
这两个参数是否需要修改
请问TU,TA参数是否需要开放给用户配置
另外楼主您的理解这两个参数表示的是什么意思?

yinian 发表于 2018-8-27 20:30:48

这个很实用,谢谢

tyw996 发表于 2018-8-28 09:57:36

本帖最后由 tyw996 于 2018-8-28 10:04 编辑

sd_share 发表于 2018-8-27 20:05
从手册TU和TA这两个参数看手册是滞后时间和过程时间常数
实际测出来TU=75S,TA=300S,但是用这两个值整定会 ...

TU和TA是系统内部计算出的参数,修改无实际意义;整定有时成功有时失败,说明整定条件不当,30500错误代码就说明了这一点。

dela2000 发表于 2018-8-28 18:39:07

Mark:带自整的PID控制C码

ouravr2012 发表于 2018-9-17 09:42:07

翻一下,不错!

micyoco 发表于 2018-9-19 13:41:45

准备使用一下看效果

star_tale 发表于 2018-9-20 16:39:24

这个只适用于哪些场合呢,s级的场合可以吗

yanggexiaosa 发表于 2018-9-20 16:52:51

用了好几年了,帖子一直很火

wangzex 发表于 2018-9-20 16:54:36

顶一个!

szxszx 发表于 2018-9-20 21:13:18

请教楼主:只能用于温度控制吗?

shpan_111 发表于 2018-9-20 21:15:01

西门子PID,mark

aisledianzi 发表于 2018-9-21 16:55:32

mark下,谢谢楼主

szxszx 发表于 2018-9-23 18:38:08


请教楼主:只能用于温度控制吗?

dzlt2012 发表于 2018-9-24 15:18:40

多谢楼主!标记,西门子PID程序及资料

danfeidie 发表于 2018-9-24 19:42:49

楼主威武,后续学习下

tyw996 发表于 2018-9-26 08:22:21

szxszx 发表于 2018-9-23 18:38
请教楼主:只能用于温度控制吗?

适用于温度、压力等较慢速控制变量

游在云间 发表于 2018-10-18 21:57:40

tyw996 发表于 2013-6-1 09:29
单看原代码不好理解,当你看明白资料我想你也就会怎么使用了,至于PID算法,原程序我也看不明白的,只是别 ...

可以分享一下推导公式的链接吗?

游在云间 发表于 2018-11-14 19:55:03

if(((rPvDelt < 0.8 * rSeek || ! sbSpChange) && QTUN_RUN && FIL_CYC < 1024 && siTime == 2) &&
         (((siCycle > 6 && PVDT == 0.0 || siStatus == 999) || ((rNoiPvdt > 60.0 && siCycle > 7) && (POI_CYCL < 2 || srPvdt2 > 0.99 * srPvdtMax2))) || (rNoiPvdt > 5.0 && siCycle > 15 &&POI_CYCL < 2)))
这部分代码没看明白,能给详细说一下吗?

qqtfh 发表于 2018-11-14 21:24:24

好东东,关注,回头好好研究一下。

wahaha 发表于 2018-12-4 23:20:41

标记一下

TKZXJ 发表于 2018-12-5 18:11:16

谢谢楼主分享!

limaotaizi 发表于 2018-12-8 15:50:47

mark,有需要再看看。。

hyf88 发表于 2018-12-8 16:51:22

楼主:您好!我现在调试电机,步骤如下:
(1) 用原代码的PID初始化参数(GAIN=2.0等)发现震荡,于是我自己改了初始化参数,已满足可以稳定。
(2)稳定PV到SP=30后,我就TUN_ON=1 并且SP=50,发现STATUS=21120。并且震荡+30比较严重。
这样一来
2xx2x 还未到达拐点(只是已经通过设定值阶跃变化进行了激励)如果控制器是振荡的,则弱化控制器参数,并使用一个较小的可调节变量差值TUN_DLMN 重复尝试。
2x1xx 估计偏差(TU < 3*CYCLE) 减少 CYCLE,然后重复尝试。特殊情况,纯粹的 PT1 处理:不要重复,可能弱化控制器参数。
21xxx 估计偏差 N_PTN < 1 在更好的条件下重复尝试
这三个错误都存在?我下一步如何调试?

接下来我进行了另外一组实验
(1)稳定
(2) tun_on=1 tun_st=1 居然此时出现了status_h=30005.
这样说来,我的cycle!=PID调用周期?可是这样和第一实验不符合呀?

lz,请教请教啦!


zhunyan1 发表于 2018-12-10 00:00:36

西门子PLC 的PID自整定,MARK

pingqifa 发表于 2018-12-18 08:31:46

yelang1124 发表于 2014-3-12 16:47
首先感谢楼主的热心解答,在此谢谢!,下面还有几个疑惑,还请楼主在百忙之余帮小弟看下,谢谢

      ...

前辈,能否把图片里的上位机软件分享下,最近也在研究楼主的算法,谢谢啦!

pingqifa 发表于 2018-12-19 14:32:39

哪位前辈可以把实际调试的工程分享出来吗?移植到单片机程序里,运行起来挺奇怪的。整定环节瞬间从0到7,整定出来的参数无法使用。有谁能分享下这个算法入口的参数设置嘛?请赐教。

shentqlf 发表于 2018-12-19 15:36:15

我想把这个代码移植到ebox上,楼主能提供点帮助吗?

hellokv1688 发表于 2019-5-11 09:24:57

好资料,支持分享

qmsolo2004 发表于 2019-5-16 17:49:47

谢谢楼主分享!

chengsong 发表于 2019-5-23 19:19:27

想问一下LZ,PULSE_ON = TRUE;整定结束后发现输出是一直打开的(QPULSE = TRUE ),非脉冲输出。怎样才能切换到自动控制?

shangheming 发表于 2019-6-27 15:07:56

你好 我下载的step 7-pid不是pdf格式的,你可以发我邮箱一份吗,谢谢!370860964@qq.com

llysc 发表于 2019-6-28 08:56:54

楼主威武,已收藏~

abigpad 发表于 2019-6-28 10:48:03

手下研究一下,谢谢

tjx0512 发表于 2019-9-20 09:43:25

shangheming 发表于 2019-6-27 15:07
你好 我下载的step 7-pid不是pdf格式的,你可以发我邮箱一份吗,谢谢!

自己改成PDF后缀就可以了!

zrkdzsj521 发表于 2019-10-30 16:55:13

学习一下,谢谢楼主

huangkai29 发表于 2019-10-31 22:27:24

看看是怎么实现的

ap4115 发表于 2019-11-1 21:12:19

好东西,一直想做一个自整定PID,终于找到学习资料啦

纸箱人 发表于 2019-11-5 19:09:37


mark ,以后慢慢看{:victory:}

farmerzhangdl 发表于 2019-11-5 19:26:17



mark ,以后慢慢看

taojie 发表于 2019-11-5 20:05:26

PID用得好,就是人王

motata2006 发表于 2019-11-6 10:22:44

先收藏,抽时间研究一下.

ap4115 发表于 2019-11-6 20:03:46

很好的资料,正在研究,有个问题请问楼主,SELECT = 0,SELECT = 3,一个是快速周期中断调用,一个是慢速周期中断调用,那么请问怎么算快速?怎么算慢速?

ap4115 发表于 2019-12-1 21:31:39

这个代码确实很不错,断断续续的看了2个星期,今天终于移植完成上线试了。在STM32上面跑了起来,第一次用的时候还没整定,控制的效果是等幅振荡,然后开始第一次整定,发现一直处于阶段也就是一直在PHASE=2那里,后来仔细看发现是TUN_DLMN=25这个默认值太小,不足以让我的系统温度上升,接着就改为TUN_DLMN=100,再次进行整定,温度就上去了,很快就结束,一看状态代码STATUS_H=10000,正好是找到了合适的参数。然后用这套参数接着控制,确实非常稳定,设定温度在120°,基本是能稳定在±0.2°

ap4115 发表于 2019-12-8 10:57:54

楼主你好,很感谢你这个PID好资料,我已经在加热过程中使用的不错了,包括整定。最近应用在制冷,但是整定时总是返回30002,请问用于制冷需要配置哪里吗?

iqxt88 发表于 2019-12-8 12:00:37

pid学习了,谢谢

shangheming 发表于 2020-1-2 10:01:05

为什么下载的名称和后缀都不对?

xiefei123456 发表于 2020-1-3 10:55:56

ap4115 发表于 2019-12-1 21:31
这个代码确实很不错,断断续续的看了2个星期,今天终于移植完成上线试了。在STM32上面跑了起来,第一次用的 ...

能不能把你的 加热的 部分 分享下,非常感谢! 397607437@qq.com

city_rip99 发表于 2020-1-3 11:28:59

先看看!!!!!

xfdr 发表于 2020-1-3 12:35:17

不错 改天测试一下

wlm3000 发表于 2020-1-4 11:46:38

好资料,可以用来做温度控制器

ljgchina 发表于 2020-1-9 22:31:03

MARK一下,以后用得到

QL攻城狮 发表于 2020-1-14 16:05:15

虽然没用,但是感觉好厉害

zibouv 发表于 2020-1-25 12:56:20

不错的资料,谢谢分享!

jun 发表于 2020-1-25 21:46:09

谢谢分享

Mr_Duan 发表于 2020-1-27 06:16:16

谢谢,非常好的资料。

wjwjwjwj98 发表于 2020-1-27 08:37:01

好资料,谢谢分享

ap4115 发表于 2020-3-22 10:19:38

xiefei123456 发表于 2020-1-3 10:55
能不能把你的 加热的 部分 分享下,非常感谢!

你好,其实楼主原来的代码基本不用改,就是调整一下TUN_DLM、采样周期,关键是要自己用一个定时器实现Time_zzd的计时就OK了。

jaky80000 发表于 2020-3-22 10:37:31

MARK一下,顶一个

kupier 发表于 2020-3-27 00:38:22

感谢楼主分享

魏博 发表于 2020-3-28 10:33:13

lans0625 发表于 2013-5-31 16:09
谢谢楼主,我找带自整的PID控制C码好几年了。

这么难找吗?真是稀有技术吧!

GoingDown 发表于 2020-3-29 01:06:43

Mark 西门子 pid整定。

zhcj66 发表于 2020-3-29 03:57:51

感谢分享,有空学习一下

cnxh 发表于 2020-3-29 06:54:46

ap4115 发表于 2020-3-22 10:19
你好,其实楼主原来的代码基本不用改,就是调整一下TUN_DLM、采样周期,关键是要自己用一个定时器实现Tim ...

多谢,提供经验,下次也试一下

ap4115 发表于 2020-3-29 10:22:31

cnxh 发表于 2020-3-29 06:54
多谢,提供经验,下次也试一下

楼主的资料PID那个函数不用任何修改,自整定的也不用改。只需输入参数就能跑起来,只是如果需要自整定,就需要调整一下采样周期、TUN_DLMN等。自整定需要自己写一个顺序,按照提供的PDF的资料可以有两种方法进入自整定,其中一种就是先把MAN_ON=1进入手动模式,并且赋值MAN = 10(根据自己系统确定),PID函数就会输出固定的信号,你系统就固定运行,一直运行直到系统可以稳定在某一个状态;然后就TUN_SET=1开始自整定,接着需要等待一会,PDF手册说典型是1分钟(好像是为了计算过程噪声),然后把MAN_ON=0变回自动模式,同时改变一下你目标值,这个时候阶跃激励就开,自整定就开始,等着状态码返回就可以了。

cnxh 发表于 2020-3-29 17:09:40

ap4115 发表于 2020-3-29 10:22
楼主的资料PID那个函数不用任何修改,自整定的也不用改。只需输入参数就能跑起来,只是如果需要自整定, ...

好热心,谢谢

ljh407055315 发表于 2020-6-4 08:53:54

好东西,下载下来研究一下,谢谢楼主

QVQ 发表于 2020-7-20 20:06:31

ap4115 发表于 2020-3-29 10:22
楼主的资料PID那个函数不用任何修改,自整定的也不用改。只需输入参数就能跑起来,只是如果需要自整定, ...

你好坛友,我看到你之前在论坛上热心的回复坛友关于PID自整定的代码问题,我有些问题是在不知道如何实现,我能有偿得到一份你的加热的PID自整定移植代码吗?期待你的回复,谢谢你了,微信Chen15603309217

wxwj97 发表于 2020-9-5 08:42:34

感谢分享,学习一下。

dam 发表于 2020-9-16 10:34:55

MARK一下,正需要

wangyy@dianzi 发表于 2020-12-31 11:12:40

写的好复杂,谢谢分享!!

hello2020 发表于 2020-12-31 11:16:01

谢谢分享,学习用

krdzw 发表于 2021-1-4 19:48:13

自整定有的时候整定的非常好 有的时候整定不行!就是不知道整定条件是什么!

liujian6f 发表于 2021-1-29 17:25:54

PHASE在1跳2时等待1分钟里 检测NOISE_PV小于0.5才允许跳转 否则复位, 整定的结果非常完美。设定100度 误差0.2度。谢谢分享

lnso 发表于 2021-1-29 18:41:06

pid老生常谈了啊

longerfjw 发表于 2021-2-21 12:28:17

谢谢楼主,学习下pid

xml2028 发表于 2021-2-21 23:44:13

看看能不能研究一下

advarx21ic 发表于 2021-11-6 09:24:19

wzavr 发表于 2015-9-29 22:03
看过西门子的原版程序了, 确实是这样, 但是计算方法有高手能解释下吗?
难道c语言我看糊涂了..... 哭啊..... ...

请问哪里可以搞到西门子plc的程序?

hfei1980 发表于 2021-11-14 08:20:43

谢谢分享,研究一下

Tommyrjs 发表于 2022-12-13 23:36:05

楼主你好,无意中看到你这个帖子,对你提供的PID自整定代码非常感兴趣,研究了一下,有些问题不太理解,想请教下,

CYCLE这个是采样周期,也是PID算法的运算周期,比如CYCLE=1,表示1s计算一次PID结果,也就是1s输出一次LMN值用于PWM控制。
我的问题是,PWM的控制周期是否需要与这个调用周期一致?
我现在是用继电器控制,温度每1s刷新一次,继电器的控制周期要>=20s,所以我设置CYCLE=1s,PWM周期为20s.
但是我又突然想到一个问题,就是CYCLE=1s表示PID每1s输出一个结果来控制PWM,假设输出的值LMN=10,表示PWM的占空比为50%,PWM周期为20s,所以表示继电器要开10s, 关10s,但是PID是1s输出一个结果控制PWM,会不会导致这次PWM的一个周期还没跑完20s,然后下一次PID新的计算结果出来又取代了上一次的PWM值,因为PID是1s输出一次,而PWM周期是20s。

所以基于这种想法,我的问题是PWM控制周期是不是必须与CYCLE一样,比如PWM周期是20s,那么CYCLE也必须20s?
CYCLE=1s,PWM=20s这种是不是行不通?

这里不太理解,希望楼主赐教
这个帖子好多年了,不知道楼主是否还能看到,如果看到,希望可以指教,万分感谢!
页: 1 2 3 4 5 [6] 7
查看完整版本: 基于西门子PID程序的C程序代码(带自整定功能哦)