How to use RSLogix 5000 PID for controlling a valve with open/close command inputs?

Join Date
Mar 2015
Location
Mariupol, Ukraine
Posts
71
Hello!
I need to control a sinter moisture in a mixing drum. I have a moisture meter with analog output 4-20 mA connected to analog input of PLC and a control valve on a water pipeline for pouring water into mixing drum . The control valve has two inputs (open/close commands) and an analog feedback signal of its current position (4-20 mA, also connected to PLC analog input).
I use a standard PID instruction in RSLogix 5000. But it has only analog output, so please help me and give any advice how could I convert control value signal of my PID into open/close commands for the valve.
My PLC is ControlLogix 1756-L83.
Thanks in advance!!!
Best regards, Oleksandr
 
Last edited:
Use the control output as the required valve position, %. Assume a deadband of allowable position difference between actual position and required position. Add it to the output for a max position limit setting and subtract it to create a min position setting. If the feedback is above max turn on the close discrete output. If the feedback is below min the turn on the open output. If it is between the two, then do nothing.

If the valve travel is slow or the deadband is large you can use continuous travel. If the valve moves fast then use a series of timed pulses, with a delay between each pulse, to move the valve.

The above is essentially what the valve positioner card on a valve with analog input does. The motor is either on on off in each direction, and the card just compares the command signal to the feedback signal and operates open/close contactors.
 
Thank you very much for fast reply!
Mr. Jenkins, do you mean something like this?
I make little test subroutine (control value output from PID move to vc_setpoint):

SBR (vc_setpoint,vc_act_pos,vc_d);
//If current position is greater than setpoint plus deadband then close:
If (vc_act_pos>(vc_setpoint+vc_d)) Then
vc_close := 1;
vc_open :=0;
//Else If current position is lower than setpoint minus deadband then open:
ELSIF (vc_act_pos<(vc_setpoint-vc_d)) Then
vc_close := 0;
vc_open :=1;
//Else - stop:
ELSE
vc_close := 0;
vc_open :=0;
END_IF;
RET(vc_open,vc_close);
 
Thank you very much for fast reply!
Mr. Jenkins, do you mean something like this?
I make little test subroutine (control value output from PID move to vc_setpoint):

SBR (vc_setpoint,vc_act_pos,vc_d);
//If current position is greater than setpoint plus deadband then close:
If (vc_act_pos>(vc_setpoint+vc_d)) Then
vc_close := 1;
vc_open :=0;
//Else If current position is lower than setpoint minus deadband then open:
ELSIF (vc_act_pos<(vc_setpoint-vc_d)) Then
vc_close := 0;
vc_open :=1;
//Else - stop:
ELSE
vc_close := 0;
vc_open :=0;
END_IF;
RET(vc_open,vc_close);

Code looks fine. You might need something more sophisticated though, it depends on how fast the valve moves and other needs.

What you are lacking is that you are stopping as soon as you are inside the deadband. This could lead to a lot of starts and stops on your equipment. One solution could be to start if you are outside the deadband but don't stop until you passed the actual setpoint.

Another thing is how fast the valve stops moving. You might have to make a temporary setpoint to adjust for the movement of the valve after you stopped.

If it moves fast or you need to position it very accurately, you might also need to pulse the output when you get closer.

Another thing to think about is how often the output changes and how often the motor is started and stopped. There might be mechincal contraints to how often you can run the motor. You might have to incorporate some kind of delay in that case so instead of start and stopping and then starting and stopping again, it would do one movement and then delay. The next movement would then be longer. This is a little different to how deadband works.

Finally, if the valve actuator moves slowly you might have to take that into account in your PID loop. Idealy you would have an output rate limiting setting in the loop (often in % output change allowed per minute) and you'd set that to the same speed the motor actually can open and close the valve. Unfortunately most PLCs don't have those more advanced options available but you could check for it.
 
Last edited:

Similar Topics

Hi, Long time not in the forum, and not in the programming. I´m getting back. I was issued a conversion from RSLogix 500 to RSLogix 5000 (studio...
Replies
0
Views
1,289
So I have a PID loop on an 1756-L61 running V17 software just for background. Also the PID PV is a pressure transmitter and the CV is speed sent...
Replies
1
Views
894
Hi All, I have a PID control application that I would like to get your opinions on. As I am reality new to PID loops I am struggling somewhat...
Replies
14
Views
4,287
Hi, I am confuse with the scaling tab on the PID dialog box. On the Process variable I am using a tag that is already scale. 0 to 16 Feet Level...
Replies
2
Views
2,426
Hi I am trying to understand the best method of providing bumpless transfer to the PID function (not PIDE) The existing code shows In Manual...
Replies
10
Views
4,619
Back
Top Bottom