ControlLogix PID Setup

Greetings James,

I'm sorry that I haven't had time to follow this thread ... and I only have time now for a quick comment ... but I can tell you this much at least ... your ControlLogix PID will not work right since you have the PID located on an unconditional rung in a "continuously executed" ladder ... this means that you're executing the PID each and every time the rung gets scanned ... your Integral and Derivative settings will be totally meaningless with this type of programming ...

trigger.JPG


you're also going to have trouble with that "two-pid-with-a-limit" arrangement ... I'll try to take a closer look as soon as I get a chance - but the way my schedule is going right now, it will be at least a couple of weeks or so ... hopefully you'll have it all nailed down long before that ...

I did notice that several critical settings have been left "empty" in the two PIDs ... what's that all about? ... how much experience with PID have you had? ... and on which PLC platforms? ... if we knew the answer to that, then it might make it easier to stear you in the right direction ...

I just noticed that the program you posted has only these two PID rungs ... is this just a stripped down "sample" program? ... if so, are the PIDs actually programmed in a "periodic task" in the real program? ... if so, what do you have the task scheduled for? ...
 
Last edited:
JamesWSY said:
How to setup PI function block for dancer loop? Any idea or suggestion?
James
Have a look at the attached "basic" loop.
You may need to scale line speed and rewind speed.
 
JamesWSY said:
I have difficulties to setup clx PID for dancer control, the SP is tension ref and PV is dancer feedback position. How to have correct PID setup to maintain dancer in require position? Any tips or suggestion?
Thank you.
James

If you want control position, you can't use tension as the SP. Fix the SP at the dancer position you want. Use an entirely different PID block to control tension.

PID for winder speed is very simple and flexible, and once tuned will need little to no further attention. If you have a line that needs to stop and start frequently or suddenly, I have a better method ...
 
Thank you for reply and ideas.

From Gerry sample, I get idea to develope better winder speed control.

I Have separated tension PID and Dancer PID.I need to have line speed to start/stop frequently, how to control it? How about inertia compensation during line accel and decel? I need some sample code on how to control it.
James
 
If you can estimate the winder diameter and estimate roughly what the motor speed should be, use that as your basis.

Scale it so that it repesents the relationship of the empty to full roll versus the line. For example at 1.6 times the line speed reference, the winder core surface speed matches. When the roll is full, the ratio becomes 0.2. Once these are known, just scale the winder diameter into this range. I'll Call it Wind_Factor.

Use the PID to create a trim signal of +/- 20% based on the dancer position. You MUST freeze the PID action when the line stops or it will saturate. With this method, the PID gains can be set quite low to eliminate speed oscillations. It's important to have a line speed signal that accurately matches actual line speed suring accel and decel. Sometimes I've have to emulate a VFD ramp rate in the PLC with a timer to get the extreme precision I wanted. Just depends on how much dancer movment you can tolerate during accel/decel.

I normally use the whole range of the PID function, then scale it externally to a value of 0.8 to 1.2. I'll call it Dancer_Factor. Then you just multiply line_speed times wind_factor times dancer_factor, limit check the result and send it to the winder drive speed reference.

An additional note: If a full dancer position will inhibit the line from running, you'll be stopped in a catch 22. The line will be waiting for the winder to run to lift the dancer, and the winder will be running at 0 times wind_factor times dancer factor which is of course 0.

The solution for that is to simply move a jog speed value into the winder speed reference only when this condtion exists to get the line started.

That's what I do, from memory ... don't have access to the software anymore ... they've turned me into a mechanic ...
 
Thank you Ron.
The logix5K just the sample of my PID. I setup the PID in periodic task with 10 mS and priority is 7. The Kp=15, Ki=100, Independent, SP-PV, derivatif of PV. The PV is scale from 0 to 30, SP is 15. The CV will scale from 0.8 to 1.2 (using SCL instruction)as trim speed. I want to maintain dancer position is mid-pos (SP=15).If PV start to increase, the CV still stay on 100% and will change to )% is SP=PV. What I want is CV will decrease since PV increase and will be 0 if SP=PV.I try to decrease the Kp and Ki to smallest value but the result is not change.
Any idea?
Thank you again.
James
 
