hj91 / node-red-contrib-easy-pid-controller

This Node-RED node provides a PID (Proportional-Integral-Derivative) controller functionality. It utilizes the simple-pid-controller package to perform the control logic.
GNU General Public License v3.0
1 stars 1 forks source link

I - value limit #1

Open kevstone122 opened 12 months ago

kevstone122 commented 12 months ago

Hello hj91 and thank you for the great controller. It was missing in Node Red something like this. Perfect really. I also want to start to program one, but now you make the first big step :) Thank you.

My ideas / improvements: -Integral part need some limit (Maybe parameter like -100% or +100%). Otherwise the I-part run to a big value, and if suddenly the act reach the set, the I-part need to go down again a long time.

These should just be suggestions. I would be happy if we could develop this together. Thank you in advance for reading my ideas!

Best regards Kevin

kevstone122 commented 12 months ago

One more thing. "Output" increase endless because of I-part. But "Value" for sensor doesn't change. Looks like I-part is not used for sensor signal?

hj91 commented 12 months ago

Hello Kevin - the second feature you wanted can be obtained by using functions with Node-RED context - i found using context tricky with custom nodes ...

also, contributions and code patches are welcomed so dont hesitate to fork it and add your enhancements - we can work on this ..

hj91 commented 12 months ago

One more thing. "Output" increase endless because of I-part. But "Value" for sensor doesn't change. Looks like I-part is not used for sensor signal?

I will need to investigate it in more details. if possbile - can you submit me your findings like sample image attached here ? Screenshot from 2023-08-07 22-28-13

kevstone122 commented 12 months ago

Hello

I just have build an simple test flow. So if i keep it run with an simple setpoint and process value which will not change, this happen like in the picture. image

The I-controller gain rises up endless --> Output also because of this. To limit now the output between -100 and +100 is not correct, because if i now change the Process value to -100 for example, the I-part need the same time to "run" down lets say backward. So the full controller is like hang up because of the I-part. Actually i have also not the correct idea how it will be done normally. But if you reach +100% or -100%, then i think the I-Part need to stop running. Because "more" is not possible. Anyway we have full controller output.

Also you can see, that the "value" has no decimal points.

Also after OFF / ON issue, we should clear the I-part i think. Because PID was off and so the I-part is like from old situation and therefor not correct. So it need to start again from 0 i think. What do you think?

kevstone122 commented 12 months ago

One more thing. "Output" increase endless because of I-part. But "Value" for sensor doesn't change. Looks like I-part is not used for sensor signal?

I will need to investigate it in more details. if possbile - can you submit me your findings like sample image attached here ? Screenshot from 2023-08-07 22-28-13

Oh this looks like Grafana....Actually i am working also on this, but still not able to run on my virtual maschine-system. I am sorry!

hj91 commented 12 months ago

Hi.

Instead of sending hardcoded values, try to send values using pid simulator.

Use this library https://github.com/hj91/simple-pid-controller to create virtual valve that will take input from this nodes sv and in turn send pv back to easy-pid-controller node which will then operate correctly..

Check the flow in examples/

Harshad Joshi

--

Bufferstack.IO ® Analytics Technology LLP is a Govt Of India recognized startup..

https://bufferstack.io

DISCLAIMER

This email and any files transmitted with it are intended solely for the person or the entity to whom they are addressed and may contain information which is Confidential and Privileged. Any misuse of the information contained in this email, including but not limited to retransmission or dissemination of the said information by person or entities other than the intended recipient is unauthorized and strictly prohibited. If you are not the intended recipient of this email, please delete this email and contact the sender immediately.

On Mon, 11 Sept, 2023, 03:24 kevstone122, @.***> wrote:

Hello

I just have build an simple test flow. So if i keep it run with an simple setpoint and process value which will not change, this happen like in the picture. [image: image] https://user-images.githubusercontent.com/57774255/266870057-e6662288-2df6-4da7-bd4b-96a524c4b1d0.png

The I-controller gain rises up endless --> Output also because of this. To limit now the output between -100 and +100 is not correct, because if i now change the Process value to -100 for example, the I-part need the same time to "run" down lets say backward. So the full controller is like hang up because of the I-part. Actually i have also not the correct idea how it will be done normally. But if you reach +100% or -100%, then i think the I-Part need to stop running. Because "more" is not possible. Anyway we have full controller output.

— Reply to this email directly, view it on GitHub https://github.com/hj91/node-red-contrib-easy-pid-controller/issues/1#issuecomment-1712950007, or unsubscribe https://github.com/notifications/unsubscribe-auth/AADAYOHMBNYEESLVHXCSMCLXZYZJ3ANCNFSM6AAAAAA4SDXA5Q . You are receiving this because you were assigned.Message ID: @.***>

hj91 commented 12 months ago

One more thing. "Output" increase endless because of I-part. But "Value" for sensor doesn't change. Looks like I-part is not used for sensor signal?

I will need to investigate it in more details. if possbile - can you submit me your findings like sample image attached here ? Screenshot from 2023-08-07 22-28-13

Oh this looks like Grafana....Actually i am working also on this, but still not able to run on my virtual maschine-system. I am sorry!

no problem - these values are obtained from a valve that gives its feedback ie pv back to easy-pid node - here you can observe the behaviour of system when sv is changed and how it tries to attain pv - so i suggest you to try and test it with a control device - either a real or virtual one.

kevstone122 commented 12 months ago

