It seems to me that there are two problems to address in your application:
(1) A noisy process variable.
(2) and process disturbance.
1) Noisy process variable:
First I suggest you to trend the variable (most recorders can output a text like file which data can easily be manipulated with Excel) .... If despite of the spikes and wiggles that the signal could present, its average describes the behaviour of the process variable … good news! .. The noisy can be isolated.
You could use for instance, a low pass filters (process people called ‘lag’ filter) of first order or higher. If you are using an AB SLC 5/04 or 5/05, I suggest you to implement the digital filter in the ‘STI’ (periodic execution routine) …
Use an exponentially weighted moving average to implement the low pass filter:
This site explains very well how to implement the discrete filter in software:
If a higher order is required, then feed the output of the filter again through the filter a second time (2nd order) or a third time (3rd order) and so on …. The cut frequency (or Tf – see link) has to be chosen to get rid of or damp the noise as much as possible. Again, I found Excel quite useful for testing and simulating the filter operation.
Note: The cut frequency you choose for your filter will also be the interval between executions of your STI routine.
Another technique is characterizing the controller’s error. In order to do this you need to know it better.
2) Process disturbance:
I agree with a comments made earlier in this forum … please get rid of the derivative. Depending on the algorithm you are using, you could initially set to ZERO the integral value and tune the proportional and after you are happy with that you could then, start tunning the integral
Where process disturbance are a serious problem, it is common practice to de-tune the controller to make it less sensible.
I hope this help,
Cheers