I try to run the line and I get 100 MPM with good stability. Using your formula, the diameter calculation close to actual diameter, just difference about 7-8% because the line speed I get from another casting roll (the section is casting roll - cooling - pull roll #1 - treater - pull roll #2 - winder)but this is enough to scale the diameter from core to full roll. I used following formula:
Winder_Ref = (Dancer_Trim_Pct * Line_Spd_ref) / Build_Up
Build_Up = Diameter_Calc / Core_Dia (core = 94 mm, full roll = 850 mm)
The Dancer control are using PI block with Kp=0.7, Wld=0.03. The input is from dancer_pos_fdbk. I use Scurve (SCRV) to ramp dancer pos fdbk.
LIne speed accel and decel is 100 MPM / sec.
I run the line with 100 MPM and build up ration increase to arround 2.3 and I try to increase line speed to 120 MPM, the dancer start to oscilate from minimum to maximum position. I try to adjust the PI Kp and Wld but not help, I try to decrease the line speed to 80 MPM and the problem is still exist.
How to solve this problem?
Thank you for any ideas or solution.
James
 
JamesWSY said:
I use Scurve (SCRV) to ramp dancer pos fdbk.

How to solve this problem?
Thank you for any ideas or solution.
James

Why are you doing this to your feedback? It will make the feedback element out of phase with the control output. Get rid of the SCurve generator, and apply the feedback directly to the PID.
 
James,

With the priority number of the PID task set at 7, any task with a lower number will interupt it to execute its scan. This means that your task will never execute every 10ms as it is set for. Unless there are NO other tasks with lower priority numbers, the scan time of the PID task could be as low as 10ms or as high as ???? depending upon the setup of the program. The task with the PID's in it should be set for the priority number 1. This will make sure that it is executed at the same time intervals. Without the time being constant; it will be a @#$%* to try and tune. Hope that helps you.

Sportster
 
JamesWSY said:
The input is from dancer_pos_fdbk. I use Scurve (SCRV) to ramp dancer pos fdbk.
As rdrast said, why?

JamesWSY said:
LIne speed accel and decel is 100 MPM / sec.
I run the line with 100 MPM and build up ration increase to arround 2.3 and I try to increase line speed to 120 MPM, the dancer start to oscilate from minimum to maximum position. I try to adjust the PI Kp and Wld but not help, I try to decrease the line speed to 80 MPM and the problem is still exist.
I'm not at all surprised given your manipulation of the feedback and the accel/decel rates.

You should be using the s-curve block to ramp the line speed, not trying to use it as a filter. Use lower values for accel/decel and a suitably low value for jerk so that all sections of your line can accelerate/decelerate in unison, despite their differing inertias.

I suggest scaling your parameters to mm/sec (120 M/min = 2000 mm/sec). Then use accel/decel of say 1000 mm/sec/sec and start with jerk of say 50 mm/sec/sec/sec. Peak acceleration will be limited by the jerk value up to a point depending on the magnitude of the change in line speed and the values you use.

Increase jerk to decrease ramp time, decrease jerk to soften the disturbance from speed changes. High values of jerk turn the s-curve into a linear ramp.
 
Thank you all for the ideas and solution.
I run the winder on 170 MPM, the dancer is stable in mid-pos, the P gain is 0.7 and I gain is 0.03, dancer trim pct is scale to +/- 30%. I build up ratio >2.5 then dancer trim oct will increase to
-26% to maintain dancer in mid-pos. I remove scrv from dancer pos fdbk and add scrv to line speed (in mm/sec), deacrease acel and decel. How to calculate correct acel and decel base on material build-up? It is related to WR2 compensation during line acel or decel?
James
 

Similar Topics

Morning all, Could anyone shed some light on whats happening with my PID Loop? On our plant we have a 'fast ramp' on the PID Instruction done...
Replies
14
Views
7,652
Hello, I have a PID that I am using for an oxygen valve that regulates the pressure. Often when the header pressure is too low, the output will...
Replies
4
Views
1,295
Hello all, I have a pump that has operational limits 15-100% Speed (9-60Hz). 1. On the PID instruction would you limit (.MINO=15% and...
Replies
21
Views
5,186
Why is my PID .PV (Process Variable) getting continually overwritten with some strange value every time the rung my PID Instruction is on goes...
Replies
4
Views
2,139
Hi there, I have a PID which I limit at MINO = 25% and MAXO = 100%. When the PID runs for the first time it takes time to start reacting at 25+%...
Replies
3
Views
3,074
Back
Top Bottom