Recommended Posts

How is one supposed to use the autotuning function? sometimes it seems to work perfectly and get my PV right to the setpoint. Other times it does literally nothing and just holds the PV at a seemingly random value. 


I'd say approximately 10% of the time I get values other than P=I=D=0 to set my parameters to 

Edited by adamLL
Link to comment
Share on other sites

Little more info if that helps:

I'm trying to use a PID to heat a metal element connected to a 400W voltage controlled power supply to a set temperature. I am measuring the temperature with a pyrometer that can measure 600 to 1600C. My process variable is the temperature of the element measured by the pyrometer, my set point is a user controlled value between 0 and 1600C, and my output channel is the voltage that the power supply gives

Link to comment
Share on other sites

DAQFactory uses a perturbation type autotune.  It is not necessarily the easiest autotune, but it does allow it to be used in systems that cannot be varied significantly during tuning.  What you need to do is get the system at a stable setpoint under PID control.  You can usually achieve this by setting I and D to 0 and increasing P until your PV hits your SP without significant oscillating overshoot.  Once you have this, set the auto-tune step to the amount above/below the current output you'd the autotune to adjust.  You should then let it run for several cycles of plus/minus the output. 

That said, it is important to note that the output of the PID loop really needs to range into the negative, and for that reason I always suggest folks leave the output range to -100 to 100.  If you don't let it range negative, then whenever the PV is above the SP (in a forward PID loop), the PID loop is just going to output 0.  This makes it impossible for the PID loop to provide a maintenance output variable, i.e. providing a little heat to maintain the temperature.

Since your output is likely only positive you will need to set the output variable of the PID loop to a Test D to A channel, then in the Event for that channel, scale the value and send it to your actual output.  So, if you name that OV Test channel PIDOut, and your actual I/O point for controlling your heater is called HeaterOut, and it ranges from 0 to 4000 you would put this in the Event for the PIDOut channel:

HeaterOut = (PIDOut + 100) * 20

There are other ways to do this, including using a global variable, the Event of the PID loop, a Conversion on your output channel etc, but the example I gave is the simplest.

As to the left axis scaling, you should be able to double click on the axis to change its parameters.


Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.