aley
Member
TL;DR I'm trying to control a valve that has some backlash - what's the best way to control this based on flow sensor output?
I've got a valve for process water. Historically, it's been controlled with a knob; the operators walk up to the equipment, look at what's coming out, think, "This should be a little wetter," and open the valve a bit more. That's been the plant standard for 38 years, but really wasn't good enough in 1982 when the plant was built, and sure isn't good enough now.
As part of a controls redo (I've replaced the 1982-vintage relay logic with a Micrologix 1400) I've put in a water valve controlled by an analog output from the PLC (Valworx 565467A), and I've added a flow sensor (Keyence FD-Q20C) on an analog input. Now I'm trying to close the control loop.
My issue is that there's some backlash in the valve. The backlash in the region where our process usually runs is around 10%; I haven't measured it elsewhere, but it's probably not too far off that across the board.
My first thought had been to put in a PID loop, using the 4-20mA signal from the FD-Q20C as the process variable and the valve position as the control variable. All my experience with PIDs has been with heaters, though, where backlash isn't a factor. It seems like I'm going to get wild oscillations with the valve and its backlash, and even if I can tune the loop to provide acceptable control I'll end up with the valve opening and closing a lot more than it should have to. I've thought about adding some code to make sure the valve is always on the same side of the backlash, but this will slow the process down quite a bit and may not do much to solve the issue.
I've been thinking that I might do better to roll my own control loop - for instance, upon the user changing the setpoint on the HMI, I could move the valve to a position based on a lookup table (approximate correct position), then add the error in flow rate back into the valve position to drive it toward the correct value, perhaps with different coefficients depending on whether the error is positive or negative so that it will quickly cross the backlash, overshoot, then slowly come back toward the correct setpoint. Seems like a good way to have the valve hunt for position, though, which is going to wear out the actuator mechanism sooner.
Any suggestions? I'm sure I'm not the only one who's ever faced controlling a system with backlash, and somebody's already figured out more good ways to do it than I'll ever come up with.
I've got a valve for process water. Historically, it's been controlled with a knob; the operators walk up to the equipment, look at what's coming out, think, "This should be a little wetter," and open the valve a bit more. That's been the plant standard for 38 years, but really wasn't good enough in 1982 when the plant was built, and sure isn't good enough now.
As part of a controls redo (I've replaced the 1982-vintage relay logic with a Micrologix 1400) I've put in a water valve controlled by an analog output from the PLC (Valworx 565467A), and I've added a flow sensor (Keyence FD-Q20C) on an analog input. Now I'm trying to close the control loop.
My issue is that there's some backlash in the valve. The backlash in the region where our process usually runs is around 10%; I haven't measured it elsewhere, but it's probably not too far off that across the board.
My first thought had been to put in a PID loop, using the 4-20mA signal from the FD-Q20C as the process variable and the valve position as the control variable. All my experience with PIDs has been with heaters, though, where backlash isn't a factor. It seems like I'm going to get wild oscillations with the valve and its backlash, and even if I can tune the loop to provide acceptable control I'll end up with the valve opening and closing a lot more than it should have to. I've thought about adding some code to make sure the valve is always on the same side of the backlash, but this will slow the process down quite a bit and may not do much to solve the issue.
I've been thinking that I might do better to roll my own control loop - for instance, upon the user changing the setpoint on the HMI, I could move the valve to a position based on a lookup table (approximate correct position), then add the error in flow rate back into the valve position to drive it toward the correct value, perhaps with different coefficients depending on whether the error is positive or negative so that it will quickly cross the backlash, overshoot, then slowly come back toward the correct setpoint. Seems like a good way to have the valve hunt for position, though, which is going to wear out the actuator mechanism sooner.
Any suggestions? I'm sure I'm not the only one who's ever faced controlling a system with backlash, and somebody's already figured out more good ways to do it than I'll ever come up with.