pid 源程序(s7-300/400) 点击:748 | 回复:0



gongkongedit

    
  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2004-02-17 15:44:00
楼主
大家好: 好多人要pid程序,我不能一一答复,现把源程序发在论坛上 希望大家能把好的程序共享. 也希望能交一些工控朋友.本人qq117084743 //*************************************** // //以下为增量式pid源程序,增量式pid源程序的基础上,// //可以进行多种改造,变成一些新型pid功能 // //*************************************** // FUNCTION_BLOCK FB 40 TITLE =PID // KNOW_HOW_PROTECT AUTHOR: XGZ FAMILY: AUTOCON NAME: PID_CONTROLLER VERSION: 1.0 VAR_INPUT PV : WORD ; //整形PV值输入(0~27648) PV_PER : BOOL ; END_VAR VAR_OUTPUT MVINT : WORD ;//整形MV值输出(0~27648) END_VAR VAR_IN_OUT PVIN : REAL ; //浮点型PV值输入(0~100.0) SVOUT : REAL ; //外部设定值输入(0~100.0) MV : REAL ; //PID运算输出值(0~100.0) END_VAR VAR PVH : REAL : =90.0 ;//测量值高限报警 PVL : REAL : =10.0 ;// 测量值低限报警 SVH : REAL : =110.0 ;//设定值高限幅 SVL : REAL : =-10.0 ; //设定值低限幅 MVH : REAL : =103.0 ; //输出值高限幅 MVL : REAL : =-3.0 ; //输出值低限幅 TS : TIME : =T#200MS; //运算采样时间 SVIN : REAL ;//内部设定值输入 PVSUM : REAL ;//PV累计值 MANON : BOOL : =TRUE; //手自动开关 CASON : BOOL ;//串级开关 PVHO : BOOL ;//测量值高限报警 PVLO : BOOL ; //测量值低限报警 SVHO : BOOL ; //设定值高限幅报警 SVLO : BOOL ; //设定值低限幅报警 MVHO : BOOL ; //输出值高限幅报警 MVLO : BOOL ; //输出值低限幅报警 DEAD_EN : REAL : =0.0 ; //报警死区值 DEAD_ALARM : REAL : =0.2 ; //报警死区值 DEAD_SUM : REAL : =0.2 ; //累积小信号切除值 KP : REAL : =2.0 ;//增益系数 TI : TIME : =T#30S ;//积分时间 TD : TIME : =T#10S ;//微分时间 BASET : TIME ;//采样基准时间 PVN : REAL ;//当前PV值 PVN_1 : REAL ;//前一周期pv采样值 PVN_2 : REAL ; //前两个周期pv采样值 DPVN : REAL ;//pv值变化量 DPVN_1 : REAL ;//前一周期pv变化量 STEP : BYTE ; END_VAR VAR_TEMP DUKPN : REAL ;//比例增量 DUIN : REAL ;//积分增量 DUDN : REAL ;//微分增量 DUN : REAL ;//增量值 EN : REAL ;//误差 TP1 : DWORD ; TP2 : WORD ; END_VAR BEGIN L #STEP; JL LIST; JU STP0; LIST: JU STP1; STP0: NOP 0; CALL "TIME_TCK" ; RET_VAL:=#BASET ; L "SYS_DB".ttime; T #BASET; L 1; T #STEP; JU COM; STP1: NOP 0; L "SYS_DB".ttime; L #BASET; -D; T #TP1; L L#0; <D; JC REP; //修正 JU A03; REP: NOP 0; //修正程序 L #TP1; L L#2147483647; +D; T #TP1; A03: L #TP1; L TS; >=D; JC A04; JU END; A04: NOP 0;//采样时间到,运行累积、PID等运算 L PVIN ; L DEAD_SUM ; <=R ; JC CLR ; L PVIN ; T TP2 ; JU A05 ; CLR: L 0.0 ; T TP2 ; A05: L #TP1; DTR; L #TP2; *R; L 3.600000e+006; /R; L #PVSUM; +R; T #PVSUM;//运行累积运算,并有小信号切除功能 //***************************************************************// L PVN_1 ; T PVN_2 ; L PVN ; T PVN_1 ; L PVIN ; T PVN ;//往后推一周期 A MANON; JC MAN; L SVIN ; L PVN ; -R ; T EN ;//En=SV(n)-PV(n) L PVN_1 ; L PVN ; -R ; T DPVN ;//△PV(n)= PV(n-1)- PV(n) L PVN_2 ; L PVN_1 ; -R ; T DPVN_1 ; //△PV(n-1)= PV(n-2)- PV(n-1) L KP ; L DPVN ; *R ; T DUKPN ;// △Ukp=Kp*△PV(n) L TP1 ; DTR ; L TI ; DTR ; /R ; L KP ; *R ; L EN ; *R ; T DUIN ; // △Ui=(Kp*Ts/Ti)*E(n) L DPVN ; L DPVN_1 ; -R ; L TD ; DTR ; *R ; L TP1 ; DTR ; /R ; L KP ; *R ; T DUDN ;//△Ud=Kp*Td/Ts*(△PV(n)- △PV(n-1)) L DUKPN ; L DUIN ; +R ; L DUDN ; +R ; T DUN;// △U(n)= △Ukp+△Ui+△Ud L EN ; ABS; L DEAD_EN; <R; JC COMM; L MV ; L DUN ; +R ; T MV ; //MV=MV+△U(n) JU COMM ; MAN: L #PVIN ; T #SVIN ; JU COMM ; COMM: NOP 0 ; //****************************************************************// L 0; T #STEP; COM: NOP 0; L #PVIN; L


热门招聘
相关主题

官方公众号

智造工程师