Der Standardfall wäre sicher, dass der PID Task gestartet wird und man überlässt ihn sich selber.
trotzdem kann es sein
(z.B.: bei ursprünglich geplante "Annäherung um 9000 Grad vorwärts drehen"
oder bei "Ziel annähern und kontinuierlich, dauerhaft gegen (passive) Verstellung halten")
, dass er vorzeitig gestoppt werden muss , wenn es die Situation erfordert,
und dann nach Abbruch eventuell sofort eine neue Annäherung erfolgen muss
(auf z.B. -1000 Grad per rückwärts drehen oder was auch immer) .
Wie wäre dann der einfachste Weg, das Stoppen zu bewerkstelligen?
Idee zum vorzeitigen Abbruch der PID-Regulation-Loop:
evtl das Stoppen über Implementierung einer weiteren PID-Strukturvariable
char StopPIDcontrol
die standardmässig anfangs auf Null gesetzt wird,
und wenn sie extern zum Beenden auf 1 gesetzt wird, wird nach interner Prüfung in der pthread PID loop der pthread beendet:
Code:
if(motor[port].StopPIDcontrol) {
motorCoast(port);
motor[port].runstate=0;
motor[port].speed =0;
motor[port].outp =0;
motor[port].cont =0;
return NULL;
}
wie und wo kämen dann weitere Aufräumarbeiten hin, und wie oder wo muss dann etwas gejoint werden oder nicht?
Lesezeichen