- Controller have integrator on power level
- improved integral part in PID git-svn-id: http://moon:8086/svn/projects/HendiControl@268 fda53097-d464-4ada-af97-ba876c37ca34
This commit is contained in:
@@ -64,6 +64,8 @@ class Controller(TimerListener):
|
||||
self.timerMgr.registerTimer(self.plantTimer)
|
||||
self.timerMgr.registerTimer(self.reportTimer)
|
||||
self.rast_running = False
|
||||
self.power_hold = 0
|
||||
self.power_heat = 1000
|
||||
|
||||
def onTimer(self, timer):
|
||||
if timer == self.sensorTimer:
|
||||
@@ -237,9 +239,19 @@ class Controller(TimerListener):
|
||||
self.pid_hold.process(self.dt, self.params['Hold']['Pid'], ctrl_theta_err)
|
||||
self.pid_rate.process(self.dt, self.params['Heat']['Pid'], ctrl_heatrate_err)
|
||||
|
||||
power_hold = max(self.params['P_min'], min(self.params['P_max'], self.params['P_max'] * self.pid_hold.get_y()))
|
||||
power_heat = max(self.params['P_min'], min(self.params['P_max'], self.params['P_max'] * self.pid_rate.get_y()))
|
||||
power_soll = min(power_hold, power_heat)
|
||||
if self.ovenState == ovenStates.HOLD:
|
||||
self.power_hold += self.params['P_max'] * self.pid_hold.get_y()
|
||||
|
||||
if self.ovenState == ovenStates.HEAT:
|
||||
self.power_heat += self.params['P_max'] * self.pid_rate.get_y()
|
||||
|
||||
self.power_hold = max(self.params['P_min'], min(self.params['P_max'], self.power_hold))
|
||||
self.power_heat = max(self.params['P_min'], min(self.params['P_max'], self.power_heat))
|
||||
|
||||
power_soll = min(self.power_hold, self.power_hold)
|
||||
if self.ovenState == ovenStates.HEAT:
|
||||
power_soll = min(self.power_heat, self.power_heat)
|
||||
|
||||
self.plant.setPower(power_soll)
|
||||
power_ist = self.plant.getPower()
|
||||
|
||||
@@ -247,8 +259,8 @@ class Controller(TimerListener):
|
||||
self.theta_v = np.append(self.theta_v, ctrl_theta)
|
||||
self.heatrate_v = np.append(self.heatrate_v, ctrl_heatrate)
|
||||
self.power_v = np.append(self.power_v, power_soll)
|
||||
self.power_hold_v = np.append(self.power_hold_v, power_hold)
|
||||
self.power_heat_v = np.append(self.power_heat_v, power_heat)
|
||||
self.power_hold_v = np.append(self.power_hold_v, self.power_hold)
|
||||
self.power_heat_v = np.append(self.power_heat_v, self.power_heat)
|
||||
self.error_v = np.append(self.error_v, ctrl_theta_err)
|
||||
self.power_soll = power_soll
|
||||
|
||||
@@ -256,12 +268,12 @@ class Controller(TimerListener):
|
||||
if ovenStateNext != self.ovenState:
|
||||
self.log("{} -> {}".format(self.ovenState, ovenStateNext))
|
||||
if ovenStateNext == ovenStates.HEAT:
|
||||
self.pid_rate.reset()
|
||||
# self.pid_rate.reset()
|
||||
self.stirrer.setSpeed(self.stirrSpeedHeat)
|
||||
self.stirrer.setDutyCycle(1.0)
|
||||
|
||||
if ovenStateNext == ovenStates.HOLD:
|
||||
# self.pid_hold.reset()
|
||||
self.pid_hold.reset()
|
||||
self.stirrer.setSpeed(self.stirrSpeedRast)
|
||||
self.stirrer.setDutyCycle(self.stirrDutyRast)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user