Я пишу приложение node.js, чтобы помочь автоматизировать некоторые из моих домашних пивоваренных заводов. Одним из модулей, которые я использую, является PID-алгоритм для управления выходами, чтобы они поддерживали определенные заданные значения. В настоящее время я делаю это через цикл while, но думаю, что этот код будет блокировать. Любая помощь, помогающая сделать это более эффективной и асинхронной, была бы весьма признательна. Вот мой контур управления:Как написать асинхронный цикл while в Node.JS
device.prototype.pid_on = function(){
while(this.isOn){
this.pid.set_target(this.target); // make sure that the setpoint is current
var output_power = this.pid.update(this.current_value); // gets the new output from the PID
this.output.set_power(output_power);
};
};
Я изменил его немного для удобства чтения, но это в основном это. Он будет просто контуром, отрегулировать выход, а затем передать новое значение ввода. Я хочу, чтобы цикл продолжал работать до тех пор, пока устройство не выключится.
Очевидно, мне нужно, чтобы это было неблокируемым, чтобы я мог продолжать управлять другими устройствами во время работы pid.
В настоящее время я просто называю эквивалентом device.pid_on(); в моем коде.
Одна из моих идей - использовать пустой обратный вызов, что бы сделать это не блокирующим?
device.prototype.pid_on(calback){
while (this.isOn){...};
callback();
};
//call later in code
device.pid_on(function(){});
Спасибо за любую помощь!
Да, я думал о том, что хорошо. Я просто реорганизовал код так, чтобы, если устройство включено, pid_on вызывается всякий раз, когда получает новое входное значение. Это выдает цикл и должно помочь с загрузкой процессора, поскольку код pid запускается только при изменении ввода. Спасибо за помощь! – JoshPeltier