-
Little PLC
Cách viết PID như thế nào là hay?!
Chào mọi người.
Hiện nay mình có giải thuật PID từ một số chỗ để viết khối PID như thế nào cho hay thì mình đưa ra một số nhờ mọi người tư vấn giúp:
Code C chuẩn theo giải thuật PID từ lý thuyết:
output = Kp * err + (Ki * int * dt) + (Kd * der /dt);
Kp = Proptional Constant.
Ki = Integral Constant.
Kd = Derivative Constant.
err = Expected Output - Actual Output ie. error;
int = int from previous loop + err; ( i.e. integral error )
der = err - err from previous loop; ( i.e. differential error)
dt = execution time of loop.
Cái này thì cách viết từ VĐK mình copy lại:
/*u=kp*(e+Td*diff(e)+Td*int(e))
y0=analog input 1;
r0=ref=set point or reference;
T=sample time;
qd=diff constant=Kp*Td/T; //Td:diff time
qi=integral cosntant=Kp*T/Ti; //Ti:Integration time
Kp=prop gain;*/
float pid (float r0, float y0)
{
e0=r0-y0;
D=qd*(e0-e1);
if (((u>umin)|(e>0))&((u<umax)|(e<0))) //antiwindup integral
I=I+qi*(r0-y0);
u=Kp*e0+D+I;//pid control signal
if (u>umax) u=umax; //antiwindup PID
if (u<umin) u=umin;
e1=e0; //save old values
y1=y0;
}
PID đơn giản:
Simple PID
PID = GainP * actual error + GainI * SUM(previous errors) + GainD * (actual error - last error)
error = sp(set point) - pv(process value)
float pid (float sp, float pv)
{
err_old = err;
err = sp - pv;
// note
P_err = err;
I_err += err_old;
D_err = err - err_old;
return 0.1*P_err + 0.3*I_err + 0.02*D_err;
}
Nói chung là khá nhiều. Nhưng mình cảm thấy mình viết khác chứ nhìn lại vẫn là 1 thứ. ^^. Nên mong các bạn nào thiên về giải thuật tư vấn giúp.
-
Bài viết của "tran_hieu0983" đã được cám ơn bởi các thành viên:
-
Thành viên cấp 3
Gửi bởi
tran_hieu0983
Chào mọi người.
Hiện nay mình có giải thuật PID từ một số chỗ để viết khối PID như thế nào cho hay thì mình đưa ra một số nhờ mọi người tư vấn giúp:
Code C chuẩn theo giải thuật PID từ lý thuyết:
Cái này thì cách viết từ VĐK mình copy lại:
PID đơn giản:
Nói chung là khá nhiều. Nhưng mình cảm thấy mình viết khác chứ nhìn lại vẫn là 1 thứ. ^^. Nên mong các bạn nào thiên về giải thuật tư vấn giúp.
Đơn giản là PLC người ta đã viết hàm sẵn cho mình rồi, chỉ đọc, hiểu và ứng dụng mà thôi.
-
-
Little PLC
Cái quan trọng là viết hàm lại. ^^, Hiện đã xong Fuzy - Noron rồi. Còn lại chỉnh lại Fuzzy cho hệ số Ki, Kd, Kp và đang test sang tuần có kết quả.
-
-
Thành viên cấp 4
^_^ cái này hiếu nghiên cứu thì được, thực tế hàm pid không chỉ đơn giản tính theo công thức như lý thuyết đâu, hàm pid s7-300 cái hay nằm ở internal setpoint, timelag và hàm 3 step kia, mấy cái đó đầu tư viết thì lâu lắm hiếu.
Nếu làm pid mờ thì ok, siemens chưa làm, còn pid thì anh thấy hàm siemens là chuẩn rồi (hàm standard pid đó nhé)
-
-
Little PLC
Nếu sử dụng hàm Standard của Siemens viết cho mình sử dụng thì em làm xong từ khối hàm liên tục, xung, nhiệt cả rồi. Tại em muốn viết lại theo mình sẽ dễ quản lý và chỉ chọn những thông số cần thiết chứ nếu đem cho người mới sử dụng thì PID của siemens quá trời thông số họ bị rối. ^.^.
Hi thank anh. Để em ngâm thêm ý thời gian nữa rồi xử lý tiếp.
-
Tag của Chủ đề này
Quyền viết bài
- Bạn Không thể gửi Chủ đề mới
- Bạn Không thể Gửi trả lời
- Bạn Không thể Gửi file đính kèm
- Bạn Không thể Sửa bài viết của mình
-
Nội quy - Quy định
Back to Top
Múi giờ GMT +7. Bây giờ là 11:14 AM.
Phiên bản 4.2.5
Phát triển bởi thành viên PLCVietNam®.
Đánh dấu