diff --git a/bcomp/lib/rt/src/rt_plc_bcomp.c b/bcomp/lib/rt/src/rt_plc_bcomp.c
index d8c8487e3bfdb3d056ac27357985435e1175e128..c4c7f3df07fee268aeff0814d172833b8d5157e6 100644
--- a/bcomp/lib/rt/src/rt_plc_bcomp.c
+++ b/bcomp/lib/rt/src/rt_plc_bcomp.c
@@ -240,6 +240,11 @@ void CompPID_Fo_init( pwr_sClass_CompPID_Fo  *o)
 #define DALG 8		/* Derivative part exists */
 #define DAVV 16		/* Derivative part working on control difference */
 
+#define IWUP 1		/* Windup limitation on I part */
+#define BIWUP 2		/* Windup limitation on Bias and I part */
+#define BPIWUP 4	/* Windup limitation on Bias PI part */
+#define BPIDWUP 8	/* Windup limitation on Bias and PID part (Default, old funcionality */
+
 void CompPID_Fo_exec( plc_sThread *tp,
 		      pwr_sClass_CompPID_Fo *o)
 {
@@ -252,6 +257,9 @@ void CompPID_Fo_exec( plc_sThread *tp,
   float	ut;
   float	dut;
   float kd;
+  float	absut;
+  float	gain;
+
   pwr_sClass_CompPID *co = (pwr_sClass_CompPID *) o->PlcConnectP;
 
   if ( !co)
@@ -284,104 +292,120 @@ void CompPID_Fo_exec( plc_sThread *tp,
   ddiff = ((co->PidAlg & DAVV) != 0) ?
     (co->ControlDiff - eold) / *o->ScanTime:
     (co->ProcVal - xold) / *o->ScanTime;
-  if ((co->DerGain <= 0.0) || (co->DerTime <= 0))
+  if (((co->DerGain * *o->ScanTime) >= co->DerTime) || (co->DerTime <= 0))
     co->FiltDer = ddiff;		/* No Filter */
   else {
     kd = 1.0 / (1.0 + co->DerGain * *o->ScanTime / co->DerTime);
     co->FiltDer += (ddiff - derold) * (1.0 - kd);
   }
+
+  if (co->Inverse == 0) gain = co->Gain;
+  else gain = -co->Gain;
   
   if ( co->Force ) {
     /* Force */
-    dut = co->OutVal;
-    co->OutVal = co->ForcVal;
-    co->OutChange = co->OutVal - dut;
+    co->OutChange = co->ForcVal - co->OutVal;
+    co->OutVal = co->OutWindup = co->ForcVal;
     co->EndMin = FALSE;
     co->EndMax = FALSE;
+
+    /* Adjust for bumpless transfer to auto */
+    co->PDManOffset = co->OutVal - 
+    gain * co->ControlDiff - co->BiasGain * co->Bias;  
+
+    if ((co->PidAlg & IALG) != 0) co->AbsOut = 0.0;
+    else co->AbsOut = co->OutVal;
+
+    if (co->WindupMask < BIWUP)
+      co->OutWindup -= co->BiasGain * co->Bias;
+    if (co->WindupMask < BPIWUP)
+      co->OutWindup -= gain * co->ControlDiff;
+    
+    co->AbsOut = co->OutVal - co->OutWindup;
   }
 
   else {
     /* Auto mode */
-    if ((co->PidAlg & IALG) != 0) {
-      /* Incremental algorithm */
+    
+    dut = absut = 0.0;
+    
+    if ((co->PidAlg & IALG) != 0)
+    /* Incremental algorithm */
+    {
       /* Integral-part */
       if ((*o->IntOffP == FALSE) && (co->IntTime > 0))
 	dut = co->ControlDiff * *o->ScanTime / co->IntTime;
+
+      if ((co->PidAlg & PALG) != 0) dut *= gain;
+      else gain = 0.0; /* Pure I-controller */
+
+      /* Bias */
+      if (co->WindupMask >= BIWUP) /* Windup on Bias */
+        dut += co->BiasGain * (co->Bias - bfold);
+      else absut = co->BiasGain * co->Bias;
+
+      /* P-part */
+      if (co->WindupMask >= BPIWUP) /* Windup on P */
+        dut += ((co->PidAlg & PAVV) != 0) ?
+            gain * (co->ControlDiff - eold) :
+            gain * (co->ProcVal - xold) ;
       else
-	dut = 0;
-      if ((co->PidAlg & PALG) != 0) {
-	/* Not pure I-controller */
-	/* Derivative-part */
-	if ((co->PidAlg & DALG) != 0)
-	  dut += (co->FiltDer-derold) * co->DerTime;
-	/* P-part */
-	dut += ((co->PidAlg & PAVV) != 0) ?
-	  co->ControlDiff - eold :
-	  co->ProcVal - xold ;
-	dut *= co->Gain;
+        absut += gain * co->ControlDiff;
+
+      /* Derivative-part */
+      if ((co->PidAlg & DALG) != 0) {
+        if (co->WindupMask >= BPIDWUP) /* Windup on D */
+          dut += gain * (co->FiltDer - derold) * co->DerTime;
+        else
+          absut += gain * co->FiltDer * co->DerTime;
       }
-      if (co->Inverse != 0) dut = - dut;
-      /* Bias */
-      dut += co->BiasGain * (co->Bias - bfold);
+
       /* Limit output */
-      ut = co->OutVal + dut;
-      if (co->MaxOut > co->MinOut) {
-	if (ut > co->MaxOut) {
-	  ut = co->MaxOut;
-	  co->EndMin = FALSE;
-	  co->EndMax = TRUE;
-	}
-	else if (ut < co->MinOut) {
-	  ut = co->MinOut;
-	  co->EndMin = TRUE;
-	  co->EndMax = FALSE;
-	}
-	else {
-	  if (co->EndMin && (ut >= (co->MinOut + co->EndHys)))
-	    co->EndMin = FALSE;
-	  if (co->EndMax && (ut <= (co->MaxOut - co->EndHys)))
-	    co->EndMax = FALSE;
-	}
+      co->OutWindup += dut;
+
+      if (co->OutWindup > co->MaxWindup) {
+        co->OutWindup = co->MaxWindup;
+        co->EndMax = TRUE;
+      } else if (co->OutWindup < co->MinWindup) {
+        co->OutWindup = co->MinWindup;
+        co->EndMin = TRUE;
       }
+
+      ut = co->OutWindup + absut;
+      if (ut > co->MaxOut) ut = co->MaxOut;
+      else if (ut < co->MinOut) ut = co->MinOut;
+      dut += absut - co->AbsOut;
     }
-    
-    else {
+
+    else
       /* Nonincremental algorithm */
+    {
       /* P-part */
       ut = co->ControlDiff;
       /* Derivative-part */
       if ((co->PidAlg & DALG) != 0)
 	ut += co->FiltDer * co->DerTime;
       /* Gain */
-      ut *= co->Gain;
-      if (co->Inverse != 0) ut = - ut;
-      /* Bias */
-      ut += co->BiasGain * co->Bias;
+      ut *= gain;
+
+      /* Bias and Man offset*/
+      if (co->PDAbsFlag) co->PDManOffset = 0;
+      ut += co->BiasGain * co->Bias + co->PDManOffset;
+      
       /* Limit output */
-      if (co->MaxOut > co->MinOut) {
-	if (ut > co->MaxOut) {
-	  ut = co->MaxOut;
-	  co->EndMin = FALSE;
-	  co->EndMax = TRUE;
-	}
-	else if (ut < co->MinOut) {
-	  ut = co->MinOut;
-	  co->EndMin = TRUE;
-	  co->EndMax = FALSE;
-	}
-	else {
-	  if (co->EndMin && (ut >= (co->MinOut + co->EndHys)))
-	    co->EndMin = FALSE;
-	  if (co->EndMax && (ut <= (co->MaxOut - co->EndHys)))
-	    co->EndMax = FALSE;
-	}
+      if (co->MaxOut > co->MinOut)
+      {
+        if (ut > co->MaxOut) ut = co->MaxOut;
+        else if (ut < co->MinOut) ut = co->MinOut;
       }
       dut = ut - co->OutVal;
+      absut = ut;
     }
     
     /* Output Auto */
     co->OutChange = dut;
     co->OutVal = ut;
+    co->AbsOut = absut;
   }
 
   /* Transfer outputs */
diff --git a/bcomp/wbl/bcomp/src/basecomponent.wb_load b/bcomp/wbl/bcomp/src/basecomponent.wb_load
index ae9a1ac92e2b50d09188fcf8f28d25bf74595edf..93b42a179a391822b81bd337bec05c830ee933e8 100644
--- a/bcomp/wbl/bcomp/src/basecomponent.wb_load
+++ b/bcomp/wbl/bcomp/src/basecomponent.wb_load
@@ -51117,10 +51117,9 @@ and no Auto/Man button."
         !  XSetVal.
         !*/
         Object SetVal $Attribute 7 18-MAY-2006 14:34:02.85
-          Body SysBody 18-MAY-2006 15:34:43.61
+          Body SysBody 27-MAR-2014 07:39:05.83
             Attr PgmName = "SetVal"
             Attr Size = 4
-            Attr Flags = 1040
             Attr TypeRef = "pwrs:Type-$Float32"
           EndBody
         EndObject
@@ -51288,99 +51287,100 @@ and no Auto/Man button."
           EndBody
         EndObject
         !/**
-        !  The operator's authorities to change SetVal.
-        !  
-        !    0   -- Changes not allowed.
-        !    = 0 -- Changes allowed.
-        !*/
-        Object AccSet $Attribute 18 18-MAY-2006 14:35:28.87
-          Body SysBody 18-MAY-2006 14:39:48.69
-            Attr PgmName = "AccSet"
-            Attr Size = 4
-            Attr TypeRef = "pwrs:Type-$Int32"
-          EndBody
-        EndObject
-        !/**
-        !  The choice of the operator of SetVal is checked against
-        !  the interval { MinSet, MaxSet}. The value may be
-        !  changed in the control modes MANUAL and AUTO from the
-        !  display of the Mode object.
-        !*/
-        Object MinSet $Attribute 19 18-MAY-2006 14:35:33.96
-          Body SysBody 18-MAY-2006 14:39:55.12
-            Attr PgmName = "MinSet"
-            Attr Size = 4
-            Attr TypeRef = "pwrs:Type-$Float32"
-          EndBody
-        EndObject
-        Object MaxSet $Attribute 20 18-MAY-2006 14:35:37.63
-          Body SysBody 18-MAY-2006 14:39:58.39
-            Attr PgmName = "MaxSet"
-            Attr Size = 4
-            Attr TypeRef = "pwrs:Type-$Float32"
-          EndBody
-        EndObject
-        !/**
         !  The lower respectively upper limits in the bar graphs
         !  at presentation of process and set point values in the
         !  Mode object display. The values may be changed in the
         !  more info form of the Mode object.
         !*/
-        Object SetMaxShow $Attribute 21 18-MAY-2006 14:35:43.48
-          Body SysBody 18-MAY-2006 14:40:01.58
-            Attr PgmName = "SetMaxShow"
+        Object SetMinShow $Attribute 22 27-MAR-2014 08:02:34.71
+          Body SysBody 18-MAY-2006 14:40:04.58
+            Attr PgmName = "SetMinShow"
             Attr Size = 4
             Attr TypeRef = "pwrs:Type-$Float32"
           EndBody
         EndObject
-        Object SetMinShow $Attribute 22 18-MAY-2006 14:35:47.67
-          Body SysBody 18-MAY-2006 14:40:04.58
-            Attr PgmName = "SetMinShow"
+        Object SetMaxShow $Attribute 21 27-MAR-2014 08:02:37.36
+          Body SysBody 18-MAY-2006 14:40:01.58
+            Attr PgmName = "SetMaxShow"
             Attr Size = 4
             Attr TypeRef = "pwrs:Type-$Float32"
           EndBody
         EndObject
         !/**
+        !  Specifies the engineering unit of SetVal / XSetVal / SetMinShow /
+        !  SetMaxShow, e.g. kg. Used in the Mode object display.
+        !  OutEngUnit
+        !*/
+        Object SetEngUnit $Attribute 25 27-MAR-2014 08:02:40.12
+          Body SysBody 18-MAY-2006 14:40:48.75
+            Attr PgmName = "SetEngUnit"
+            Attr Size = 16
+            Attr TypeRef = "pwrs:Type-$String16"
+          EndBody
+        EndObject
+        !/**
         !  The lower respectively upper limits in the bar graph at
         !  presentation of the control signal, OutVal, of the Pid
         !  object in the Mode display. The values may be changed
         !  in the more info form of the Mode object.
         !*/
-        Object OutMaxShow $Attribute 23 18-MAY-2006 14:35:53.81
-          Body SysBody 18-MAY-2006 14:40:09.36
-            Attr PgmName = "OutMaxShow"
+        Object OutMinShow $Attribute 24 27-MAR-2014 08:02:43.20
+          Body SysBody 18-MAY-2006 14:40:13.52
+            Attr PgmName = "OutMinShow"
             Attr Size = 4
             Attr TypeRef = "pwrs:Type-$Float32"
           EndBody
         EndObject
-        Object OutMinShow $Attribute 24 18-MAY-2006 14:36:06.19
-          Body SysBody 18-MAY-2006 14:40:13.52
-            Attr PgmName = "OutMinShow"
+        Object OutMaxShow $Attribute 23 27-MAR-2014 08:02:46.40
+          Body SysBody 18-MAY-2006 14:40:09.36
+            Attr PgmName = "OutMaxShow"
             Attr Size = 4
             Attr TypeRef = "pwrs:Type-$Float32"
           EndBody
         EndObject
         !/**
-        !  Specifies the engineering unit of SetMinShow /
-        !  SetMaxShow, e.g. kg. Used in the Mode object display.
-        !  OutEngUnit
+        !  Specifies the engineering unit of OutVal / Force /
+        !  OutMinShow / OutMaxShow e.g. %.
+        !  Used in the Mode object display.
         !*/
-        Object SetEngUnit $Attribute 25 18-MAY-2006 14:36:17.79
-          Body SysBody 18-MAY-2006 14:40:48.75
-            Attr PgmName = "SetEngUnit"
+        Object OutEngUnit $Attribute 26 27-MAR-2014 08:02:49.27
+          Body SysBody 18-MAY-2006 14:40:51.89
+            Attr PgmName = "OutEngUnit"
             Attr Size = 16
             Attr TypeRef = "pwrs:Type-$String16"
           EndBody
         EndObject
         !/**
-        !  Specifies the engineering unit of OutMinShow /
-        !  OutMaxShow e.g. %. Used in the Mode object display.
+        !  The operator's authorities to change SetVal.
+        !  
+        !    0   -- Changes not allowed.
+        !    = 0 -- Changes allowed.
         !*/
-        Object OutEngUnit $Attribute 26 18-MAY-2006 14:36:23.64
-          Body SysBody 18-MAY-2006 14:40:51.89
-            Attr PgmName = "OutEngUnit"
-            Attr Size = 16
-            Attr TypeRef = "pwrs:Type-$String16"
+        Object AccSet $Attribute 18 18-MAY-2006 14:35:28.87
+          Body SysBody 18-MAY-2006 14:39:48.69
+            Attr PgmName = "AccSet"
+            Attr Size = 4
+            Attr TypeRef = "pwrs:Type-$Int32"
+          EndBody
+        EndObject
+        !/**
+        !  The choice of the operator of SetVal is checked against
+        !  the interval { MinSet, MaxSet}. The value may be
+        !  changed in the control modes MANUAL and AUTO from the
+        !  display of the Mode object.
+        !*/
+        Object MinSet $Attribute 19 18-MAY-2006 14:35:33.96
+          Body SysBody 18-MAY-2006 14:39:55.12
+            Attr PgmName = "MinSet"
+            Attr Size = 4
+            Attr TypeRef = "pwrs:Type-$Float32"
+          EndBody
+        EndObject
+        Object MaxSet $Attribute 20 18-MAY-2006 14:35:37.63
+          Body SysBody 18-MAY-2006 14:39:58.39
+            Attr PgmName = "MaxSet"
+            Attr Size = 4
+            Attr TypeRef = "pwrs:Type-$Float32"
           EndBody
         EndObject
         !/**
@@ -51718,7 +51718,7 @@ and no Auto/Man button."
       Object RtBody $ObjBodyDef 1 18-MAY-2006 14:49:52.65
         Body SysBody 18-MAY-2006 14:49:57.64
           Attr StructName = "CompPID"
-          Attr NextAix = "_X50"
+          Attr NextAix = "_X57"
         EndBody
         !/**
         !  Process value.
@@ -51900,7 +51900,7 @@ and no Auto/Man button."
         !              based on the control error.
         !*/
         Object PidAlg $Attribute 12 18-MAY-2006 15:12:04.04
-          Body SysBody 18-MAY-2006 15:20:47.24
+          Body SysBody 27-MAR-2014 07:30:20.83
             Attr PgmName = "PidAlg"
             Attr Size = 4
             Attr TypeRef = "pwrb:Type-PidAlgEnum"
@@ -51969,7 +51969,7 @@ and no Auto/Man button."
         !  decreasing control signal.
         !*/
         Object Inverse $Attribute 17 18-MAY-2006 15:12:26.34
-          Body SysBody 18-MAY-2006 15:21:26.53
+          Body SysBody 27-MAR-2014 07:28:57.76
             Attr PgmName = "Inverse"
             Attr Size = 4
             Attr TypeRef = "pwrs:Type-$Boolean"
@@ -51990,18 +51990,66 @@ and no Auto/Man button."
           EndBody
         EndObject
         !/**
-        !  At AUTO and CASCADE control the control signal OutVal
-        !  is supposed to be in the interval { MinOut, MaxOut }.
-        !  The EndMin /EndMax flags are used to signal if any
-        !  limitation has occurred.
-        !  If OutVal is greater than MaxOut or less than MinOut,
-        !  OutVal is limited to the value at the end of the
-        !  interval.
+        ! Flag to force no offset after amnual mode. Will cause an output jump
+        ! when switching from manual to Auto. Not Bumpless transfer!
+        !*/
+        Object PDAbsFlag $Attribute 50 27-MAR-2014 07:28:33.85
+          Body SysBody 27-MAR-2014 07:29:01.36
+            Attr PgmName = "PDAbsFlag"
+            Attr Flags = 16777216
+            Attr TypeRef = "pwrs:Type-$Boolean"
+          EndBody
+        EndObject
+        !/**
+        ! WindupMask
+        ! The possible values are as follows:
+        ! 
+        ! 1  -- I      Only the I-part is limited in OutWindup
+        ! 2  -- BI    Bias and I are limited in OutWindup
+        ! 4  -- BPI  Bias, P and I are limited in OutWindup
+        ! 8  -- BPID All parts of the controller are limited in OutWindup
+        !*/
+        Object WindupMask $Attribute 51 27-MAR-2014 07:30:11.91
+          Body SysBody 27-MAR-2014 07:30:41.64
+            Attr PgmName = "WindupMask"
+            Attr Flags = 16777216
+            Attr TypeRef = "pwrb:Type-WindupMaskEnum"
+          EndBody
+        EndObject
+        !/**
+        ! At AUTO and CASCADE control, for controllers with an I-part,
+        ! the control signal OutWindup is supposed to be
+        ! in the interval { MinWindup, MaxWindup }.
+        ! The EndMin / EndMax flags are used to signal if any
+        ! limitation has ocurred.
+        ! If OutWindup is greater than MaxWindup, or less than MinWindup,
+        ! OutWindup is limited to the value at the end of the interval.
+        ! If MinWindup >= MaxWindup no limitation will occur.
+        ! 
+        ! After addition of the absolute part,
+        ! OutVal is limited to the interval { MinOut, MaxOut }.
+        ! If MinOut >= MaxOut no limitation will occur.
+        ! 
+        !*/
+        Object MinWindup $Attribute 52 27-MAR-2014 07:31:26.25
+          Body SysBody 27-MAR-2014 07:31:28.04
+            Attr PgmName = "MinWindup"
+            Attr Flags = 16777216
+            Attr TypeRef = "pwrs:Type-$Float32"
+          EndBody
+        EndObject
+        Object MaxWindup $Attribute 53 27-MAR-2014 07:31:36.34
+          Body SysBody 27-MAR-2014 07:31:37.96
+            Attr PgmName = "MaxWindup"
+            Attr Flags = 16777216
+            Attr TypeRef = "pwrs:Type-$Float32"
+          EndBody
+        EndObject
+        !/**
         !  
-        !  If MinOut >= MaxOut no limitation will occur.
         !*/
         Object MinOut $Attribute 19 18-MAY-2006 15:15:23.71
-          Body SysBody 18-MAY-2006 15:22:31.22
+          Body SysBody 27-MAR-2014 07:31:06.73
             Attr PgmName = "MinOut"
             Attr Size = 4
             Attr TypeRef = "pwrs:Type-$Float32"
@@ -52015,6 +52063,81 @@ and no Auto/Man button."
           EndBody
         EndObject
         !/**
+        !  Specifies the hysteresis on MinOut and MaxOut in
+        !  connection with the handling of EndMin/EndMax.
+        !  @image orm_en1-144.gif
+        !*/
+        Object EndHys $Attribute 47 27-MAR-2014 07:31:58.98
+          Body SysBody 18-MAY-2006 15:25:54.52
+            Attr PgmName = "EndHys"
+            Attr Size = 4
+            Attr TypeRef = "pwrs:Type-$Float32"
+          EndBody
+        EndObject
+        !/**
+        !  The lower respectively upper limit in the graph at
+        !  presentation of ProcVal and SetVal in the Pid object
+        !  display. The values may be changed in the more info
+        !  form of the Pid object.
+        !*/
+        Object SetMinShow $Attribute 41 27-MAR-2014 07:32:06.25
+          Body SysBody 18-MAY-2006 15:24:38.58
+            Attr PgmName = "SetMinShow"
+            Attr Size = 4
+            Attr TypeRef = "pwrs:Type-$Float32"
+          EndBody
+        EndObject
+        Object SetMaxShow $Attribute 40 27-MAR-2014 07:32:09.87
+          Body SysBody 18-MAY-2006 15:24:32.20
+            Attr PgmName = "SetMaxShow"
+            Attr Size = 4
+            Attr TypeRef = "pwrs:Type-$Float32"
+          EndBody
+        EndObject
+        !/**
+        !  Specifies the engineering unit of SetVal / SetMinShow /
+        !  SetMaxShow, e.g. meter. Used in the Pid object display.
+        !*/
+        Object SetEngUnit $Attribute 44 27-MAR-2014 07:32:13.42
+          Body SysBody 18-MAY-2006 15:25:29.00
+            Attr PgmName = "SetEngUnit"
+            Attr Size = 16
+            Attr TypeRef = "pwrs:Type-$String16"
+          EndBody
+        EndObject
+        !/**
+        !  The lower respectively upper limit in the graph at
+        !  presentation of the control signal OutVal in the Pid
+        !  object display. The values may be changed in the more
+        !  info form of the Pid object.
+        !*/
+        Object OutMinShow $Attribute 43 27-MAR-2014 07:32:20.89
+          Body SysBody 18-MAY-2006 15:24:44.30
+            Attr PgmName = "OutMinShow"
+            Attr Size = 4
+            Attr TypeRef = "pwrs:Type-$Float32"
+          EndBody
+        EndObject
+        Object OutMaxShow $Attribute 42 27-MAR-2014 07:32:24.40
+          Body SysBody 18-MAY-2006 15:24:41.44
+            Attr PgmName = "OutMaxShow"
+            Attr Size = 4
+            Attr TypeRef = "pwrs:Type-$Float32"
+          EndBody
+        EndObject
+        !/**
+        !  Specifies the engineering unit of OutVal / OutMinShow /
+        !  OutMaxShow, e.g., %. Used in the in the Pid object
+        !  display.
+        !*/
+        Object OutEngUnit $Attribute 45 27-MAR-2014 07:32:27.14
+          Body SysBody 18-MAY-2006 15:25:32.42
+            Attr PgmName = "OutEngUnit"
+            Attr Size = 16
+            Attr TypeRef = "pwrs:Type-$String16"
+          EndBody
+        EndObject
+        !/**
         !  The operator's authorities to change Gain respectively
         !  IntTime.
         !    0   -- Changes not allowed.
@@ -52181,69 +52304,6 @@ and no Auto/Man button."
           EndBody
         EndObject
         !/**
-        !  The lower respectively upper limit in the graph at
-        !  presentation of ProcVal and SetVal in the Pid object
-        !  display. The values may be changed in the more info
-        !  form of the Pid object.
-        !*/
-        Object SetMaxShow $Attribute 40 18-MAY-2006 15:17:50.62
-          Body SysBody 18-MAY-2006 15:24:32.20
-            Attr PgmName = "SetMaxShow"
-            Attr Size = 4
-            Attr TypeRef = "pwrs:Type-$Float32"
-          EndBody
-        EndObject
-        Object SetMinShow $Attribute 41 18-MAY-2006 15:17:57.23
-          Body SysBody 18-MAY-2006 15:24:38.58
-            Attr PgmName = "SetMinShow"
-            Attr Size = 4
-            Attr TypeRef = "pwrs:Type-$Float32"
-          EndBody
-        EndObject
-        !/**
-        !  The lower respectively upper limit in the graph at
-        !  presentation of the control signal OutVal in the Pid
-        !  object display. The values may be changed in the more
-        !  info form of the Pid object.
-        !*/
-        Object OutMaxShow $Attribute 42 18-MAY-2006 15:18:01.66
-          Body SysBody 18-MAY-2006 15:24:41.44
-            Attr PgmName = "OutMaxShow"
-            Attr Size = 4
-            Attr TypeRef = "pwrs:Type-$Float32"
-          EndBody
-        EndObject
-        Object OutMinShow $Attribute 43 18-MAY-2006 15:18:07.98
-          Body SysBody 18-MAY-2006 15:24:44.30
-            Attr PgmName = "OutMinShow"
-            Attr Size = 4
-            Attr TypeRef = "pwrs:Type-$Float32"
-          EndBody
-        EndObject
-        !/**
-        !  Specifies the engineering unit of SetMinShow /
-        !  SetMaxShow, e.g. meter. Used in the Pid object display.
-        !*/
-        Object SetEngUnit $Attribute 44 18-MAY-2006 15:18:13.35
-          Body SysBody 18-MAY-2006 15:25:29.00
-            Attr PgmName = "SetEngUnit"
-            Attr Size = 16
-            Attr TypeRef = "pwrs:Type-$String16"
-          EndBody
-        EndObject
-        !/**
-        !  Specifies the engineering unit of OutMinShow /
-        !  OutMaxShow, e.g., %. Used in the in the Pid object
-        !  display.
-        !*/
-        Object OutEngUnit $Attribute 45 18-MAY-2006 15:18:20.75
-          Body SysBody 18-MAY-2006 15:25:32.42
-            Attr PgmName = "OutEngUnit"
-            Attr Size = 16
-            Attr TypeRef = "pwrs:Type-$String16"
-          EndBody
-        EndObject
-        !/**
         !  Specifies the complete name of the Mode object
         !  associated to this Pid object. The attribute makes it
         !  possible to start the object display of the associated
@@ -52258,24 +52318,46 @@ and no Auto/Man button."
           EndBody
         EndObject
         !/**
-        !  Specifies the hysteresis on MinOut and MaxOut in
-        !  connection with the handling of EndMin/EndMax.
-        !  @image orm_en1-144.gif
+        !  Filtered derivative is saved to the next program cycle.
         !*/
-        Object EndHys $Attribute 47 18-MAY-2006 15:18:32.65
-          Body SysBody 18-MAY-2006 15:25:54.52
-            Attr PgmName = "EndHys"
+        Object FiltDer $Attribute 48 18-MAY-2006 15:18:37.56
+          Body SysBody 27-MAR-2014 07:39:57.84
+            Attr PgmName = "FiltDer"
             Attr Size = 4
+            Attr Flags = 1040
             Attr TypeRef = "pwrs:Type-$Float32"
           EndBody
         EndObject
         !/**
-        !  Filtered derivative is saved to the next program cycle.
+        ! Offset for P / PD-Controller after switching from
+        ! manual to auto mode.
+        ! 
         !*/
-        Object FiltDer $Attribute 48 18-MAY-2006 15:18:37.56
-          Body SysBody 18-MAY-2006 15:25:57.72
-            Attr PgmName = "FiltDer"
-            Attr Size = 4
+        Object PDManOffset $Attribute 54 27-MAR-2014 07:33:39.89
+          Body SysBody 27-MAR-2014 07:40:16.83
+            Attr PgmName = "PDManOffset"
+            Attr Flags = 16778256
+            Attr TypeRef = "pwrs:Type-$Float32"
+          EndBody
+        EndObject
+        !/**
+        ! Output that is limited with MinWindup and MaxWindup
+        ! 
+        !*/
+        Object OutWindup $Attribute 55 27-MAR-2014 07:34:23.42
+          Body SysBody 27-MAR-2014 07:43:44.08
+            Attr PgmName = "OutWindup"
+            Attr Flags = 16778256
+            Attr TypeRef = "pwrs:Type-$Float32"
+          EndBody
+        EndObject
+        !/**
+        ! The absolute part of the output. (contrary to OutWindup)
+        !*/
+        Object AbsOut $Attribute 56 27-MAR-2014 07:35:01.12
+          Body SysBody 27-MAR-2014 07:43:54.26
+            Attr PgmName = "AbsOut"
+            Attr Flags = 16778256
             Attr TypeRef = "pwrs:Type-$Float32"
           EndBody
         EndObject
diff --git a/src/lib/rt/src/rt_plc_pid.c b/src/lib/rt/src/rt_plc_pid.c
index e2981a57f465c08d7707cb6a1e786803dcc18bc6..aac0bbe283433c099c574ea2ad6a8ae00427f8e3 100644
--- a/src/lib/rt/src/rt_plc_pid.c
+++ b/src/lib/rt/src/rt_plc_pid.c
@@ -44,7 +44,6 @@
 #include "pwr_baseclasses.h"
 #include "rt_plc.h"
 #include "rt_plc_timer.h"
-#include "rt_plc_pid.h"
 
 /* 		PLC RUTINER			*/
 
@@ -53,9 +52,13 @@
   function:	accumulate output change from controller
 		and convert to Open or Close orders.
 
+  2014-02-18	Werner	Limit acc to new attribute "MaxWindup"
+
   @aref inc3p Inc3p
 */
-void inc3p_init( pwr_sClass_inc3p *object)
+
+void inc3p_init(
+  pwr_sClass_inc3p 	*object)
 {
 	object->Acc = 0;
 }
@@ -157,6 +160,13 @@ void inc3p_exec(
 		}
 	    }
 	}
+
+    /* Limit output 2014-02-18 / Werner */
+    if ((object->Acc > object->MaxWindup) && (object->MaxWindup > 0.0))
+     object->Acc = object->MaxWindup;
+    if ((object->Acc < -object->MaxWindup) && (object->MaxWindup > 0.0))
+     object->Acc = -object->MaxWindup;
+
     }
 
 /*_*
@@ -355,15 +365,19 @@ void mode_exec(
 		Possible to turn off integration and to force
 		output to desired value.
 		
-  Revision:	2011-01-18 / Werner
-		Error in filtered derivate part corrected.
-		
+		New Attributes 2014-02-18 / Werner:
+		WindupMask	Config
+		MinWindup	Config
+		MaxWindup	Config
+		PDManOffset	Internal
+		OutWindup	Internal
+
   @aref pid Pid
 */
 
 void pid_exec(
   plc_sThread		*tp,
-  pwr_sClass_pid		*object)
+  pwr_sClass_pid	*object)
 {
 
 /* Define Algoritm bitmask */
@@ -373,6 +387,11 @@ void pid_exec(
 #define DALG 8		/* Derivative part exists */
 #define DAVV 16		/* Derivative part working on control difference */
 
+#define IWUP 1		/* Windup limitation on I part */
+#define BIWUP 2		/* Windup limitation on Bias and I part */
+#define BPIWUP 4	/* Windup limitation on Bias PI part */
+#define BPIDWUP 8	/* Windup limitation on Bias and PID part (Default, old funcionality */
+
 	float	xold;	/* Local variables */
 	float	eold;
 	float	bfold;
@@ -381,6 +400,8 @@ void pid_exec(
 	float	ut;
 	float	dut;
 	float	kd;
+	float	absut;
+	float	gain;
 
 /* Save old values */
 xold=object->ProcVal;
@@ -402,73 +423,93 @@ object->ControlDiff = object->ProcVal - object->SetVal;
 ddiff = ((object->PidAlg & DAVV) != 0) ?
   (object->ControlDiff - eold) / *object->ScanTime:
   (object->ProcVal - xold) / *object->ScanTime;
-if ((object->DerGain <= 0.0) || (object->DerTime <= 0))
+if (((object->DerGain * *object->ScanTime) >= object->DerTime) || (object->DerTime <= 0))
     object->FiltDer = ddiff;		/* No Filter */
 else {
     kd = 1.0 / (1.0 + object->DerGain * *object->ScanTime / object->DerTime);
     object->FiltDer += (ddiff - derold) * (1.0 - kd);
 }
 
+
+  if (object->Inverse == 0) gain = object->Gain;
+  else gain = -object->Gain;
+
 if ( object->Force )
 /* Force */
 {
-  dut = object->OutVal;
-  object->OutVal = object->ForcVal;
-  object->OutChange = object->OutVal - dut;
+  object->OutChange = object->ForcVal - object->OutVal;
+  object->OutVal = object->OutWindup = object->ForcVal;
   object->EndMin = FALSE;
   object->EndMax = FALSE;
+  
+  /* Adjust for bumpless transfer to auto */
+  object->PDManOffset = object->OutVal - 
+    gain * object->ControlDiff - object->BiasGain * object->Bias;  
+
+  if ((object->PidAlg & IALG) != 0) object->AbsOut = 0.0;
+  else object->AbsOut = object->OutVal;
+
+  if (object->WindupMask < BIWUP)
+    object->OutWindup -= object->BiasGain * object->Bias;
+  if (object->WindupMask < BPIWUP)
+    object->OutWindup -= gain * object->ControlDiff;
+    
+  object->AbsOut = object->OutVal - object->OutWindup;
+
 }
 
 else
 /* Auto mode */
 {
+  dut = absut = 0.0;
+  
   if ((object->PidAlg & IALG) != 0)
   /* Incremental algorithm */
   {
     /* Integral-part */
     if ((*object->IntOffP == FALSE) && (object->IntTime > 0))
       dut = object->ControlDiff * *object->ScanTime / object->IntTime;
-    else
-      dut = 0;
-    if ((object->PidAlg & PALG) != 0)
-    /* Not pure I-controller */
-    {
-      /* Derivative-part */
-      if ((object->PidAlg & DALG) != 0)
-        dut += (object->FiltDer-derold) * object->DerTime;
-      /* P-part */
+    
+    if ((object->PidAlg & PALG) != 0) dut *= gain;
+    else gain = 0.0; /* Pure I-controller */
+    
+    /* Bias */
+    if (object->WindupMask >= BIWUP) /* Windup on Bias */
+      dut += object->BiasGain * (object->Bias - bfold);
+    else absut = object->BiasGain * object->Bias;
+      
+    /* P-part */
+    if (object->WindupMask >= BPIWUP) /* Windup on P */
       dut += ((object->PidAlg & PAVV) != 0) ?
-        object->ControlDiff - eold :
-        object->ProcVal - xold ;
-      dut *= object->Gain;
+          gain * (object->ControlDiff - eold) :
+          gain * (object->ProcVal - xold) ;
+    else
+      absut += gain * object->ControlDiff;
+      
+    /* Derivative-part */
+    if ((object->PidAlg & DALG) != 0) {
+      if (object->WindupMask >= BPIDWUP) /* Windup on D */
+        dut += gain * (object->FiltDer - derold) * object->DerTime;
+      else
+        absut += gain * object->FiltDer * object->DerTime;
     }
-    if (object->Inverse != 0) dut = - dut;
-    /* Bias */
-    dut += object->BiasGain * (object->Bias - bfold);
+    
+    
     /* Limit output */
-    ut = object->OutVal + dut;
-    if (object->MaxOut > object->MinOut)
-    {
-      if (ut > object->MaxOut)
-      {
-        ut = object->MaxOut;
-        object->EndMin = FALSE;
-        object->EndMax = TRUE;
-      }
-      else if (ut < object->MinOut)
-      {
-        ut = object->MinOut;
-        object->EndMin = TRUE;
-        object->EndMax = FALSE;
-      }
-      else
-      {
-        if (object->EndMin && (ut >= (object->MinOut + object->EndHys)))
-          object->EndMin = FALSE;
-        if (object->EndMax && (ut <= (object->MaxOut - object->EndHys)))
-          object->EndMax = FALSE;
-      }
+    object->OutWindup += dut;
+
+    if (object->OutWindup > object->MaxWindup) {
+      object->OutWindup = object->MaxWindup;
+      object->EndMax = TRUE;
+    } else if (object->OutWindup < object->MinWindup) {
+      object->OutWindup = object->MinWindup;
+      object->EndMin = TRUE;
     }
+
+    ut = object->OutWindup + absut;
+    if (ut > object->MaxOut) ut = object->MaxOut;
+    else if (ut < object->MinOut) ut = object->MinOut;
+    dut += absut - object->AbsOut;
   }
 
   else
@@ -480,39 +521,27 @@ else
     if ((object->PidAlg & DALG) != 0)
       ut += object->FiltDer * object->DerTime;
     /* Gain */
-    ut *= object->Gain;
-    if (object->Inverse != 0) ut = - ut;
-    /* Bias */
-    ut += object->BiasGain * object->Bias;
+    ut *= gain;
+    
+    /* Bias and Man offset */
+    if (object->PDAbsFlag) object->PDManOffset = 0;
+    ut += object->BiasGain * object->Bias + object->PDManOffset;
+    
     /* Limit output */
     if (object->MaxOut > object->MinOut)
     {
-      if (ut > object->MaxOut)
-      {
-        ut = object->MaxOut;
-        object->EndMin = FALSE;
-        object->EndMax = TRUE;
-      }
-      else if (ut < object->MinOut)
-      {
-        ut = object->MinOut;
-        object->EndMin = TRUE;
-        object->EndMax = FALSE;
-      }
-      else
-      {
-        if (object->EndMin && (ut >= (object->MinOut + object->EndHys)))
-          object->EndMin = FALSE;
-        if (object->EndMax && (ut <= (object->MaxOut - object->EndHys)))
-          object->EndMax = FALSE;
-      }
+      if (ut > object->MaxOut) ut = object->MaxOut;
+      else if (ut < object->MinOut) ut = object->MinOut;
     }
     dut = ut - object->OutVal;
+    absut = ut;
   }
 
   /* Output Auto */
   object->OutChange = dut;
   object->OutVal = ut;
+  object->AbsOut = absut;
+  
 }
 
 }
diff --git a/src/wbl/pwrb/src/pwrb_c_inc3p.wb_load b/src/wbl/pwrb/src/pwrb_c_inc3p.wb_load
index 3b65e678b958579ef611c80568dc1a234cc2e5b9..b8d75d82a7c4b922d79fee0d8256ad5c68ae3113 100644
--- a/src/wbl/pwrb/src/pwrb_c_inc3p.wb_load
+++ b/src/wbl/pwrb/src/pwrb_c_inc3p.wb_load
@@ -52,7 +52,8 @@ SObject pwrb:Class
 !  The input signal OutChange is regarded as a control
 !  error. This error is transformed into a time by
 !  multiplication with Gain. The product is added to
-!  accumulator Acc.
+!  accumulator Acc. The absolute value of Acc is limited
+!  to MaxWindup.
 !  
 !  If the absolute value of Acc > MinTim either the output
 !  Open or Close is set. If Acc > MinTim an incremental
@@ -193,6 +194,18 @@ SObject pwrb:Class
           Attr GraphName = "MaxTim"
         EndBody
       EndObject
+      !/**
+      !  Maximum windup in seconds
+      !  The absolute value of Acc will never be greater than MaxWindup
+      !  Typically less or equal than running time from open to closed
+      !  Default 30 seconds. Lessor equal to zero means no limitation.
+      !*/
+      Object MaxWindup $Intern 19 
+        Body SysBody
+          Attr TypeRef = "pwrs:Type-$Float32"
+          Attr GraphName = "MaxWindup"
+        EndBody
+      EndObject
       Object OpenP $Intern 8 
         Body SysBody
           Attr Flags |= PWR_MASK_POINTER
@@ -387,6 +400,7 @@ SObject pwrb:Class
     Object Template Inc3P
       Body RtBody
         Attr Gain = 1.0
+        Attr MaxWindup = 30.0
       EndBody
     EndObject
   EndObject
diff --git a/src/wbl/pwrb/src/pwrb_c_mode.wb_load b/src/wbl/pwrb/src/pwrb_c_mode.wb_load
index aeac766c1523fdc281b5f9c1085ecb0bcf37490a..6fdbed68af5a267f646ea21ce8808de45933e9a1 100644
--- a/src/wbl/pwrb/src/pwrb_c_mode.wb_load
+++ b/src/wbl/pwrb/src/pwrb_c_mode.wb_load
@@ -175,8 +175,6 @@ SObject pwrb:Class
       Object SetVal $Output 7 
         Body SysBody
           Attr PgmName = "SetVal"
-          Attr Flags |= PWR_MASK_STATE
-          Attr Flags |= PWR_MASK_NOEDIT
           Attr TypeRef = "pwrs:Type-$Float32"
           Attr GraphName = "SV"
         EndBody
@@ -380,16 +378,26 @@ SObject pwrb:Class
       !  Mode object display. The values may be changed in the
       !  more info form of the Mode object.
       !*/
+      Object SetMinShow $Intern 21 
+        Body SysBody
+          Attr TypeRef = "pwrs:Type-$Float32"
+          Attr GraphName = "SetMinShow"
+        EndBody
+      EndObject
       Object SetMaxShow $Intern 20 
         Body SysBody
           Attr TypeRef = "pwrs:Type-$Float32"
           Attr GraphName = "SetMaxShow"
         EndBody
       EndObject
-      Object SetMinShow $Intern 21 
+      !/**
+      !  Specifies the engineering unit of XSetVal / SetVal / SetMinShow /
+      !  SetMaxShow, e.g. kg. Used in the Mode object display.
+      !*/
+      Object SetEngUnit $Intern 24 
         Body SysBody
-          Attr TypeRef = "pwrs:Type-$Float32"
-          Attr GraphName = "SetMinShow"
+          Attr TypeRef = "pwrs:Type-$String16"
+          Attr GraphName = "SetEngUnit"
         EndBody
       EndObject
       !/**
@@ -398,32 +406,22 @@ SObject pwrb:Class
       !  object in the Mode display. The values may be changed
       !  in the more info form of the Mode object.
       !*/
-      Object OutMaxShow $Intern 22 
-        Body SysBody
-          Attr TypeRef = "pwrs:Type-$Float32"
-          Attr GraphName = "OutMaxShow"
-        EndBody
-      EndObject
       Object OutMinShow $Intern 23 
         Body SysBody
           Attr TypeRef = "pwrs:Type-$Float32"
           Attr GraphName = "OutMinShow"
         EndBody
       EndObject
-      !/**
-      !  Specifies the engineering unit of SetMinShow /
-      !  SetMaxShow, e.g. kg. Used in the Mode object display.
-      !  OutEngUnit
-      !*/
-      Object SetEngUnit $Intern 24 
+      Object OutMaxShow $Intern 22 
         Body SysBody
-          Attr TypeRef = "pwrs:Type-$String16"
-          Attr GraphName = "SetEngUnit"
+          Attr TypeRef = "pwrs:Type-$Float32"
+          Attr GraphName = "OutMaxShow"
         EndBody
       EndObject
       !/**
-      !  Specifies the engineering unit of OutMinShow /
-      !  OutMaxShow e.g. %. Used in the Mode object display.
+      !  Specifies the engineering unit of XForcVal / OutVal / 
+      !  ForcVal / OutMinShow / OutMaxShow e.g. %.
+      !  Used in the Mode object display.
       !*/
       Object OutEngUnit $Intern 25 
         Body SysBody
diff --git a/src/wbl/pwrb/src/pwrb_c_pid.wb_load b/src/wbl/pwrb/src/pwrb_c_pid.wb_load
index 75bc5bcacf9801d963a2275d9bb9f24bf47d4e07..485a7930b3cce1a2758407cf38801693953b2c10 100644
--- a/src/wbl/pwrb/src/pwrb_c_pid.wb_load
+++ b/src/wbl/pwrb/src/pwrb_c_pid.wb_load
@@ -70,10 +70,18 @@ SObject         pwrb:Class
 !  the I-part will give a slope.
 !  I+P means that the P-part will only be affected by changes on the process value.
 !
-!  When using the P- or PD-algorithm we use an aabsolute algorithm. The output 
+!  When using the P- or PD-algorithm we use an absolute algorithm. The output 
 !  will not be stable away from zero without a control deviation.
-!  When using algorithms with I-part, all changesof the output are calculated by 
-!  changes of the inputs to the controller. You can still turn off the integration
+!  If PDAbsFlag is zero, there will be a offset that is calculated when the
+!  controller is in manual mode (force), so that there is no jump in the output
+!  when going from manual to auto.
+!  When using algorithms with I-part, the output is divided in two parts, depending
+!  on the bitmask WindupMask. The I-part is always calculated and limited in the
+!  OutWindup, and you can select to include the Bias, the P-part and the D-part also.
+!  OutWindup is limited to MinWindup and MaxWindup, which sets the signals EndMin and EndMax
+!  The rest of the output is calculated as an absolute part in AbsOut, that is added to the
+!  OutWindup, and then limited to MinOutput and MaxOutput.
+!  You can still turn off the integration
 !  with an input to the object
 !
 !  The PID-object has two outputs.
@@ -95,21 +103,32 @@ SObject         pwrb:Class
 !
 !  You can use a feedforward signal by the Bias-input, with BiasGain.
 ! 
-!  The output, OutVal, is limited to the interval { MinOut , MaxOut }. This means
+!  The output from the controller is divided in two parts, OutWindup and AbsOut.
+!  The OutWindup contains the I-part and possibly the bias, P and D parts.
+!  Select by WindupMask between I, BI, BPI and BPID.
+!  OutWindup, is limited to the interval { MinWindup , MaxWindup }. This means
 !  that you can loose your stable controlpoint if you have much noise. Especially
-!  if you use the D-part of the controller. The interval should normally be a bit
-!  larger than the possible output to the process.
+!  if you use the D-part of the controller. If you set the flag WindupMask to BIP
+!  you remove the influence of D from the OutWindup. You can also set it to BI or I to remove the
+!  influence of P and Bias from the OutWindup
+!  The total output is also limited to the interval {MinOut , MaxOut }
+!
 !  Example: You have a rather noisy flowcontrol with an output 0-100% as
-!  speedreference to a pump.
+!  speedreference to a pump. WindupMask = BPID. MinWindup = 0, MaxWindup = 100.
 !  The output varies +- 5% as a result of the noise. At the moment we need 98%
-!  output as an average to reach the desired setpoint. If we use 100% as MaxOut
+!  output as an average to reach the desired setpoint. If we use 100% as MaxWindup
 !  for the controller, the output will be cut all the time, and it will vary
 !  between 90 and 100% with 95% as an average. We will not reach the setpoint.
-!  The solution is to allow the output from -10% to 110%, and then limit the
-!  output outside the controller.
+!  The solution is to change WindupMask to I or BI. The disturbances will not affect the windup,
+!  but the output will still be limited to 0-100 %
+!
+!  For a servo valve for position control, you may want to have a slow I-part for leakage control,
+!  but limited to +- 20 %. WindupMask = I or BI,
+!  Set MinWindup = -20, Max Windup = + 20, MinOutput = -100, Max Output = +100
+!  EndMin and EndMax can now be used to give alarm for leakage.
 !
 !  The controller has bumpless transfer between manual and auto, and after forced
-!  output, but not if you use the P or PD-form.
+!  output, but not if you use the P or PD-form with the flag PDAbsFlag.
 !
 !
 !
@@ -142,13 +161,14 @@ SObject         pwrb:Class
 !  PID  (lower left) adds a short spike at the start, which in this case 
 !       doesn't affect anything. 
 !       MaxOut = 500%
-!  PID  (lower right) is identical with the left, except for MaxOut = 100%, 
-!       which gives "wrong" result.
+!  PID  (lower right) is identical with the left, except for MaxWindup = 100%, 
+!       and WindupMask = BPID, which gives "wrong" result.
 !       At the setpoint step, the P-part gives an increase of 30 %, and the 
 !       P-part wants a spike of 90 %. That results in an output of 155%, which 
 !       is cut to 100% because of saturation of the output signal. Then the D-part 
 !       will remove 90 % again, and the controller will restart from 10% output, 
 !       which is not desired. 
+!       Use WindupMask = BPI !!
 !
 !
 ! @h1 Examples
@@ -426,13 +446,13 @@ SObject         pwrb:Class
         EndBody
       EndObject
       !/**
-      !  Specifies if OutVal at this scanning has been limited
+      !  Specifies if OutWindup at this scanning has been limited
       !  against any of the limit values in the interval {
-      !  MinOut, MaxOut } or not. If a limitation is done
+      !  MinWindup, MaxWindup } or not. If a limitation is done
       !  against
       !  
-      !  --  MinOut, then EndMin is set TRUE
-      !  --  MaxOut, then EndMax is set TRUE
+      !  --  MinWindup, then EndMin is set TRUE
+      !  --  MaxWindup, then EndMax is set TRUE
       !  else they are FALSE.
       !  
       !  EndMin /EndMax can only be set in AUTO or CASCADE
@@ -576,16 +596,60 @@ SObject         pwrb:Class
         EndBody
       EndObject
       !/**
-      !  At AUTO and CASCADE control the control signal OutVal
-      !  is supposed to be in the interval { MinOut, MaxOut }.
+      !  Flag to force no offset after manual mode. Will cause an output jump
+      !  when switching from manual to Auto. Not Bumpless transfer!
+      !*/
+      Object PDAbsFlag $Intern 49 
+        Body SysBody
+          Attr TypeRef = "pwrb:Type-Boolean"
+          Attr GraphName = "PDAbsFlag"
+        EndBody
+      EndObject
+      !/**
+      !  WindupMask
+      !  The possible values are as follows:
+      !  
+      !  1   -- I     Only the I-part is limited in OutWindup
+      !
+      !  2   -- BI    Bias and I are limited in OutWindup
+      !
+      !  4   -- BPI   Bias, P and I are limited in OutWindup
+      !
+      !  8   -- BPID  All parts of the controller are limited in OutWindup
+      !*/
+      Object WindupMask $Intern 50 
+        Body SysBody
+          Attr TypeRef = "pwrb:Type-WindupMaskEnum"
+          Attr GraphName = "WindupMask"
+        EndBody
+      EndObject
+      !/**
+      !  At AUTO and CASCADE control for controllers with an I-part,
+      !  the control signal OutWindup is supposed to be
+      !  in the interval { MinWindup, MaxWindup }.
       !  The EndMin /EndMax flags are used to signal if any
       !  limitation has occurred.
-      !  If OutVal is greater than MaxOut or less than MinOut,
-      !  OutVal is limited to the value at the end of the
+      !  If OutWindup is greater than MaxWindup or less than MinWindup,
+      !  OutWindup is limited to the value at the end of the
       !  interval.
+      !  If MinWindup >= MaxWindup no limitation will occur.
       !  
+      !  After addition of the absolute output part, 
+      !  OutVal is limited  to the interval {MinOut , MaxOut }.
       !  If MinOut >= MaxOut no limitation will occur.
       !*/
+      Object MinWindup $Intern 51 
+        Body SysBody
+          Attr TypeRef = "pwrb:Type-Float32"
+          Attr GraphName = "MinWindup"
+        EndBody
+      EndObject
+      Object MaxWindup $Intern 52 
+        Body SysBody
+          Attr TypeRef = "pwrb:Type-Float32"
+          Attr GraphName = "MaxWindup"
+        EndBody
+      EndObject
       Object MinOut $Intern 19 
         Body SysBody
           Attr TypeRef = "pwrs:Type-$Float32"
@@ -599,6 +663,73 @@ SObject         pwrb:Class
         EndBody
       EndObject
       !/**
+      !  Specifies the hysteresis on MinOut and MaxOut in
+      !  connection with the handling of EndMin/EndMax.
+      !  @image orm_en1-144.gif
+      !*/
+      Object EndHys $Intern 47 
+        Body SysBody
+          Attr TypeRef = "pwrs:Type-$Float32"
+          Attr GraphName = "EndHys"
+        EndBody
+      EndObject
+      !/**
+      !  The lower respectively upper limit in the graph at
+      !  presentation of ProcVal and SetVal in the Pid object
+      !  display. The values may be changed in the more info
+      !  form of the Pid object.
+      !*/
+      Object SetMinShow $Intern 41 
+        Body SysBody
+          Attr TypeRef = "pwrs:Type-$Float32"
+          Attr GraphName = "SetMinShow"
+        EndBody
+      EndObject
+      Object SetMaxShow $Intern 40 
+        Body SysBody
+          Attr TypeRef = "pwrs:Type-$Float32"
+          Attr GraphName = "SetMaxShow"
+        EndBody
+      EndObject
+      !/**
+      !  Specifies the engineering unit of SetVal / SetMinShow /
+      !  SetMaxShow, e.g. meter. Used in the Pid object display.
+      !*/
+      Object SetEngUnit $Intern 44 
+        Body SysBody
+          Attr TypeRef = "pwrs:Type-$String16"
+          Attr GraphName = "SetEngUnit"
+        EndBody
+      EndObject
+      !/**
+      !  The lower respectively upper limit in the graph at
+      !  presentation of the control signal OutVal in the Pid
+      !  object display. The values may be changed in the more
+      !  info form of the Pid object.
+      !*/
+      Object OutMinShow $Intern 43 
+        Body SysBody
+          Attr TypeRef = "pwrs:Type-$Float32"
+          Attr GraphName = "OutMinShow"
+        EndBody
+      EndObject
+      Object OutMaxShow $Intern 42 
+        Body SysBody
+          Attr TypeRef = "pwrs:Type-$Float32"
+          Attr GraphName = "OutMaxShow"
+        EndBody
+      EndObject
+      !/**
+      !  Specifies the engineering unit of OutVal / Force / OutMinShow /
+      !  OutMaxShow, e.g., %. Used in the Pid object display.
+      !*/
+      Object OutEngUnit $Intern 45 
+        Body SysBody
+          Attr TypeRef = "pwrs:Type-$String16"
+          Attr GraphName = "OutEngUnit"
+        EndBody
+      EndObject
+      !/**
       !  Program cycle period in seconds, i.e. the sample time.
       !*/
       Object ScanTime $Intern 21 
@@ -758,63 +889,6 @@ SObject         pwrb:Class
           Attr GraphName = "MaxBGain"
         EndBody
       EndObject
-      Object SetMaxShow $Intern 40 
-        Body SysBody
-          Attr TypeRef = "pwrs:Type-$Float32"
-          Attr GraphName = "SetMaxShow"
-        EndBody
-      EndObject
-      !/**
-      !  The lower respectively upper limit in the graph at
-      !  presentation of ProcVal and SetVal in the Pid object
-      !  display. The values may be changed in the more info
-      !  form of the Pid object.
-      !*/
-      Object SetMinShow $Intern 41 
-        Body SysBody
-          Attr TypeRef = "pwrs:Type-$Float32"
-          Attr GraphName = "SetMinShow"
-        EndBody
-      EndObject
-      !/**
-      !  The lower respectively upper limit in the graph at
-      !  presentation of the control signal OutVal in the Pid
-      !  object display. The values may be changed in the more
-      !  info form of the Pid object.
-      !*/
-      Object OutMaxShow $Intern 42 
-        Body SysBody
-          Attr TypeRef = "pwrs:Type-$Float32"
-          Attr GraphName = "OutMaxShow"
-        EndBody
-      EndObject
-      Object OutMinShow $Intern 43 
-        Body SysBody
-          Attr TypeRef = "pwrs:Type-$Float32"
-          Attr GraphName = "OutMinShow"
-        EndBody
-      EndObject
-      !/**
-      !  Specifies the engineering unit of SetMinShow /
-      !  SetMaxShow, e.g. meter. Used in the Pid object display.
-      !*/
-      Object SetEngUnit $Intern 44 
-        Body SysBody
-          Attr TypeRef = "pwrs:Type-$String16"
-          Attr GraphName = "SetEngUnit"
-        EndBody
-      EndObject
-      !/**
-      !  Specifies the engineering unit of OutMinShow /
-      !  OutMaxShow, e.g., %. Used in the in the Pid object
-      !  display.
-      !*/
-      Object OutEngUnit $Intern 45 
-        Body SysBody
-          Attr TypeRef = "pwrs:Type-$String16"
-          Attr GraphName = "OutEngUnit"
-        EndBody
-      EndObject
       !/**
       !  Specifies the complete name of the Mode object
       !  associated to this Pid object. The attribute makes it
@@ -829,27 +903,52 @@ SObject         pwrb:Class
         EndBody
       EndObject
       !/**
-      !  Specifies the hysteresis on MinOut and MaxOut in
-      !  connection with the handling of EndMin/EndMax.
-      !  @image orm_en1-144.gif
+      !  Filtered derivative is saved to the next program cycle.
       !*/
-      Object EndHys $Intern 47 
+      Object FiltDer $Intern 48 
         Body SysBody
+	  Attr Flags |= PWR_MASK_INVISIBLE
+	  Attr Flags |= PWR_MASK_STATE
+	  Attr Flags |= PWR_MASK_NOEDIT
           Attr TypeRef = "pwrs:Type-$Float32"
-          Attr GraphName = "EndHys"
+          Attr GraphName = "FiltDer"
         EndBody
       EndObject
       !/**
-      !  Filtered derivative is saved to the next program cycle.
+      !  Offset for PD-controller when switching from manual to auto mode
       !*/
-      Object FiltDer $Intern 48 
+      Object PDManOffset $Intern 53 
         Body SysBody
+          Attr TypeRef = "pwrb:Type-Float32"
+          Attr GraphName = "PDManOffset"
+	  Attr Flags |= PWR_MASK_INVISIBLE
 	  Attr Flags |= PWR_MASK_STATE
 	  Attr Flags |= PWR_MASK_NOEDIT
+         EndBody
+      EndObject
+      !/**
+      !  Output that is cut off (limited) with MinWindup and MaxWindup
+      !*/
+      Object OutWindup $Intern 54 
+        Body SysBody
+          Attr TypeRef = "pwrb:Type-Float32"
+          Attr GraphName = "OutWindup"
 	  Attr Flags |= PWR_MASK_INVISIBLE
-          Attr TypeRef = "pwrs:Type-$Float32"
-          Attr GraphName = "FiltDer"
-        EndBody
+	  Attr Flags |= PWR_MASK_STATE
+	  Attr Flags |= PWR_MASK_NOEDIT
+         EndBody
+      EndObject
+      !/**
+      !  The absolute part of the output. (Contrary to OutWindup) 
+      !*/
+      Object AbsOut $Intern 55 
+        Body SysBody
+          Attr TypeRef = "pwrb:Type-Float32"
+          Attr GraphName = "AbsOut"
+	  Attr Flags |= PWR_MASK_INVISIBLE
+	  Attr Flags |= PWR_MASK_STATE
+	  Attr Flags |= PWR_MASK_NOEDIT
+         EndBody
       EndObject
     EndObject
     Object DevBody $ObjBodyDef 2 
@@ -907,6 +1006,8 @@ SObject         pwrb:Class
         Attr SetMaxShow = 100.0
         Attr SetEngUnit = "%"
         Attr OutEngUnit = "%"
+        Attr WindupMask = 4
+        Attr MaxWindup = 100.0
       EndBody
     EndObject
   EndObject
diff --git a/src/wbl/pwrb/src/pwrb_sv_se.txt b/src/wbl/pwrb/src/pwrb_sv_se.txt
index 620f46432f9a2ca6e5ac07823b737f46cf918e0c..4a375b0bc8b7f5da0a9911647072143c150984e3 100644
--- a/src/wbl/pwrb/src/pwrb_sv_se.txt
+++ b/src/wbl/pwrb/src/pwrb_sv_se.txt
@@ -7509,14 +7509,15 @@ satta under en tid som 
 @image orm_en1-100.gif
 
 Insignalen OutChange betraktas som ett reglerfel. Detta fel överförs till en tid 
-genom multiplikation med Gain . Produkten adderas till ackumulatorn Acc . 
+genom multiplikation med Gain . Produkten adderas till ackumulatorn Acc.
+Absolutvärdet av Acc begränsas till MaxWindup.
 
 Om absolut värdet av Acc är större än MinTim sätts någon av utgångarna Open 
 eller Close till TRUE. 
 
-Om Acc > MinTim sätts 'öka' signalen (= Open ) så länge som Acc = 0 , om, å 
+Om Acc > MinTim sätts 'öka' signalen (= Open ) så länge som Acc > 0 , om, å 
 andra sidan, Acc < - MinTim sätts 'minska' signalen (= Close ) så länge som 
-Acc = 0. Vid varje exekvering räknas värdet av Acc ned respektive upp med ett 
+Acc < 0. Vid varje exekvering räknas värdet av Acc ned respektive upp med ett 
 tidsbelopp av ScanTime , beroende på om 'öka' eller 'minska' signalen satts. 
 
 För att undvika 'obefogade' styringrepp, som skulle kunna skada ställdon vid 
@@ -7608,6 +7609,12 @@ Ackumulerad styrsignal - ingrepp i form av tid.
 Ackumulerad löptid utan ingrepp. 
 </attr>
 
+<attr>MaxWindup 
+Absolutvärdet av Acc begränsas till MaxWindupsekunder, för att undvika oändlig 
+uppvridning vid felsatta parametrar. Negativt eller noll ger ingen begränsning.
+Bör vara nära gångtid från helt stängd till helt öppen. Default 30 sek.
+</attr>
+
 <attr>TimerFlag 
 Markerar aktiv timer. 
 </attr>
@@ -8922,13 +8929,13 @@ objektets objektbild. Gr
 </attr>
 
 <attr>SetEngUnit 
-Anger ingenjörsenheten för SetMinShow / SetMaxShow , t.ex kg. Används i 
-Mode-objektets objektbild. 
+Anger ingenjörsenheten för XSetVal / SetVal / SetMinShow / SetMaxShow, t.ex kg.
+Används i Mode-objektets objektbild. 
 </attr>
 
 <attr>OutEngUnit 
-Anger ingenjörsenheten för OutMinShow / OutMaxShow , t.ex %. Används i 
-Mode-objektets objektbild. 
+Anger ingenjörsenheten för XForcVal / OutVal /ForcVal / OutMinShow / OutMaxShow, t.ex %.
+Används i Mode-objektets objektbild. 
 </attr>
 
 <attr>PidObjDid 
@@ -10361,10 +10368,14 @@ bara genom att det st
 
 Vid P- och PD-algoritm används en absolut algoritm. Utsignalen kan då alltså inte 
 ligga stabilt skilt från noll utan regleravvikelse, annat än om man använder en 
-framkopplingssignal.
-Vid alla algoritmer med I-del baseras hela tiden förändringar i utsignalen på 
-förändringar i insignalerna. Man kan fortfarande stänga av integrereringen med 
-en insignal till objektet.
+framkopplingssignal. Om flaggan PDAbsFlag sitter, så beräknas en offset i manuell mod,
+så att vi får en stötfri övergång till auto.
+Vid alla algoritmer med I-del delas utsignalen upp i två delar ned hjälp av masken WindupMask.
+I-delen ingår alltid i OutWindup, medanBias, P-delen och D-delen kan tillhöra antingen OutWindup
+eller AbsOut.
+OutWindup begränsas av MinWindup och MaxWindup, vilket sätter flaggorna EndMin och EndMax.
+Resten av utsignalen lagras i AbsOut, och total utsignal begränsas med MinOut och MaxOut
+Man kan även stänga av integrereringen med en insignal till objektet.
  
 Pid-objektet har två utgångar som båda kan användas som styrsignal. Vilken som 
 används i det enskilda fallet beror på hur regleringen är ordnad: 
@@ -10388,25 +10399,35 @@ s
 skulle bli utan filtrering.
  
 En framkopplingssignal, Bias, kan inkluderas i algoritmen genom en ingångssignal 
-till objektet.
- 
-Utvärdet, OutVal, begränsas till intervallet { MinOut, MaxOut }. Det innebär att 
+till objektet. Förstärkning framkoppling anges med BiasGain.
+
+Regulatorns utsignal OutVal är uppdelad i två delar, OutWindup och AbsOut.
+I-delen innefattas alltid i OutWindup. Med WindupMask kan man styra även Bias,
+P-delen och D-delen till OutWindup.
+OutWindup, begränsas till intervallet { MinWindup, MaxWindup }. Det innebär att 
 man kan tappa det stabila läget vid en orolig reglering, speciellt vid inkopplad 
-D-del.
+D-del. Om man sätter flaggan WindupMask till BIP, så tar man bort D-delens inflytande 
+på OutWindup. Man kan även sätta den till BI eller I för att ta bort P-delen och
+Bias från OutWindup.
+Den totala utsignalen OutVal begränsas till intervallet { MinOut , MaxOut }.
+
 Exempel: Vi har en ganska orolig flödesreglering (utsignal 0-100 %) och reglerar 
-nära maxvarvet för pumpen. Vi behöver styra ut i snitt 98 % för att nå önskat 
-börvärde. Utsignalen fladdrar ca +- 5 % pga störningar. Om MaxOut är 100 %, så 
-innebär det att regulatorn bottnar regelbundet. Utsignalen kommer då att svänga 
-mellan 90 och 100 % med en medelutsignal på ca 95%, och vi når inte önskat 
+nära maxvarvet för pumpen. WindupMask = BPID. Vi behöver styra ut i snitt 98 % för 
+att nå önskat börvärde. Utsignalen fladdrar ca +- 5 % pga störningar. 
+Om MaxWindup är 100 %, så innebär det att regulatorn bottnar regelbundet. Utsignalen 
+kommer då att svänga mellan 90 och 100 % med en medelutsignal på ca 95%, och vi når inte önskat 
 börvärde.
-Lösning: Sätt MinOut och MaxOut till -10 % resp 110 %. Utsignalen kommer att 
-svänga mellan 93 och 103% med ett medel på 98%, och vi uppnår önskat börvärde. 
-Utsignalen får sedan begränsas till 0 - 100 % utanför PID-regulatorn.
+Lösning: Sätt WindupMask till I eller BI. Störningarna kommer inte att  påverka MaxWindup.
+
+För en servoventil med positionsreglering, kan man vilja ha en långsam I-del för läckagekontroll,
+begränsad till +- 20 %. Sätt WindupMask till I eller BI.
+Sätt MinWindup = -20% och MaxWindup till +20%, MinOutput = -100 %, MaxOutput = 100 %
+EndMin och EndMax kan användas för läckagelarm.
 
 
 Regulatorn har stötfri omkoppling AUTO / MANUAL och efter annan tvångsstyrning av 
 regulatorn.
-Dock ej vid P- eller PD-reglering.
+Dock ej vid P- eller PD-reglering, om man har PDAbsFlag satt.
  
 EXEMPEL 1
 
@@ -10638,8 +10659,8 @@ operat
 </attr>
 
 <attr>OutChange 
-Regulatorns syrsignal baserad på 'incremental form'. 
-
+Regulatorns syrsignal baserad på 'incremental form', eller förändring i styrsignalen
+vid 'positional form'.
 Attributet avser styrsignalsförändringen mellan två konsekutiva exekveringar; 
 dvs. OutVal t - OutVal t-1 . 
 </attr>
@@ -10649,14 +10670,14 @@ Reglerfelet (= ProcVal - SetVal ).
 </attr>
 
 <attr>EndMin
-Om beräknat värde på OutVal inte tillhör intervallet { MinOut , MaxOut } ska 
+Om beräknat värde på OutWindup inte tillhör intervallet { MinWindup , MaxWindup } ska 
 begränsning ske till motsvarande intervallgräns. Attributet anger om sådan 
 begränsning skett vid den senaste exekveringen eller ej. 
 
 Om begränsning görs mot 
 
--- MinOut , ska EndMin sättas TRUE
--- MaxOut , ska EndMax sättas TRUE 
+-- MinWindup , ska EndMin sättas TRUE
+-- MaxWindup , ska EndMax sättas TRUE 
 
 annars är de FALSE. 
 
@@ -10748,11 +10769,10 @@ V
 
 <attr>MinOut
 I driftläge AUTO och CASCADE ska den utställda styrsignlaen OutVal vara i 
-intervallet { MinOut , MaxOut }. Flaggorna EndMin / EndMax används för att 
-signalera då begränsning sker.
+intervallet { MinOut , MaxOut }.
 Om OutVal är större än MaxOut eller mindre än MinOut , begränsas OutVal 
 till värdet av motsvarande intervallgräns.
-Om MinOut = MaxOut sker ingen begränsning. 
+Om MinOut >= MaxOut sker ingen begränsning. 
 </attr>
 
 <attr>MaxOut 
@@ -10909,6 +10929,45 @@ EndMin / EndMax flaggorna.
 Filtrerad derivata sparas till nästa exekevering. 
 </attr>
 
+<attr>PDAbsFlag 
+Anger att utsignalen beräknas direkt med regleravvikelsen.
+Vid nollvärde beräknas en offset i manuell mod, så att vi får stötfri övergång till auto. 
+</attr>
+
+<attr>WindupMask 
+Möjliga värden är:
+1  -- I		Bara I-delen begränsas i OutWindup
+2  -- BI	I-delen och Bias begränsas i OutWindup
+4  -- BIP	Också P-delen begränsas i OutWindup
+8  -- BIPD	Hela utsignalen, även D-delen begränsas i OutWindup
+</attr>
+
+<attr>MinWindup
+I driftläge AUTO och CASCADE ska den utställda styrsignalen OutWindup vara i 
+intervallet { MinWindup , MaxWindup }. Flaggorna EndMin / EndMax används för att 
+signalera då begränsning sker.
+Om OutWindup är större än MaxWindup eller mindre än MinWindup , begränsas OutWindup 
+till värdet av motsvarande intervallgräns.
+Om MinWindup >= MaxWindup sker ingen begränsning. 
+</attr>
+
+<attr>MaxWindup 
+Se MinOut
+</attr>
+
+<attr>PDManOffset 
+Offset beräknas i manuell mod, och används vid P och PD-algoritm 
+för att få stötfri övergång till auto. 
+</attr>
+
+<attr>OutWindup 
+Utsignal som begränsas av MinWindup och MaxWindup
+</attr>
+
+<attr>AbsOut 
+Utsignaldel som ligger utanför OutWindup
+</attr>
+
 <attr>OpMod
 OpMod = MANUAL (=1)
 Då Mode-objektets for-utgång blir TRUE tvingas Pid-objekt utgång
diff --git a/src/wbl/pwrb/src/pwrb_td_windupmaskenum.wb_load b/src/wbl/pwrb/src/pwrb_td_windupmaskenum.wb_load
new file mode 100644
index 0000000000000000000000000000000000000000..76ff983aa0de7c82cbb68d4e28528d7a07758e2e
--- /dev/null
+++ b/src/wbl/pwrb/src/pwrb_td_windupmaskenum.wb_load
@@ -0,0 +1,97 @@
+! 
+!  Proview   Open Source Process Control.
+!  Copyright (C) 2005-2014 SSAB EMEA AB.
+! 
+!  This file is part of Proview.
+!
+!  This program is free software; you can redistribute it and/or 
+!  modify it under the terms of the GNU General Public License as 
+!  published by the Free Software Foundation, either version 2 of 
+!  the License, or (at your option) any later version.
+!
+!  This program is distributed in the hope that it will be useful 
+!  but WITHOUT ANY WARRANTY; without even the implied warranty of 
+!  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
+!  GNU General Public License for more details.
+!
+!  You should have received a copy of the GNU General Public License 
+!  along with Proview. If not, see <http://www.gnu.org/licenses/>
+! 
+!  Linking Proview statically or dynamically with other modules is
+!  making a combined work based on Proview. Thus, the terms and 
+!  conditions of the GNU General Public License cover the whole 
+!  combination.
+! 
+!  In addition, as a special exception, the copyright holders of
+!  Proview give you permission to, from the build function in the
+!  Proview Configurator, combine Proview with modules generated by the
+!  Proview PLC Editor to a PLC program, regardless of the license
+!  terms of these modules. You may copy and distribute the resulting
+!  combined work under the terms of your choice, provided that every 
+!  copy of the combined work is accompanied by a complete copy of 
+!  the source code of Proview (the version used to produce the 
+!  combined work), being distributed under the terms of the GNU 
+!  General Public License plus this exception.
+!
+!  pwrb_windupmaskenum.wb_load -- Defines the mask type WindupMaskEnum
+!
+SObject pwrb:Type
+!/**
+!  @Version 1.0
+!  @Group Types
+!  Enumeration for PID WindupMask.
+!
+! @b See also
+!  @classlink PID pwrb_pid.html
+!*/
+  Object WindupMaskEnum $TypeDef 75
+    Body SysBody
+      Attr TypeRef = "pwrs:Type-$Enum"
+      Attr PgmName = "WindupMaskEnum"
+    EndBody
+    !/**
+    !  Integral part only
+    !*/
+    Object IWUP $Value
+     Body SysBody
+       Attr PgmName = "IWUP"
+       Attr Text = "I"
+       Attr Value = 1
+     EndBody
+    EndObject
+    !/**
+    !  Bias and Integral part
+    !*/
+    Object BIWUP $Value
+     Body SysBody
+       Attr PgmName = "BIWUP"
+       Attr Text = "BI"
+       Attr Value = 2
+     EndBody
+    EndObject
+    !/**
+    !  Bias, Integral and Proportional part
+    !*/
+    Object BPIWUP $Value
+     Body SysBody
+       Attr PgmName = "BPIWUP"
+       Attr Text = "BPI"
+       Attr Value = 4
+     EndBody
+    EndObject
+    !/**
+    !  All parts of the controller are limited in OutWindup
+    !*/
+    Object BPIDWUP $Value
+     Body SysBody
+       Attr PgmName = "BPIDWUP"
+       Attr Text = "BPID"
+       Attr Value = 8
+     EndBody
+    EndObject
+  EndObject
+EndSObject
+
+
+
+