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
Der obere Teil berechnet nur, wo eine Linie unter den Sensoren liegt und im unteren werden die Motoren (L/R) angesteuert.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;
Vielleicht kannst du ja was damit anfangen, ansonsten muss ich's halt noch mal genauer beschreiben.
Grüße; ähM_Key







Zitieren

Lesezeichen