请西门子技术的朋友帮忙分析一下这个程序
(1)、关于PID执行OB100、OB35、FB100 的功能?我理解OB100暖启动,OB35 循环中断,FB100主程序。
(2)、请问DB101、DB100的被调用关系?
(3)、请问PID在执行中,OB100、OB35、FB100在程序中的作用,程序执行顺序,。
(4)、请问在FB100中由M001、到M003、M005的作用。
(5)、请问在FB100中的M005中Hvar := rCycle /(2.0*rTmLag1)。Hvar := ((INV+DISV)*GAIN - sRueck1) * Hvar/(1.0+Hvar)。
OutvNew := sRueck1 + Hvar。 sRueck1 := sRueck1 + 2.0*Hvar。
这四个式子中的变量关系代表什么。在PID中又起到什麽作用。
(6)、请问我在PLCSIM中模拟实验,OUTV输出总为零。我不知道我的错误在那。
非常感谢朋友的帮助,刚接触PID调节 ,看了原理图和各SFB41参数的说明,说的很清楚也看似明白了,可到实际程序就看不懂,
尤其是第4、5问题,更是看了多日不懂。今特整理此程序,真诚的希望朋友们能系统地讲讲这个程序,您的点滴指点对我是非
常大的帮助。
(a)1、程序来源CPU31X技术实例。廖常初主编S7-300PLC应用技术在闭环控制一章对此程序有简要说明。
(a)2、PROC-C是一个3阶环节,比例增益是GAIN,3个串联的惯性环节的时间常数分别为TM-LAG1--TM-LAG3。
0B35 "Cyclic Interrupt"
network1 "Cyclic Interrupt"
CALL "CONT_C" , "DI_CONT_C"
COM_RST :=
MAN_ON :=
PVPER_ON:=
P_SEL :=
I_SEL :=
INT_HOLD:=
I_ITL_ON:=
D_SEL :=
CYCLE :=T#100MS
SP_INT :="DI_CONT_C".SP_INT
PV_IN :=
PV_PER :=
MAN :=
GAIN :=
TI :=
TD :=
TM_LAG :=
DEADB_W :=
LMN_HLM :=
LMN_LLM :=
PV_FAC :=
PV_OFF :=
LMN_FAC :=
LMN_OFF :=
I_ITLVAL:=
DISV :=
LMN :=
LMN_PER :=
QLMN_HLM:=
QLMN_LLM:=
LMN_P :=
LMN_I :=
LMN_D :=
PV :=
ER :=
NOP 0
network2 Control system simulation
CALL "PROC_C" , "DI_PROC_C"
INV :="DI_CONT_C".LMN
DISV :=
GAIN :=
TM_LAG1:=
TM_LAG2:=
TM_LAG3:=
COM_RST:=
CYCLE :=T#100MS
OUTV :="DI_CONT_C".PV_IN
oB100 "Complete Restart"
network1 Continuous controller
CALL "CONT_C" , "DI_CONT_C"
COM_RST :=TRUE
MAN_ON :=
PVPER_ON:=
P_SEL :=
I_SEL :=
INT_HOLD:=
I_ITL_ON:=
D_SEL :=
CYCLE :=T#100MS
SP_INT :=
PV_IN :=
PV_PER :=
MAN :=
GAIN :=
TI :=
TD :=
TM_LAG :=
DEADB_W :=
LMN_HLM :=
LMN_LLM :=
PV_FAC :=
PV_OFF :=
LMN_FAC :=
LMN_OFF :=
I_ITLVAL:=
DISV :=
LMN :=
LMN_PER :=
QLMN_HLM:=
QLMN_LLM:=
LMN_P :=
LMN_I :=
LMN_D :=
PV :=
ER :=
network2 Control system simulation
CALL "PROC_C" , "DI_PROC_C"
INV :="DI_CONT_C".LMN
DISV :=
GAIN :=
TM_LAG1:=
TM_LAG2:=
TM_LAG3:=
COM_RST:=TRUE
CYCLE :=T#100MS
OUTV :="DI_CONT_C".PV_IN
network3 Reset initialization bits
CLR
= "DI_CONT_C".COM_RST
= "DI_PROC_C".COM_RST
FB100:process for continious PID control
SET
SAVE
= L 24.1
A #COM_RST
JCN M001
L #INV //complete restart routine
T #OUTV //write output data
T #sRueck1 //write static data
T #sRueck2
T #sRueck3
JU M002
M001: L #CYCLE //cycle mode routine
DTR //transform data type
T #rCycle
L #TM_LAG1
DTR
T #rTmLag1
L #TM_LAG2
DTR
T #rTmLag2
L #TM_LAG3
DTR
T #rTmLag3
L #rCycle //limit TM_LAG1
L 5.000000e-001
*R
L #rTmLag1
TAK
JCN M003
L #rCycle //limit TM_LAG2
L 5.000000e-001
*R
T #rTmLag1
M003: L #rCycle
L 5.000000e-001
*R
L #rTmLag2
TAK
JCN M004
L #rCycle
L 5.000000e-001
*R
T #rTmLag2
M004: L #rCycle //limit TM_LAG3
L 5.000000e-001
*R
L #rTmLag3
TAK
JCN M005
L #rCycle
L 5.000000e-001
*R
T #rTmLag3
M005: L 2.000000e+000 //1. lag first order algorithm
L #rTmLag1 //Hvar := rCycle /(2.0*rTmLag1)
*R
L #rCycle
TAK
/R
T #Hvar
L #INV //Hvar := ((INV+DISV)*GAIN - sRueck1) *Hvar/(1.0+Hvar)
L #DISV
+R
L #GAIN
*R
L #sRueck1
-R
L #Hvar
*R
L 1.000000e+000
TAK
T LD 26
TAK
L #Hvar
+R
L LD 26
TAK
/R
T #Hvar
L #sRueck1 //OutvNew := sRueck1 + Hvar
+R
T #OutvNew
L 2.000000e+000 //sRueck1 := sRueck1 + 2.0*Hvar
L #Hvar
*R
L #sRueck1
+R
T #sRueck1
L 2.000000e+000 //2. first lag order algorithm
L #rTmLag2
*R
L #rCycle
TAK
/R
T #Hvar
L #OutvNew
L #sRueck2
-R
L #Hvar
*R
L 1.000000e+000
TAK
T LD 26
TAK
L #Hvar
+R
L LD 26
TAK
/R
T #Hvar
L #sRueck2
+R
T #OutvNew
L 2.000000e+000
L #Hvar
*R
L #sRueck2
+R
T #sRueck2
L 2.000000e+000 //3. lag first order algorithm
L #rTmLag3
*R
L #rCycle
TAK
/R
T #Hvar
L #OutvNew
L #sRueck3
-R
L #Hvar
*R
L 1.000000e+000
TAK
T LD 26
TAK
L #Hvar
+R
L LD 26
TAK
/R
T #Hvar
L #sRueck3
+R
T #OutvNew
L 2.000000e+000
L #Hvar
*R
L #sRueck3
+R
T #sRueck3
L #OutvNew //write output
T #OUTV
M002: CLR
A L 24.1
SAVE
BE