Я своего рода новичок в Java, так что еще не полностью поняли концепцию multithreading.I хотели бы создать класс PIDController, что позволяет мне сделать это:Как реализовать многопоточный PID-контроллер в Java?
ControllerMethods methods = new ControllerMethods()
{
public long getError(long setpoint)
{
//get an input
}
public void setOutput(long value)
{
//do something
}
public void isComplete(long setpoint)
{
return getError() == 0;
}
};
PIDController motorPID = new PIDController(setpoint, kp, ki, kd, methods);
motorPID.run();
//runs the PID controller to completion (methods.isComplete() == true)
motorPID.run(false);
//starts the PID controller in a separate thread, allowing
//continual monitoring in the current thread
while(motorPID.isRunning())
{
//do something else
if(condition1)
motorPID.pause();
//pause the PID controller, preventing the integral from increasing
else if(condition2)
motorPID.stop();
}
Я работал, как для вычисления стандартных ПИД-алгоритмов, но я не могу решить, как обеспечить асинхронную функциональность.
Может ли кто-нибудь сказать мне, как я могу достичь аналогичного API?
Если вам нужен лучший контроль, то пусть Исполнитель (многие из них в ExecutorService) управляют им, а не имеют свободный поток. http://java.sun.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html –
В настоящее время мой класс 'PIDController' имеет экземпляр внутреннего класса, производного от' Thread'. Я не могу решить, будет ли контроллер shoud быть «Thread» или содержать «Thread» – Eric
. Я бы рекомендовал переместить многопоточный код из вашего класса PIDController и в PIDManager или что-то еще, что отвечает за настройку PIDControllers в отдельных потоках. –