This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Global Var

HI!!

I declared 3 global var, i call it inside diferent task and every execution this var should be updates but not to do it.
I have a 8051 under evaluation board.
Maybe can be a problem of my small micro?
What do u think about this?

Thanks

Parents
  • real UpdatePID (SPid *pid, real SP, real PV, unsigned int AUTO,real Uman) reentrant {
    
            real P,I,D,v,u,Es,error;
    
            if (AUTO){
    
                    error = SP - PV;
    
                    P = pid->Kp*error;
                    if (pid->Ti){
                            I = pid->iState*(pid->Kp*(pid->Ts/pid->Ti)+ pid->Kwindup);
                            pid->iState = pid->iState + error;
                    }else I=0;
                    if (pid->Td){
                            D = (pid->Kp*(pid->Td/pid->Ts)*(PV - pid->dState));
                            pid->dState = PV;
                    }else D=0;
                    v = P + I + D;
                    if (v > pid->uMax) u=pid->uMax;                           /* Antireset windup */
                    else if (v < pid->uMin) u=pid->uMin;
                    else u=v;
                    Es = u-v;
                    pid->Kwindup = Es/pid->Tt;
    
            }else{                 /* Modo Manual */
    
                    u = Uman;
                    pid->iState = Uman - (pid->Kp*error);       /* Bumpless transfer */
    
            }
    
            return u;
    
    }
    

Reply
  • real UpdatePID (SPid *pid, real SP, real PV, unsigned int AUTO,real Uman) reentrant {
    
            real P,I,D,v,u,Es,error;
    
            if (AUTO){
    
                    error = SP - PV;
    
                    P = pid->Kp*error;
                    if (pid->Ti){
                            I = pid->iState*(pid->Kp*(pid->Ts/pid->Ti)+ pid->Kwindup);
                            pid->iState = pid->iState + error;
                    }else I=0;
                    if (pid->Td){
                            D = (pid->Kp*(pid->Td/pid->Ts)*(PV - pid->dState));
                            pid->dState = PV;
                    }else D=0;
                    v = P + I + D;
                    if (v > pid->uMax) u=pid->uMax;                           /* Antireset windup */
                    else if (v < pid->uMin) u=pid->uMin;
                    else u=v;
                    Es = u-v;
                    pid->Kwindup = Es/pid->Tt;
    
            }else{                 /* Modo Manual */
    
                    u = Uman;
                    pid->iState = Uman - (pid->Kp*error);       /* Bumpless transfer */
    
            }
    
            return u;
    
    }
    

Children