Skip to main content
deleted 1086 characters in body
Source Link
reddy
  • 13
  • 1
  • 5

Edited for doubts.

I have tried your code like this, i am not sure this is the correct way or not.

int temperature;
//int setpoint; // i have commented these because we never used.
//int status = 0;
int pulses = 0;
//int integral = 4;
//int derivative = 5;
int upperTemp = 1000; //100.0C
int upperLimit = 100; //pulses per time frame // i can take 100 pulses per sec.


 runtime //make a timer that runs and updates temperature value...lets say every second
{
  read temperature; //every second
  temperature *= 10; //multiply by 10 for decimal place, but still keeping in integer
  pulses = map(temperature, upperTemp, 0, 0, upperLimit);
  
  //take this value of pulses to update the timer interval
   I didn't understand the above line if i am right then here i need to call the       
   timer like 
   if(pulses> somevalue)
     call timer
   else
     no call
  }

//borrowed from arduino
long map(long x, long in_min, long in_max, long out_min, long out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

I have some question here

  1. This method seems to be different than previous because we never used gains or error in this method?
  2. I understand that "upperTemp" is the setpoint value.

I have tried with simple example like this

 int temperature = 20;
 int pulses = 0;
 int upperTemp = 800; //80.0C
 int upperLimit = 100; //pulses per time frame // i can take 100 pulses per sec.

 read temperature; //every second which is 20 in this case
 temperature *= 10; //multiply by 10 for decimal place, 20*10 =200;
  pulses = map(temperature, upperTemp, 0, 0, upperLimit);// map(200,800,0,0,100)

 //then map function will return pulses = 75;
  
//then here i don't understand that much but i am thinking like that

if(pulses> 75)
  switch on;
else 
   switch off; 

I am not sure that i am doing right! can you suggest me some more here.

Edited for doubts.

I have tried your code like this, i am not sure this is the correct way or not.

int temperature;
//int setpoint; // i have commented these because we never used.
//int status = 0;
int pulses = 0;
//int integral = 4;
//int derivative = 5;
int upperTemp = 1000; //100.0C
int upperLimit = 100; //pulses per time frame // i can take 100 pulses per sec.


 runtime //make a timer that runs and updates temperature value...lets say every second
{
  read temperature; //every second
  temperature *= 10; //multiply by 10 for decimal place, but still keeping in integer
  pulses = map(temperature, upperTemp, 0, 0, upperLimit);
  
  //take this value of pulses to update the timer interval
   I didn't understand the above line if i am right then here i need to call the       
   timer like 
   if(pulses> somevalue)
     call timer
   else
     no call
  }

//borrowed from arduino
long map(long x, long in_min, long in_max, long out_min, long out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

I have some question here

  1. This method seems to be different than previous because we never used gains or error in this method?
  2. I understand that "upperTemp" is the setpoint value.

I have tried with simple example like this

 int temperature = 20;
 int pulses = 0;
 int upperTemp = 800; //80.0C
 int upperLimit = 100; //pulses per time frame // i can take 100 pulses per sec.

 read temperature; //every second which is 20 in this case
 temperature *= 10; //multiply by 10 for decimal place, 20*10 =200;
  pulses = map(temperature, upperTemp, 0, 0, upperLimit);// map(200,800,0,0,100)

 //then map function will return pulses = 75;
  
//then here i don't understand that much but i am thinking like that

if(pulses> 75)
  switch on;
else 
   switch off; 

I am not sure that i am doing right! can you suggest me some more here.

deleted 1086 characters in body
Source Link
reddy
  • 13
  • 1
  • 5

I am trying to implement PI control algorithm in c#. I found some help in internet and i understand the formula how to use. I have measured value(PV)= 20 °C and set point (SP)= 80°C; I would like to update every 2 sec in time. once the measured value reach to setpoint the controller has to switch off like that.

I found this code link to pid algorithm

but what i need is how to calculate gain factors Kp and Ki gains as well as what about dt. I am neglecting Derivative. So please can anyone explain me how to calculate those gain factors. I am using shimaden SR90 digital controller(i bought this). I found some factors in the manual but i am not sure can i use those gain factors.

Added code according to answer.

int temperature;
int setpoint;
int status = 0;
int pulses = 0;
int integral = 4;
int derivative = 5;
int upperTemp = 1000; //100.0C
int upperLimit = 100; //pulses per time frame

//WITH PULSING
runtime //make a timer that runs and updates temperature value...lets say every second
{
  read temperature; //every second
  temperature *= 10; //multiply by 10 for decimal place, but still keeping in integer
  pulses = map(temperature, upperTemp, 0, 0, upperLimit); //when temperature increases, 
                                                                           
       //pulses decreases...vice versa
  //take this value of pulses to update the timer interval
  //timer's interval = pulses per second or minute
 
}

timer
{
  if(Relay On)
    Relay Off;
  else
    Relay On;   
}

//borrowed from arduino
long map(long x, long in_min, long in_max, long out_min, long out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

I am trying to implement PI control algorithm in c#. I found some help in internet and i understand the formula how to use. I have measured value(PV)= 20 °C and set point (SP)= 80°C; I would like to update every 2 sec in time. once the measured value reach to setpoint the controller has to switch off like that.

I found this code link to pid algorithm

but what i need is how to calculate gain factors Kp and Ki gains as well as what about dt. I am neglecting Derivative. So please can anyone explain me how to calculate those gain factors. I am using shimaden SR90 digital controller(i bought this). I found some factors in the manual but i am not sure can i use those gain factors.

Added code according to answer.

int temperature;
int setpoint;
int status = 0;
int pulses = 0;
int integral = 4;
int derivative = 5;
int upperTemp = 1000; //100.0C
int upperLimit = 100; //pulses per time frame

//WITH PULSING
runtime //make a timer that runs and updates temperature value...lets say every second
{
  read temperature; //every second
  temperature *= 10; //multiply by 10 for decimal place, but still keeping in integer
  pulses = map(temperature, upperTemp, 0, 0, upperLimit); //when temperature increases, 
                                                                           
       //pulses decreases...vice versa
  //take this value of pulses to update the timer interval
  //timer's interval = pulses per second or minute
 
}

timer
{
  if(Relay On)
    Relay Off;
  else
    Relay On;   
}

//borrowed from arduino
long map(long x, long in_min, long in_max, long out_min, long out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

I am trying to implement PI control algorithm in c#. I found some help in internet and i understand the formula how to use. I have measured value(PV)= 20 °C and set point (SP)= 80°C; I would like to update every 2 sec in time. once the measured value reach to setpoint the controller has to switch off like that.

I found this code link to pid algorithm

but what i need is how to calculate gain factors Kp and Ki gains as well as what about dt. I am neglecting Derivative. So please can anyone explain me how to calculate those gain factors. I am using shimaden SR90 digital controller(i bought this). I found some factors in the manual but i am not sure can i use those gain factors.

added 60 characters in body
Source Link
reddy
  • 13
  • 1
  • 5

I am trying to implement PI control algorithm in c#. I found some help in internet and i understand the formula how to use. I have measured value(PV)= 20 °C and set point (SP)= 80°C; I would like to update every 2 sec in time. once the measured value reach to setpoint the controller has to switch off like that.

I found this code link to pid algorithm

but what i need is how to calculate gain factors Kp and Ki gains as well as what about dt. I am neglecting Derivative. So please can anyone explain me how to calculate those gain factors. I am using shimaden SR90 digital controller(i bought this). I found some factors in the manual but i am not sure can i use those gain factors.

Added code according to answer.

int temperature;
int setpoint;
int status = 0;
int pulses = 0;
int integral = 4;
int derivative = 5;
int upperTemp = 1000; //100.0C
int upperLimit = 100; //pulses per time frame

//WITH PULSING
runtime //make a timer that runs and updates temperature value...lets say every second
{
  read temperature; //every second
  temperature *= 10; //multiply by 10 for decimal place, but still keeping in integer
  pulses = map(temperature, upperTemp, 0, 0, upperLimit); //when temperature increases, 
                                                                           
       //pulses decreases...vice versa
  //take this value of pulses to update the timer interval
  //timer's interval = pulses per second or minute
 
}

timer
{
  if(Relay On)
    Relay Off;
  else
    Relay On;   
}

//borrowed from arduino
long map(long x, long in_min, long in_max, long out_min, long out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

I am trying to implement PI control algorithm in c#. I found some help in internet and i understand the formula how to use. I have measured value(PV)= 20 °C and set point (SP)= 80°C; I would like to update every 2 sec in time. once the measured value reach to setpoint the controller has to switch off like that.

I found this code link to pid algorithm

but what i need is how to calculate gain factors Kp and Ki gains as well as what about dt. I am neglecting Derivative. So please can anyone explain me how to calculate those gain factors. I am using shimaden SR90 digital controller(i bought this). I found some factors in the manual but i am not sure can i use those gain factors.

I am trying to implement PI control algorithm in c#. I found some help in internet and i understand the formula how to use. I have measured value(PV)= 20 °C and set point (SP)= 80°C; I would like to update every 2 sec in time. once the measured value reach to setpoint the controller has to switch off like that.

I found this code link to pid algorithm

but what i need is how to calculate gain factors Kp and Ki gains as well as what about dt. I am neglecting Derivative. So please can anyone explain me how to calculate those gain factors. I am using shimaden SR90 digital controller(i bought this). I found some factors in the manual but i am not sure can i use those gain factors.

Added code according to answer.

int temperature;
int setpoint;
int status = 0;
int pulses = 0;
int integral = 4;
int derivative = 5;
int upperTemp = 1000; //100.0C
int upperLimit = 100; //pulses per time frame

//WITH PULSING
runtime //make a timer that runs and updates temperature value...lets say every second
{
  read temperature; //every second
  temperature *= 10; //multiply by 10 for decimal place, but still keeping in integer
  pulses = map(temperature, upperTemp, 0, 0, upperLimit); //when temperature increases, 
                                                                           
       //pulses decreases...vice versa
  //take this value of pulses to update the timer interval
  //timer's interval = pulses per second or minute
 
}

timer
{
  if(Relay On)
    Relay Off;
  else
    Relay On;   
}

//borrowed from arduino
long map(long x, long in_min, long in_max, long out_min, long out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
Source Link
reddy
  • 13
  • 1
  • 5
Loading