PID bloğu gayet doğru çalışmakta. Eğer matlabta simüle edip örnekleme zamanını kafadan sıkmazsan PID bloğunun net bir şekilde çalıştığını göreceksin.
Ayrıca Ziegler-Nichols hap çözümdür arkadaşlar. Simülasyon sırasında matlab system identification modülü ile sistemin modelini çıkarırken işimize de baya yaradığı olur.
örnekleme zamanı (dt) nasıl hesaplanıyor. benim tahminim toplam döngü işleme süresiymiş gibi geliyor ama emin değilim.
Ziegler Nichols ile çok başarılı sonuçlar alabilinir. Ziegler Nichols deneme yanılma dediğin şeyin yönteme dökülmüş halidir, sisteme makul bir Kp vererek başlar, sistemi osilasyona gitirip tekrar çıkartarak Ki ve Kd değerlerini bulursun. Kafadan deneme yanılmaya girip zaman kaybetmeni önler. İster deneme yanılma ister Ziegler Nichols olsun denemeleri yapabilmen için sistemin kritik olmayan (insan hayatı ve maddi bakımdan) ve kararlı bir sistem olması da gerekli tabi ki.
Yapabiliyorsanız Analog Input-Output kartlı bir PLC kullanıp sisteme birim basamak verip basamak cevabına bakabilir ve basamak cevabını excel'e çekip MATLAB'a atarak sisotool ile sistem transfer fonksiyonunu belirlersiniz. Daha sonra da PID kontrol paramatrelerini çıkartıp, ufak sabunlamalarla sisteme uygulayabilirsiniz.
//This timer updates the process data. it needs to be the fastest
// interval in the system.
private void tmrPV_Tick(object sender, EventArgs e)
{
/* this is my version of cruise control.
* PV = PV + (output * .2) - (PV*.10);
* The equation contains values for speed, efficiency,
* and wind resistance.
* Here 'PV' is the speed of the car.
* 'output' is the amount of gas supplied to the engine.
* (It is only 20% efficient in this example)
* And it looses energy at 10% of the speed. (The faster the
* car moves the more PV will be reduced.)
* Noise is added randomly if checked, otherwise noise is 0.0
* (Noise doesn't relate to the cruise control, but can be useful
* when modeling other processes.)
*/
PV = PV + (output * 0.20) - (PV * 0.10) + noise;
// change the above equation to fit your application.
} The PID control timer (tmrPID_Ctrl) tick event handler runs:
[ATTACH=full]83953[/ATTACH] Collapse | [URL="http://www.codeproject.com/Articles/36459/PID-process-control-a-Cruise-Control-example#"]Copy Code[/URL]
/* This represents the speed at which electronics could actually
* sample the process values.. and do any work on them.
* [most industrial batching processes are SLOW, on the order of minutes.
* but were going to deal in times 10ms to 1 second.
* Most PLC's have relatively slow data buses, and would sample
* temperatures on the order of 100's of milliseconds. So our
* starting time interval is 100ms]
*/
private void tmrPID_Ctrl_Tick(object sender, EventArgs e)
{ /*
* Pseudo code (source Wikipedia)
*
previous_error = 0
integral = 0
start:
error = setpoint PV [actual_position]
integral = integral + error*dt
derivative = (error - previous_error)/dt
output = Kp*error + Ki*integral + Kd*derivative
previous_error = error
wait(dt)
goto start
*/
// calculate the difference between
// the desired value and the actual value
error = setpoint - PV;
// track error over time, scaled to the timer interval
integral = integral + (error * Dt);
// determine the amount of change from the last time checked
derivative = (error - preError) / Dt;
// calculate how much to drive the output in order to get to the
// desired setpoint.
output = (Kp * error) + (Ki * integral) + (Kd * derivative);
// remember the error for the next time around.
preError = error;
}
ProcessValue = ProcessValue + (output * efficiency) – loss
if ( (output – outputLast) > maxChange)
output = outputLast + maxChange;
else if ( (outputLast – output) > maxChange)
output = outputLast – maxChange;
outputLast = output;
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?