Hallo!

Nein dynamische Prozesse sind leider nicht drinn, was mir ehrlich gesagt aber auch noch zu kompliziert ist.
Das macht das gesammte Programm natürlich weniger tauglich, gerade, weil es sozusagen keine Ansprechzeit gibt.

Hier mal der interessante Teil des Quelltextes vom Regler

Code:
procedure TForm1.followtrack;    /////////////////////////////////Spurverfolgung
var
  m: integer;
  sensor1, sensor2, sensor, regel, yp, yi, yd: real;

begin
  sensor1:=0;
  sensor2:=0;
  for m:=1 to sensoranzahl do begin
    if chk(m) and (sensor1=0) then begin
      if m<=sensoranzahl/2 then  sensor1:=-sensoranzahl/2-1+m
        else sensor1:=m-sensoranzahl/2;
      if m<>sensoranzahl then begin
        if chk(m+1) then begin
          if m+1<=sensoranzahl/2 then  sensor2:=-sensoranzahl/2+m
            else sensor2:=m+1-sensoranzahl/2;
        end;
      end;
    end;
  end;

  if sensor2<>0 then sensor:=(sensor1+sensor2)/2 else sensor:=sensor1;

  yp:=(kp/100)*(sensor/(sensoranzahl/2));
  yi:=yialt+(tast/100)/(ki/100)*sensor;
  yd:=(kd/100)*(sensor-sensoralt)/(tast/100);

  yialt:=yi;
  sensoralt:=sensor;

  regel:=yp+yi+yd;

  button6.caption:=floattostr(regel);

  if regel<0 then begin
    vr:=vr+abs(regel);
    if vr>=vmax then begin
      vr:=vmax;
      vl:=vl-abs(regel);
      if vl<0 then vl:=0;
    end;
  end;
  if regel>0 then begin
     vl:=vl+abs(regel);
     if vl>=vmax then begin
      vl:=vmax;
      vr:=vr-abs(regel);
      if vr<0 then vr:=0;
     end;
  end;     

end;
Der obere Teil berechnet nur, wo eine Linie unter den Sensoren liegt und im unteren werden die Motoren (L/R) angesteuert.

Vielleicht kannst du ja was damit anfangen, ansonsten muss ich's halt noch mal genauer beschreiben.

Grüße; ähM_Key