Distance Sensor PID Issues

Hello forum users,
For some reason our PID loop for the distance sensor does not stop at the value we set it to and instead stops when the laser reads 0. The math we did to see what values we are giving to the drivetrain don’t seem to match up with this, so we are not sure what the issue is. Any help would be greatly appreciated.

We tried changing the Werror to Target - laser, but that just caused the robot to drive in reverse. When we tried that with the drivetrain set to negative values it did the same thing as the -Target + laser.

float wallKp = 0.3;
float wallKd = 1;
float wallKi = 0.008;

//positive is forward
bool runWall = false;
void drivetowall(int speed) {
  if(runWall == true){
    TopRight = speed;
    BottomRight = speed;
  TopLeft = speed;
  BottomLeft = speed;

}
}
void WallPID(void* Param){
  while(1==1){
    Werror = -wallTarget + Laser.get();

    Wproportion = wallKp * Werror;
/*
    Wderivative = wallKd * (Werror - WprevError);
    WprevError = Werror;

    Wintegral = wallKi * (Wintegral + Werror);

    if (Werror == 0 || Werror > wallTarget)
    Wintegral = 0;
*/
Wraw = Wproportion; //+ Wderivative;// + Wintegral;


//sends speed to the drivetrain
drivetowall(Wraw);

    pros::delay(20);
  }
}
void setToWall(int value){
  runPID = false;
  runTurn = false;
  runWall = true;
  	wallTarget = value;

}