最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

C语言编写PID温度控制程序

来源:动视网 责编:小OO 时间:2025-09-29 10:59:52
文档

C语言编写PID温度控制程序

(*initprogram*)PIDpara.enable=1;使能端PIDpara.enter=1;当enter为1时,检查参数并转换为内部显示。;当enter为0时,忽略输入参数的改变并存储计算时间。PIDpara.Y_max=32767;PID输出最大值(0~~32767)PIDpara.Y_min=0;PID输出最小值(0~~32767)PIDpara.dY_max=10.0;输出最大容许变化量,操作变量斜坡最大值。为0时ramp不起作用,不需计算时间PIDpara.Kp=1.0;比例
推荐度:
导读(*initprogram*)PIDpara.enable=1;使能端PIDpara.enter=1;当enter为1时,检查参数并转换为内部显示。;当enter为0时,忽略输入参数的改变并存储计算时间。PIDpara.Y_max=32767;PID输出最大值(0~~32767)PIDpara.Y_min=0;PID输出最小值(0~~32767)PIDpara.dY_max=10.0;输出最大容许变化量,操作变量斜坡最大值。为0时ramp不起作用,不需计算时间PIDpara.Kp=1.0;比例
(* init program *)

PIDpara.enable              = 1             ;使能端

PIDpara.enter        = 1                 ;当enter为1时,检查参数并转换为内部显示。

                                                     ;当enter为0时,忽略输入参数的改变并存储计算时间。

PIDpara.Y_max            = 32767     ;PID输出最大值(0~~32767)   

PIDpara.Y_min             = 0            ;PID输出最小值(0~~32767)

PIDpara.dY_max      = 10.0      ;输出最大容许变化量,操作变量斜坡最大值。为0时ramp不起作用,不需计算时间

PIDpara.Kp                  = 1.0           ;比例

PIDpara.Tn         = 10.0       ;积分(越小作用越大),为0时第I part和jolt-free切换不起作用且不需要任何计算时间。

PIDpara.Tv                  = 1         ;微分

PIDpara.Tf           = 1       ;微分滤波时间。若Tv不为0必须输入(初值为Tv/10),不应少于(1.4*任务的扫描时间).

PIDpara.Kw      = 1                ;比例项衰减系数。Kw为1时设定值不变进行比例项计算,为小于1时,设定值乘Kw后进行比例项计算(此项不能为零)

PIDpara.Kfbk     = 1                  ;抗积分饱和,终结阻尼值。Kfbk为0时终结保护无效,不需要计算时间

PIDpara.fbk_mode = LCPID_FBK_MODE_INTERN     ;操作变量的反馈模式:内部模式(一般为内部模式)

PIDpara.d_mode  = LCPID_D_MODE_E           ;微分模式:对偏差值进行微分计算(标准PID控制);X模式:对实际值进行微分计算(一般选次方式)

PIDpara.calc_mode= LCPID_CALC_MODE_EXACT ;计算模式:精确(所有计算为双精度浮点型, 如无舍入错误和CPU计算次数过长)(一般选次方式)

 

PIDpara FUB LCPIDpara()                                       ;调用PID参数功能块

 

循环程序中程序如下,此程序只对P、I、D三个参数由变量进行输值,变量可在pid程序运行中实时修改,如果大家还需要某些参数实时修改,方法相同:

       (* cyclic program *)

PIDpara.enable       = PIDpara.enable         

PIDpara FUB LCPIDpara()    

PIDpara.Tv                  = D_Ctrl   ;积分(越小作用越大),为0时第I part和jolt-free切换不起作用且不需要任何计算时间。

PIDpara.Kp                  = P_Ctrl    ;比例

PIDpara.Tn                  = I_Ctrll    ;微分

二、必须调用一个LCCounter()功能块,作为pid的basetime输入。

三、使用LCPID功能块,使用方法如下:

初始化程序

       (* init program *)

LCCount FUB LCCounter()

PID.out_mode= LCPID_OUT_MODE_MAN      ;控制器运行模式,此处默认为手动模式,LCPID_OUT_MODE_AUTO: 为自动运行

PID.Y_man=PID.Y_man       ;自动切换到手动模式时,无扰动的手动输出值

PID.hold_I=0             ;PID.hold_I=1  时,积分项不起作用,保持原值(一般不用)

PID.enable      = 1

PID FUB LCPID()

 

循环程序如下

 

LCCount FUB LCCounter()         (* Get time from system*)

PID.basetime = LCCount.ms100cnt    ;设定计算频率(100msPID进行计算一次,时间一般与实际值采集周期相同)

PID.W                  = setTense             ;INT,设定值

PID.X                   = actTense             ;INT,实际值(* see to task:sensor *)

PID FUB LCPID()

 

PID.enable= 1           ;使能

PID.ident= PIDpara.ident       ;ident来自上面对应LCDPIDpara()的ident.

PID.W= setTense         ;INT,设定值

PID.X= actTense         ;INT,实际值(* see to task:sensor *)

PID.Y_man= 15000    ;手动时输入值

PID.Y_fbk=        ;为内部模式时不用

PID.hold_I=        ;一般不用

If  y=1  then          ;此处为pid手自动切换。

PID_0.out_mode= LCPID_OUT_MODE_MAN

else

PID_0.out_mode= LCPID_OUT_MODE_AUTO

endif

PID FUB LCPID()                                  ;调用PID功能块

 

部分C语言写的温度PID 程序

文档

C语言编写PID温度控制程序

(*initprogram*)PIDpara.enable=1;使能端PIDpara.enter=1;当enter为1时,检查参数并转换为内部显示。;当enter为0时,忽略输入参数的改变并存储计算时间。PIDpara.Y_max=32767;PID输出最大值(0~~32767)PIDpara.Y_min=0;PID输出最小值(0~~32767)PIDpara.dY_max=10.0;输出最大容许变化量,操作变量斜坡最大值。为0时ramp不起作用,不需计算时间PIDpara.Kp=1.0;比例
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top