Hi. Instead of sending hardcoded values, try to send values using pid simulator. Use this library https://github.com/hj91/simple-pid-controller to create virtual valve that will take input from this nodes sv and in turn send pv back to easy-pid-controller node which will then operate correctly.. Check the flow in examples/ Harshad Joshi -- Bufferstack.IO ® Analytics Technology LLP is a Govt Of India recognized startup.. https://bufferstack.io DISCLAIMER This email and any files transmitted with it are intended solely for the person or the entity to whom they are addressed and may contain information which is Confidential and Privileged. Any misuse of the information contained in this email, including but not limited to retransmission or dissemination of the said information by person or entities other than the intended recipient is unauthorized and strictly prohibited. If you are not the intended recipient of this email, please delete this email and contact the sender immediately. On Mon, 11 Sept, 2023, 03:24 kevstone122, @.> wrote: Hello I just have build an simple test flow. So if i keep it run with an simple setpoint and process value which will not change, this happen like in the picture. [image: image] https://user-images.githubusercontent.com/57774255/266870057-e6662288-2df6-4da7-bd4b-96a524c4b1d0.png The I-controller gain rises up endless --> Output also because of this. To limit now the output between -100 and +100 is not correct, because if i now change the Process value to -100 for example, the I-part need the same time to "run" down lets say backward. So the full controller is like hang up because of the I-part. Actually i have also not the correct idea how it will be done normally. But if you reach +100% or -100%, then i think the I-Part need to stop running. Because "more" is not possible. Anyway we have full controller output. — Reply to this email directly, view it on GitHub <#1 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AADAYOHMBNYEESLVHXCSMCLXZYZJ3ANCNFSM6AAAAAA4SDXA5Q . You are receiving this because you were assigned.Message ID: @.>

Actually i understand your idea and it's totally clear, that the controller will work, if the PV will follow...This i can also simulate with my PV-Values. If PV is the same like SV, then the I-part will stop to get crazy. But exactly this situation i wanted to test. The limits of the controller. So also in reality what happen, if the PV does not follow the SV....because some part is broken for example. Then the I-part should not run away. Also after stop and start the value is still there. So how to reset this big value? Then the controller show after 24h this one in the picture below! My problem is, that i also don't know how to do it correct 100%, i just know from siemens controller, that this should not happen. So if you stop your simulation and PV will not change anymore because valve is broken. So after 24h you have a value like 23000%....So if you repair the valve, the system need again 23000% steps to go back down --> cannot be correct. Can you give it a try to freeze the I-calculation if the "output" will have 100%? And also set the I-part to zero after you stop the controller.

I tried to understand the code but i am not sure. Something like in line 74. if (pidTimer == null && controller.update(node.currentValue) <= 100 && controller.update(node.currentValue) >= -100 ). Am i correct? Can you try some scenario at your simulation PV-value. Just add some offset to the PV-value(Like valve get stock somewhere) and then controller run away.

Thank you a lot.

image

hj91 commented 12 months ago

Hi. Instead of sending hardcoded values, try to send values using pid simulator. Use this library https://github.com/hj91/simple-pid-controller to create virtual valve that will take input from this nodes sv and in turn send pv back to easy-pid-controller node which will then operate correctly.. Check the flow in examples/ Harshad Joshi -- Bufferstack.IO ® Analytics Technology LLP is a Govt Of India recognized startup.. https://bufferstack.io DISCLAIMER This email and any files transmitted with it are intended solely for the person or the entity to whom they are addressed and may contain information which is Confidential and Privileged. Any misuse of the information contained in this email, including but not limited to retransmission or dissemination of the said information by person or entities other than the intended recipient is unauthorized and strictly prohibited. If you are not the intended recipient of this email, please delete this email and contact the sender immediately. On Mon, 11 Sept, 2023, 03:24 kevstone122, @.**> wrote: Hello I just have build an simple test flow. So if i keep it run with an simple setpoint and process value which will not change, this happen like in the picture. [image: image] https://user-images.githubusercontent.com/57774255/266870057-e6662288-2df6-4da7-bd4b-96a524c4b1d0.png The I-controller gain rises up endless --> Output also because of this. To limit now the output between -100 and +100 is not correct, because if i now change the Process value to -100 for example, the I-part need the same time to "run" down lets say backward. So the full controller is like hang up because of the I-part. Actually i have also not the correct idea how it will be done normally. But if you reach +100% or -100%, then i think the I-Part need to stop running. Because "more" is not possible. Anyway we have full controller output. — Reply to this email directly, view it on GitHub <#1 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AADAYOHMBNYEESLVHXCSMCLXZYZJ3ANCNFSM6AAAAAA4SDXA5Q . You are receiving this because you were assigned.Message ID: @.**>

Actually i understand your idea and it's totally clear, that the controller will work, if the PV will follow...This i can also simulate with my PV-Values. If PV is the same like SV, then the I-part will stop to get crazy. But exactly this situation i wanted to test. The limits of the controller. So also in reality what happen, if the PV does not follow the SV....because some part is broken for example. Then the I-part should not run away. Also after stop and start the value is still there. So how to reset this big value? Then the controller show after 24h this one in the picture below! My problem is, that i also don't know how to do it correct 100%, i just know from siemens controller, that this should not happen. So if you stop your simulation and PV will not change anymore because valve is broken. So after 24h you have a value like 23000%....So if you repair the valve, the system need again 23000% steps to go back down --> cannot be correct. Can you give it a try to freeze the I-calculation if the "output" will have 100%? And also set the I-part to zero after you stop the controller.

I tried to understand the code but i am not sure. Something like in line 74. if (pidTimer == null && controller.update(node.currentValue) <= 100 && controller.update(node.currentValue) >= -100 ). Am i correct? Can you try some scenario at your simulation PV-value. Just add some offset to the PV-value(Like valve get stock somewhere) and then controller run away.

Thank you a lot.

image

There are multiple factors as to why i is getting saturated..

Study this code https://github.com/hj91/simple-pid-controller/blob/main/tolerance.js

Observe how it works.

hj91 commented 10 months ago

Closing it for now.