First there are a few VHDL problems
use IEEE.std_logic_signed.all;
use ieee.numeric_std.all;
Don't use those two libraries together, it can give very strange results. You'd better only use numeric_std, which is standard, and use its signed and unsigned types instead of std_logic_vector whenever you have a signal with a range of bits representing an integer value.
counter_a := counter_a +1;
counter <= counter_a;
Those two lines should be inside the if( clk'event and clk='1'). I'm not sure Quartus will know how to synthesize your code when it is written like this, and what it would attempt to synthesize would most probably not be what you want. A VHDL simulator will increase twice counter_a for each clock cycle, which will also be different from a synthesized version.
if( clk'event and clk='1') then
pid_val := 0;
integral := 0;
You reinitialize integral to 0 on each clock cycle, so you no longer have an integral.
integral := integral + ((desired - line_cur)/time_cur);
I think this line is wrong. First you need to use the difference between the previous time value and the current one, instead of just the absolute time, and for an integral value you need to multiply by the time, not divide by it.
Each time you write time_cur-time_prev you can just replace it by 1.
reset <='1'after 40 ns, '0' after 80 ns;
You don't use the reset signal anywhere in your code.
Now for the simulation itself. Are you simulating from Quartus? If yes you should consider switching to Modelsim instead. It is a bit more difficult to get started, but it is much more powerful. The Quartus simulator isn't very good, and not supported any more.
When you run the simulation, do you see the clock cycling? What kind of outputs do you see?