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
Lesezeichen