pietervdb
Member
Hello
I’m programming a weighing system for precision weigh feeders.
How is the setup build. We’ve got a feeder with a motor who is VFD controlled. (4-20mA), the feeder is placed on a load cell who is connected to a Siemens Siwarex module.( Precision: 1 digit is about 3grams. Load cell is made for 100kg, Siwarex is 15bit.)
Basic method:
Feeders runs at 100% for 1 minute, calculate the difference in weight multiply it with 60 and you have the max feed rate of your feeder. For example 20 kg/h.
When you want to dose at 13,2 kg/h, you set the VFD to 13,2 / 20 * 100 = 66%.
Now the product doesn’t move always at the same speed in the feeder and so I don’t always have 13,2 kg/h so I want to put an continuous control on it.
This is how i made it so far:
I start the feeder at 13,2kg/h or 66%.
Every five seconds I calculate the difference in weight and put this in a table, when I have five measurements I calculate the average. This average multiply with 3600 and divided by 5 gives me the actually rate in kg/u. Why five measurements? Because the difference in weight is not always the same and so the input for the PID would vary to much.
For PID control a use FB41 (Continuous Control with SFB 41/FB 41 "CONT_C").
My setpoint or “SP_INT” is 13,2 kg/h, my process variable or “PV_IN” is my calculated actually rate.
I and D action are for the moment disabled. P action or “GAIN” is set to 0,05 (It’s a slow process)
Now I have on the output or “LMN“ the percentage I have to add to the VFD frequency, up or down, to get my wanted setpoint. So I add the LMN value to the setpoint (“SP_INT”).
In code it looks like this: "DB85_PID_Unit".Unit[1].VOLUMETRICAL_LMN is the value of SP_INT before the PID runs.
O "DB83_Actual_Unit".Unit[1].PID_Unit
O "DB55_Fill_Unit".Unit[1].Refill
O "DB84_Doseer_Unit".Unit[1].Locked
= L 18.0
A(
A L 18.0
A(
L "DB85_PID_Unit".Unit[1].LMN
L "DB85_PID_Unit".Unit[1].LASTLMN
<>R
)
FP DB85.DBX 148.0
JNB _005
L "DB85_PID_Unit".Unit[1].VOLUMETRICAL_LMN
L "DB85_PID_Unit".Unit[1].LMN
+R
T "DB85_PID_Unit".Unit[1].VOLUMETRICAL_LMN
AN OV
SAVE
CLR
_005: A BR
)
JNB _006
L "DB85_PID_Unit".Unit[1].LMN
T "DB85_PID_Unit".Unit[1].LASTLMN
_006: NOP 0
A L 18.0
JNB _007
L "DB85_PID_Unit".Unit[1].VOLUMETRICAL_LMN
T "DB85_PID_Unit".Unit[1].OUTPUT_VSD_PERCENT
_007: NOP 0
Every time the output LMN changes the frequency is recalculated. You can’t just continuous add the “LMN” value to ”SP_INT” because when LMN + SP_INT reaches the setpoint that is needed for my actually rate, the PID change the LMN value to zero percent and so it falls back on the setpoint frequency.
For example setpoint = 11kg/h (or calculated 55% VFD frequency). “PV_IN” is calculated first LMN output = 2,81 -> new VFD frequency 57,81%. “PV_IN” is calculated second LMN output = 0,56 -> new VFD frequency 58,37%, “PV_IN” is calculated third LMN output = -1,01% - new VFD frequency 57,36% and further on.
But here is the problem when I add the “I” action, the manipulated value “LMN” changes every moment and so every time “LMN” is added to the setpoint and in no time the VFD frequency change to a 100% or to 0% and back to a 100%. Even when LMN changes only 0,00001 the LMN value is added to the VSD frequency.
Now I’m looking for a way to program the VSD frequency on changes of LMN but it must be independent of the first non PID VSD frequency. It can use the first VSD frequency as start but further on It can’t be use any more. This is because when something happened during the maximum rate test, all other calculations would be wrong.
Does anyone have some advice? Maybe an other way of calculating my process variable (PV_IN).
Thanx
Pieter
I’m programming a weighing system for precision weigh feeders.
How is the setup build. We’ve got a feeder with a motor who is VFD controlled. (4-20mA), the feeder is placed on a load cell who is connected to a Siemens Siwarex module.( Precision: 1 digit is about 3grams. Load cell is made for 100kg, Siwarex is 15bit.)
Basic method:
Feeders runs at 100% for 1 minute, calculate the difference in weight multiply it with 60 and you have the max feed rate of your feeder. For example 20 kg/h.
When you want to dose at 13,2 kg/h, you set the VFD to 13,2 / 20 * 100 = 66%.
Now the product doesn’t move always at the same speed in the feeder and so I don’t always have 13,2 kg/h so I want to put an continuous control on it.
This is how i made it so far:
I start the feeder at 13,2kg/h or 66%.
Every five seconds I calculate the difference in weight and put this in a table, when I have five measurements I calculate the average. This average multiply with 3600 and divided by 5 gives me the actually rate in kg/u. Why five measurements? Because the difference in weight is not always the same and so the input for the PID would vary to much.
For PID control a use FB41 (Continuous Control with SFB 41/FB 41 "CONT_C").
My setpoint or “SP_INT” is 13,2 kg/h, my process variable or “PV_IN” is my calculated actually rate.
I and D action are for the moment disabled. P action or “GAIN” is set to 0,05 (It’s a slow process)
Now I have on the output or “LMN“ the percentage I have to add to the VFD frequency, up or down, to get my wanted setpoint. So I add the LMN value to the setpoint (“SP_INT”).
In code it looks like this: "DB85_PID_Unit".Unit[1].VOLUMETRICAL_LMN is the value of SP_INT before the PID runs.
O "DB83_Actual_Unit".Unit[1].PID_Unit
O "DB55_Fill_Unit".Unit[1].Refill
O "DB84_Doseer_Unit".Unit[1].Locked
= L 18.0
A(
A L 18.0
A(
L "DB85_PID_Unit".Unit[1].LMN
L "DB85_PID_Unit".Unit[1].LASTLMN
<>R
)
FP DB85.DBX 148.0
JNB _005
L "DB85_PID_Unit".Unit[1].VOLUMETRICAL_LMN
L "DB85_PID_Unit".Unit[1].LMN
+R
T "DB85_PID_Unit".Unit[1].VOLUMETRICAL_LMN
AN OV
SAVE
CLR
_005: A BR
)
JNB _006
L "DB85_PID_Unit".Unit[1].LMN
T "DB85_PID_Unit".Unit[1].LASTLMN
_006: NOP 0
A L 18.0
JNB _007
L "DB85_PID_Unit".Unit[1].VOLUMETRICAL_LMN
T "DB85_PID_Unit".Unit[1].OUTPUT_VSD_PERCENT
_007: NOP 0
Every time the output LMN changes the frequency is recalculated. You can’t just continuous add the “LMN” value to ”SP_INT” because when LMN + SP_INT reaches the setpoint that is needed for my actually rate, the PID change the LMN value to zero percent and so it falls back on the setpoint frequency.
For example setpoint = 11kg/h (or calculated 55% VFD frequency). “PV_IN” is calculated first LMN output = 2,81 -> new VFD frequency 57,81%. “PV_IN” is calculated second LMN output = 0,56 -> new VFD frequency 58,37%, “PV_IN” is calculated third LMN output = -1,01% - new VFD frequency 57,36% and further on.
But here is the problem when I add the “I” action, the manipulated value “LMN” changes every moment and so every time “LMN” is added to the setpoint and in no time the VFD frequency change to a 100% or to 0% and back to a 100%. Even when LMN changes only 0,00001 the LMN value is added to the VSD frequency.
Now I’m looking for a way to program the VSD frequency on changes of LMN but it must be independent of the first non PID VSD frequency. It can use the first VSD frequency as start but further on It can’t be use any more. This is because when something happened during the maximum rate test, all other calculations would be wrong.
Does anyone have some advice? Maybe an other way of calculating my process variable (PV_IN).
Thanx
Pieter