Also ich hab mal noch weiter rumprobiert es liegt wirklich an der Sprungadresse. In TIA lautet die Sprungadress "LABEL_xy" und in Step 7 "_xy". Als ich die Sprungadresse nur im FB geändert hab, hats nicht funktioniert, aber als ich es in der Quelle geändert hab und neu übersetzt, funktionierts. Außer bei dem Beispiel-Netzwerk natürlich :icon_rolleyes:! Also bitte weitere Vorschläge und Tipps. Die ganzen Netzwerke aufzudröseln ist zu viel Arbeit!
FUNCTION_BLOCK "Sperrdampfdruckregler"
TITLE = Sperrdampfdruckregler
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
VAR
Befehl_AUS : Bool;
Befehl_HAND : Bool;
Befehl_AUTO : Bool;
Freigabe : Bool;
SP_INT : Real;
MAN : Real;
GAIN : Real;
TI : Time;
TD : Time;
TM_LAG : Time;
REGLER_AUS : Bool;
REGLER_HAND : Bool;
REGLER_AUTO : Bool;
LMN : Real;
QLMN_HLM : Bool;
QLMN_LLM : Bool;
LMN_P : Real;
LMN_I : Real;
LMN_D : Real;
PV : Real;
ER : Real;
"RET__VAL" : Word;
P_Flanke_1 : Bool;
P_Flanke_2 : Bool;
P_Flanke_3 : Bool;
SW_OG : Real;
SW_UG : Real;
Aktuelle_Sollwert : Real; // Aktuelle_Sollwert
REAL_02 : Real;
REAL_03 : Real;
Stellwert : Real;
END_VAR
VAR_TEMP
Dummy : Bool;
END_VAR
BEGIN
NETWORK
TITLE = Freigabe
U "B0MAW30CP010_P_SpDa_hi_RV".Fail_ALARM_OUT;
NOT;
= #Freigabe;
NETWORK
TITLE = AUS / HAND / AUTO
U(;
U #Befehl_HAND;
S #REGLER_HAND;
U(;
O #Befehl_AUS;
O #Befehl_AUTO;
O "B0MAW30CP010_P_SpDa_hi_RV".Fail_ALARM_OUT;
O "B0MAY40EC010".XS52.bit_0_CMD_TO_TIA_Programm;
);
R #REGLER_HAND;
U #REGLER_HAND;
);
NOT;
U(;
U(;
U(;
O #Befehl_AUTO;
O "B0MAY40EC010".XS03.bit_0_CMD_TO_TIA_Programm;
);
S #REGLER_AUTO;
U(;
O #Befehl_AUS;
O #Befehl_HAND;
O "B0MAW30CP010_P_SpDa_hi_RV".Fail_ALARM_OUT;
);
R #REGLER_AUTO;
U #REGLER_AUTO;
);
NOT;
);
= %L1.0;
U %L1.0;
BLD 102;
= #REGLER_AUS;
UN %L1.0;
SPBNB Label_0;
L 100.0;
T "Sperrdampfdruckregler_IDB".LMN_HLM;
Label_0: NOP 0;
NETWORK
TITLE = Rampe Regler AUS
O(;
U(;
U #REGLER_AUS;
BLD 100;
FP #P_Flanke_3;
);
SPBNB Label_1;
L #LMN;
T "Sperrdampfdruckregler_IDB".LMN_HLM;
SET;
SAVE;
CLR;
Label_1: U BIE;
);
O(;
U #REGLER_AUS;
SPBNB Label_2;
L "Sperrdampfdruckregler_IDB".LMN_HLM;
L 0.1;
-R;
T "Sperrdampfdruckregler_IDB".LMN_HLM;
UN OV;
SAVE;
CLR;
Label_2: U BIE;
);
O(;
U(;
L "Sperrdampfdruckregler_IDB".LMN_HLM;
L 0.0;
<R;
);
SPBNB Label_3;
L 0.0;
T "Sperrdampfdruckregler_IDB".LMN_HLM;
SET;
SAVE;
CLR;
Label_3: U BIE;
);
= #Dummy;
NETWORK
TITLE = MAN auf NUL initialisieren Sollwert
U #REGLER_AUTO;
BLD 100;
FP #P_Flanke_2;
= %L1.0;
U(;
O(;
U #REGLER_AUS;
BLD 100;
FP #P_Flanke_1;
);
O %L1.0;
);
SPBNB Label_4;
L 0.0;
T #MAN;
Label_4: NOP 0;
U %L1.0;
SPBNB Label_5;
L 30.0;
T #SP_INT;
Label_5: NOP 0;
NETWORK
TITLE = Sollwert über Rampe führen
O(;
U(;
L #SP_INT;
L #Aktuelle_Sollwert;
>R;
);
SPBNB Label_6;
L #Aktuelle_Sollwert;
L 0.1;
+R;
T #Aktuelle_Sollwert;
UN OV;
SAVE;
CLR;
Label_6: U BIE;
);
O(;
U(;
L #SP_INT;
L #Aktuelle_Sollwert;
<R;
);
SPBNB Label_7;
L #Aktuelle_Sollwert;
L 0.1;
-R;
T #Aktuelle_Sollwert;
UN OV;
SAVE;
CLR;
Label_7: U BIE;
);
O(;
L #SP_INT;
L 0.1;
+R;
T #REAL_02;
UN OV;
SAVE;
CLR;
U BIE;
);
O(;
L #SP_INT;
L 0.1;
-R;
T #REAL_03;
UN OV;
SAVE;
CLR;
U BIE;
);
O(;
U(;
L #Aktuelle_Sollwert;
L #REAL_03;
>=R;
);
U(;
L #Aktuelle_Sollwert;
L #REAL_02;
<=R;
);
SPBNB Label_8;
L #SP_INT;
T #Aktuelle_Sollwert;
SET;
SAVE;
CLR;
Label_8: U BIE;
);
O(;
U #REGLER_AUS;
SPBNB Label_9;
L "B0MAW30CP010_P_SpDa_hi_RV".ACT_VAL_OUT;
T #Aktuelle_Sollwert;
SET;
SAVE;
CLR;
Label_9: U BIE;
);
O(;
U #REGLER_AUS;
SPBNB Label_10;
L "B0MAW30CP010_P_SpDa_hi_RV".ACT_VAL_OUT;
T #SP_INT;
SET;
SAVE;
CLR;
Label_10: U BIE;
);
= #Dummy;
NETWORK
TITLE = Ober und Untergrenze Sollwertvorgabe
L 50.0;
T #SW_OG;
L -10.0;
T #SW_UG;
NETWORK
TITLE = Reglerbaustein
U "Low_Merker";
= %L1.0;
BLD 103;
U #REGLER_HAND;
= %L1.1;
BLD 103;
U "Low_Merker";
= %L1.2;
BLD 103;
U "High_Merker";
= %L1.3;
BLD 103;
U "High_Merker";
= %L1.4;
BLD 103;
U "Low_Merker";
= %L1.5;
BLD 103;
U "Low_Merker";
= %L1.6;
BLD 103;
U "High_Merker";
= %L1.7;
BLD 103;
CALL CONT_C, "Sperrdampfdruckregler_IDB"
( COM_RST := %L1.0 ,
MAN_ON := %L1.1 ,
PVPER_ON := %L1.2 ,
P_SEL := %L1.3 ,
I_SEL := %L1.4 ,
INT_HOLD := %L1.5 ,
I_ITL_ON := %L1.6 ,
D_SEL := %L1.7 ,
CYCLE := t#100ms ,
SP_INT := #SP_INT ,
PV_IN := "B0MAW30CP010_P_SpDa_hi_RV".ACT_VAL_OUT ,
MAN := #MAN ,
GAIN := #GAIN ,
TI := #TI ,
TD := #TD ,
TM_LAG := t#2s ,
LMN_LLM := 0.0 ,
PV_FAC := 1.0 ,
PV_OFF := 0.0 ,
LMN_FAC := 1.0 ,
LMN_OFF := 0.0 ,
I_ITLVAL := 0.0 ,
DISV := 0.0 ,
LMN := #LMN ,
LMN_P := #LMN_P ,
LMN_I := #LMN_I ,
LMN_D := #LMN_D ,
PV := #PV ,
ER := #ER
);
NOP 0;
NETWORK
TITLE = Ausgabe
U "High_Merker";
= %L1.0;
U(;
U %L1.0;
U #REGLER_AUS;
SPBNB Label_11;
L "Sperrdampfdruckregler_IDB".LMN_HLM;
T #Stellwert;
SET;
SAVE;
CLR;
Label_11: U BIE;
);
NOT;
SPBNB Label_12;
L "Sperrdampfdruckregler_IDB".LMN;
T #Stellwert;
Label_12: NOP 0;
U "Low_Merker";
= %L1.1;
BLD 103;
U %L1.0;
SPBNB Label_13;
CALL UNSCALE
( IN := #Stellwert ,
HI_LIM := 0.0 ,
LO_LIM := 100.0 ,
BIPOLAR := %L1.1 ,
RET_VAL := #"RET__VAL" ,
OUT := "PAW530 IOP78A1 B0MAW10DU010 Setpoint I/P converter control valve HP sealing steam"
);
Label_13: NOP 0;
U %L1.0;
U(;
O #REGLER_HAND;
O #REGLER_AUTO;
);
= "A20.5 IOP 80A1 B0MAW10DU010 Release I/P converter control valve HP sealing steam";
U %L1.0;
U #REGLER_AUTO;
= "SAT_Binary -> ZLT".B0MAW10DP010_01;
U %L1.0;
U #REGLER_AUS;
= "SAT_Binary -> ZLT".B0MAW10DP010_02;
NETWORK
TITLE = Rücksetzen Befehle
U "High_Merker";
= %L1.0;
U %L1.0;
U #Befehl_HAND;
R #Befehl_HAND;
U %L1.0;
U #Befehl_AUTO;
R #Befehl_AUTO;
U %L1.0;
U #Befehl_AUS;
R #Befehl_AUS;
END_FUNCTION_BLOCK
FUNCTION_BLOCK "Sperrdampfdruckregler"
TITLE = Sperrdampfdruckregler
AUTHOR : 'AP'
VERSION : 0.1
VAR
Befehl_AUS : Bool;
Befehl_HAND : Bool;
Befehl_AUTO : Bool;
Freigabe : Bool;
SP_INT : Real;
MAN : Real;
GAIN : Real;
TI : Time;
TD : Time;
TM_LAG : Time;
REGLER_AUS : Bool;
REGLER_HAND : Bool;
REGLER_AUTO : Bool;
LMN : Real;
QLMN_HLM : Bool;
QLMN_LLM : Bool;
LMN_P : Real;
LMN_I : Real;
LMN_D : Real;
PV : Real;
ER : Real;
RET_VALU : Word;
P_Flanke_1 : Bool;
P_Flanke_2 : Bool;
P_Flanke_3 : Bool;
SW_OG : Real;
SW_UG : Real;
Aktuelle_Sollwert : Real; // Aktuelle_Sollwert
REAL_02 : Real;
REAL_03 : Real;
Stellwert : Real;
END_VAR
VAR_TEMP
Dummy : Bool;
Dummy_Sat1 : Bool;
Dummy_Sat2 : Bool;
Dummy_XS52 : Bool;
Dummy_P_SpDa_Hi_Out : Bool;
Dummy_XS03 : Bool;
Dummy_IDB_HLM : Real;
Dummy_P_SpDa_hi_AV : Real;
Dummy_IDB_LMN : Real;
Dummy_SP_HP_SealSteam : int;
Dummy_Rel_HP_SealSteam : Bool;
END_VAR
BEGIN
NETWORK
TITLE = Freigabe
U Dummy_P_SpDa_Hi_Out;
NOT;
= Freigabe;
NETWORK
TITLE = AUS / HAND / AUTO
U(;
U Befehl_HAND;
S REGLER_HAND;
U(;
O Befehl_AUS;
O Befehl_AUTO;
O Dummy_P_SpDa_Hi_Out;
O Dummy_XS52;
);
R REGLER_HAND;
U REGLER_HAND;
);
NOT;
U(;
U(;
U(;
O Befehl_AUTO;
O Dummy_XS03;
);
S REGLER_AUTO;
U(;
O Befehl_AUS;
O Befehl_HAND;
O Dummy_P_SpDa_Hi_Out;
);
R REGLER_AUTO;
U REGLER_AUTO;
);
NOT;
);
= %L1.0;
U %L1.0;
BLD 102;
= REGLER_AUS;
UN %L1.0;
SPBNB _001;
L 100.0;
T Dummy_IDB_HLM ;
_001: NOP 0;
NETWORK
TITLE = Rampe Regler AUS
O(;
U(;
U REGLER_AUS;
BLD 100;
FP P_Flanke_3;
);
SPBNB _002;
L LMN;
T Dummy_IDB_HLM ;
SET;
SAVE;
CLR;
_002: U BIE;
);
O(;
U REGLER_AUS;
SPBNB _003;
L Dummy_IDB_HLM ;
L 0.1;
-R;
T Dummy_IDB_HLM ;
UN OV;
SAVE;
CLR;
_003: U BIE;
);
O(;
U(;
L Dummy_IDB_HLM ;
L 0.0;
<R;
);
SPBNB _004;
L 0.0;
T Dummy_IDB_HLM ;
SET;
SAVE;
CLR;
_004: U BIE;
);
= Dummy;
NETWORK
TITLE = MAN auf NUL initialisieren Sollwert
U REGLER_AUTO;
BLD 100;
FP P_Flanke_2;
= %L2.0;
U(;
O(;
U REGLER_AUS;
BLD 100;
FP P_Flanke_1;
);
O %L2.0;
);
SPBNB _005;
L 0.0;
T MAN;
_005: NOP 0;
U %L2.0;
SPBNB _006;
L 30.0;
T SP_INT;
_006: NOP 0;
NETWORK
TITLE = Sollwert über Rampe führen
O(;
U(;
L SP_INT;
L Aktuelle_Sollwert;
>R;
);
SPBNB _007;
L Aktuelle_Sollwert;
L 0.1;
+R;
T Aktuelle_Sollwert;
UN OV;
SAVE;
CLR;
_007: U BIE;
);
O(;
U(;
L SP_INT;
L Aktuelle_Sollwert;
<R;
);
SPBNB _008;
L Aktuelle_Sollwert;
L 0.1;
-R;
T Aktuelle_Sollwert;
UN OV;
SAVE;
CLR;
_008: U BIE;
);
O(;
L SP_INT;
L 0.1;
+R;
T REAL_02;
UN OV;
SAVE;
CLR;
U BIE;
);
O(;
L SP_INT;
L 0.1;
-R;
T REAL_03;
UN OV;
SAVE;
CLR;
U BIE;
);
O(;
U(;
L Aktuelle_Sollwert;
L REAL_03;
>=R;
);
U(;
L Aktuelle_Sollwert;
L REAL_02;
<=R;
);
SPBNB _009;
L SP_INT;
T Aktuelle_Sollwert;
SET;
SAVE;
CLR;
_009: U BIE;
);
O(;
U REGLER_AUS;
SPBNB _00a;
L Dummy_P_SpDa_hi_AV;
T Aktuelle_Sollwert;
SET;
SAVE;
CLR;
_00a: U BIE;
);
O(;
U REGLER_AUS;
SPBNB _00b;
L Dummy_P_SpDa_hi_AV;
T SP_INT;
SET;
SAVE;
CLR;
_00b: U BIE;
);
= Dummy;
NETWORK
TITLE = Ober und Untergrenze Sollwertvorgabe
L 50.0;
T SW_OG;
L -10.0;
T SW_UG;
NETWORK
TITLE = Reglerbaustein
U Low_Merker ;
= %L3.0;
BLD 103;
U REGLER_HAND;
= %L3.1;
BLD 103;
U Low_Merker ;
= %L3.2;
BLD 103;
U High_Merker ;
= %L3.3;
BLD 103;
U High_Merker ;
= %L3.4;
BLD 103;
U Low_Merker ;
= %L3.5;
BLD 103;
U Low_Merker ;
= %L3.6;
BLD 103;
U High_Merker ;
= %L3.7;
BLD 103;
CALL CONT_C, DB85
( COM_RST := %L3.0 ,
MAN_ON := %L3.1 ,
PVPER_ON := %L3.2 ,
P_SEL := %L3.3 ,
I_SEL := %L3.4 ,
INT_HOLD := %L3.5 ,
I_ITL_ON := %L3.6 ,
D_SEL := %L3.7 ,
CYCLE := t#100ms ,
SP_INT := SP_INT ,
PV_IN := Dummy_P_SpDa_hi_AV ,
MAN := MAN ,
GAIN := GAIN ,
TI := TI ,
TD := TD ,
TM_LAG := t#2s ,
LMN_LLM := 0.0 ,
PV_FAC := 1.0 ,
PV_OFF := 0.0 ,
LMN_FAC := 1.0 ,
LMN_OFF := 0.0 ,
I_ITLVAL := 0.0 ,
DISV := 0.0 ,
LMN := LMN ,
LMN_P := LMN_P ,
LMN_I := LMN_I ,
LMN_D := LMN_D ,
PV := PV ,
ER := ER
);
NOP 0;
NETWORK
TITLE = Ausgabe
U High_Merker ;
= %L4.0;
U(;
U %L4.0;
U REGLER_AUS;
SPBNB _00c;
L Dummy_IDB_HLM ;
T Stellwert;
SET;
SAVE;
CLR;
_00c: U BIE;
);
NOT;
SPBNB _00d;
L Dummy_IDB_LMN;
T Stellwert;
_00d: NOP 0;
U Low_Merker ;
= %L4.1;
BLD 103;
U %L4.0;
SPBNB _00e;
CALL UNSCALE
( IN := Stellwert ,
HI_LIM := 0.0 ,
LO_LIM := 100.0 ,
BIPOLAR := %L4.1 ,
RET_VAL := RET_VALU ,
OUT := Dummy_SP_HP_SealSteam
);
_00e: NOP 0;
U %L4.0;
U(;
O REGLER_HAND;
O REGLER_AUTO;
);
= Dummy_Rel_HP_SealSteam;
U %L4.0;
U REGLER_AUTO;
= Dummy_Sat1;
U %L4.0;
U REGLER_AUS;
= Dummy_Sat2;
NOP 0;
NETWORK
TITLE = Rücksetzen Befehle
U High_Merker;
= %L5.0;
U %L5.0;
U Befehl_HAND;
R Befehl_HAND;
U %L5.0;
U Befehl_AUTO;
R Befehl_AUTO;
U %L5.0;
U Befehl_AUS;
R Befehl_AUS;
NOP 0;
END_FUNCTION_BLOCK
Das größte Problemnetzwerk ist scheinbar das "Ausgabe"-Netzwerk, in diesem wird mittendrin ein SET-SAVE-CLR verwendet,
welches es in der Konstellation imho bei Step7 in Bezug auf KOP/FUP nicht gibt. (Wäre mir jedenfalls noch nie aufgefallen.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?