Sat, 16 May 2015 17:39:30 +0200
Made the client-server protocol more robust. When a change to a unit is made using the web interface, the main process is stopped during the update. Splitted the PID in two PID's, one for heating and one for cooling. Adjusted the web edit scrreen for this, but there are still rough edges. Replaced the PID code, maybe this one works better for our purpose. The simulator air temperature changes on the simulator heater and cooler, but it is not realistic at all. This is a development version, do not use in production. The version is 0.3.0
#ifndef PID_H #define PID_H #define PID_MODE_NONE 0 /* Process control off */ #define PID_MODE_AUTO 1 /* Process control auto */ #define PID_MODE_BOO 2 /* Process control Bang On/Off */ #define PID_TYPE_HEAT 0 /* PID is used for heating */ #define PID_TYPE_COOL 1 /* PID is used for cooling */ #define PID_TIMES 60 /* 60 calculations per minute */ typedef struct _pid_var { double iMax; /* Maximum allowable integrator state */ double iGain; /* Integral gain */ double pGain; /* Proportional gain */ double dGain; /* Derivative gain */ double idleRange; /* Idle range */ double Input; /* Input value */ double InputD; /* Process input plus derivative */ double InputLast; /* Process input from last pass */ double Err; /* Error, diff between input and set point */ double ErrLast; /* Error from last pass */ double ErrLastLast; /* Error from next last pass */ double SetP; /* Set point */ double OutP; /* Output of PID algorithm */ int Mode; /* Value is 'PID_AUTO' if loop is automatic */ int Type; /* Value is 'HEAT' or 'COOL' */ } pid_var; void InitPID( pid_var *, int); void UpdatePID( pid_var *); #endif