Advertisement
Guest User

PID-Regler PID Regler Siemens Tia Portal V14.1 in SCL Source

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