View difference between Paste ID: ZtwLWfcG and dTr1rPu8
SHOW: | | - or go back to the newest paste.
1
FUNCTION_BLOCK "fb_D-Regler_V5.6.5"
2
TITLE = D-Regler
3-
{ S7_Optimized_Access := 'TRUE' }
3+
4
   VAR_INPUT 
5
      ir_SollstwertDiverenz { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real;   // SollstwertDiverenz
6
      ir_DifferenzialVerstärkung { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real := 1.0e+0;   // Differenzial-Verstärkung
7
      itime_HaltezeitDifferezia { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Time;   // Differenzial-Haltezeit
8
      ib_Reset { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool := FALSE;   // Reset
9
   END_VAR
10
11
   VAR_OUTPUT 
12
      or_Reglerantwort { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real;   // Reglerantwort
13
   END_VAR
14
15
   VAR 
16
      Zwischenwert { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real;
17
      VergangeneZeit { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real;   // in s
18
      StaticZyklusZeit_Aux { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : LReal;
19
   END_VAR
20
21
   VAR_TEMP 
22
      Haltezeit : Real;   // in s
23
   END_VAR
24
25
26
BEGIN
27
	// read system Time 
28
	#VergangeneZeit := LREAL_TO_REAL(RUNTIME(#StaticZyklusZeit_Aux));
29
	// calc derivative time
30
	#Haltezeit := DINT_TO_REAL(TIME_TO_DINT(#itime_HaltezeitDifferezia)) * 0.001;
31
	// Startup initialisation 
32
	IF #itime_HaltezeitDifferezia = t#0s  OR #ib_Reset THEN
33
	   #Zwischenwert := 0;
34
	   #or_Reglerantwort := 0;
35
	ELSE
36
	    //only do differential calc if time makes sens
37
	    IF #VergangeneZeit > 0 AND #VergangeneZeit < 0.1 THEN
38
	        #Zwischenwert += (#ir_SollstwertDiverenz - #Zwischenwert) * #VergangeneZeit / #Haltezeit;
39
	    END_IF;
40
	    #or_Reglerantwort := (#ir_SollstwertDiverenz - #Zwischenwert) * #ir_DifferenzialVerstärkung * -1;
41
	END_IF;
42
END_FUNCTION_BLOCK
43
44
FUNCTION_BLOCK "fb_PI-Regler_V5.6.5"
45
VERSION : 0.1
46-
{ S7_Optimized_Access := 'TRUE' }
46+
47
      ir_Istwert { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real;   // Istwert
48
      ir_Sollwert { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real;   // Sollwert
49
      ir_ProportionalVerstärkung { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real := 20.0;   // Proportional-Verstärkung
50
      ir_IntegralVerstärkung { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real := 5.0;   // Integral-Verstärkung
51
      ir_UnteresLimit { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real := 0.0;   // unteres Limit
52
      ir_OberesLimit { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real := 100.0;   // oberes Limit
53
      ib_Reset { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool := FALSE;   // Reset
54
   END_VAR
55
56
   VAR_OUTPUT 
57
      or_Reglerantwort { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real;   // Regler Ausgang
58
   END_VAR
59
60
   VAR 
61
      StaticZyklusZeit_Aux { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : LReal;
62
      Reglerantwort_Integral { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real;
63
      Reglerantwort_Proportional { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real;
64
      VergangeneZeit { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real;   // in s
65
   END_VAR
66
67
68
BEGIN
69
	//read elpsed Time in s since last Time*)
70
	#VergangeneZeit := LREAL_TO_REAL(RUNTIME(#StaticZyklusZeit_Aux));
71
	//initialize at power_up
72
	IF #ib_Reset THEN
73
	    #Reglerantwort_Integral := 0.0;
74
	    #or_Reglerantwort := 0.0;
75
	ELSE
76
	     // calculate proportional part 
77
	     #Reglerantwort_Proportional := #ir_ProportionalVerstärkung * (#ir_Sollwert - #ir_Istwert);
78
	     //run integrator only IF Time makes sens 
79
	     IF #VergangeneZeit > 0 AND #VergangeneZeit < 0.1 THEN
80
	         #Reglerantwort_Integral += #ir_IntegralVerstärkung * (#ir_Sollwert - #ir_Istwert) * #VergangeneZeit;
81
	     END_IF;
82
	     // calculate output  
83
	     #or_Reglerantwort := #Reglerantwort_Proportional + #Reglerantwort_Integral;
84
	     // check output FOR limits
85
	     IF #or_Reglerantwort >= #ir_OberesLimit THEN
86
	         #or_Reglerantwort := #ir_OberesLimit;
87
	         #Reglerantwort_Integral := #ir_OberesLimit - #Reglerantwort_Proportional;
88
	     ELSIF #or_Reglerantwort <= #ir_UnteresLimit THEN
89
	         #or_Reglerantwort := #ir_UnteresLimit;
90
	         #Reglerantwort_Integral := #ir_UnteresLimit - #Reglerantwort_Proportional;
91
	        END_IF;
92
	    END_IF;
93
	    
94
	    
95
END_FUNCTION_BLOCK
96
97
FUNCTION_BLOCK "fb_PID-Regler_V5.6.5"
98
VERSION : 0.1
99
   VAR_INPUT 
100-
{ S7_Optimized_Access := 'TRUE' }
100+
101
      ir_Sollwert { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real;   // Sollwert
102
      ir_ProportionalVerstärkung { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real := 20.0;   // Proportional-Verstärkung
103
      ir_IntegralVerstärkung { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real := 5.0;   // Integral-Verstärkung
104
      ir_DifferenzialVerstärkung { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real := 1.0;   // Differenzial-Verstärkung
105
      itime_HaltezeitDifferezial { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Time;   // Differenzial-Haltezeit
106
      ir_UnteresLimit { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real := 0.0;   // unteres Limit
107
      ir_OberesLimit { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real := 100.0;   // oberes Limit
108
      ib_Reset { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool := FALSE;   // Reset
109
   END_VAR
110
111
   VAR_OUTPUT 
112
      or_Reglerantwort { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real;   // Regler Ausgang
113
   END_VAR
114
115
   VAR 
116
      "idb_PI-Regler" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : "fb_PI-Regler_V5.6.5";
117
      "idb_D-Regler" { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : "fb_D-Regler_V5.6.5";
118
      Reglerantwort_Integral { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real;
119
      Reglerantwort_Differenzial { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Real;
120
   END_VAR
121
122
123
BEGIN
124
	#"idb_PI-Regler"(ir_Istwert := #ir_Istwert,
125
	                 ir_Sollwert := #ir_Sollwert,
126
	                 ir_ProportionalVerstärkung := #ir_ProportionalVerstärkung,
127
	                 ir_IntegralVerstärkung := #ir_IntegralVerstärkung,
128
	                 ir_UnteresLimit := #ir_UnteresLimit,
129
	                 ir_OberesLimit := #ir_OberesLimit,
130
	                 ib_Reset := #ib_Reset,
131
	                 or_Reglerantwort => #Reglerantwort_Integral);
132
	#"idb_D-Regler"(ir_SollstwertDiverenz:=#ir_Sollwert - #ir_Istwert,
133
	                  ir_DifferenzialVerstärkung:=#ir_DifferenzialVerstärkung,
134
	                  itime_HaltezeitDifferezia:=#itime_HaltezeitDifferezial,
135
	                  ib_Reset:=#ib_Reset,
136
	                  or_Reglerantwort=>#Reglerantwort_Differenzial);
137
	#or_Reglerantwort := LIMIT(MN:= #ir_UnteresLimit,
138
	                           IN:=#Reglerantwort_Integral + #Reglerantwort_Differenzial,
139
	                           MX:=#ir_OberesLimit);
140
END_FUNCTION_BLOCK