Đăng Ký
Kết quả 1 đến 5 của 5

Hybrid View

  1. #1
    Little PLC

    Ngày tham gia
    Mar 2011
    Đang ở
    Mọi câu hỏi hãy đưa lên diễn dàn. Tôi không dùng hộp thư riêng.
    Bài viết
    3,151
    Thanks
    257
    1,085 lượt trong 567 bài viết

    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.
    Hidden Content

    Trần Văn Hiếu
    Email: Hidden Content
    Sđt: (+84)987 - 338 - 334

  2. Bài viết của "tran_hieu0983" đã được cám ơn bởi các thành viên:


  3. #2
    Thành viên cấp 3
    Ngày tham gia
    Dec 2012
    Đang ở
    Ho Chi Minh Vietnam Now
    Bài viết
    184
    Thanks
    4
    61 lượt trong 46 bài viết
    Trích dẫn Gửi bởi tran_hieu0983 Xem bài viết
    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.

  4. #3
    Little PLC

    Ngày tham gia
    Mar 2011
    Đang ở
    Mọi câu hỏi hãy đưa lên diễn dàn. Tôi không dùng hộp thư riêng.
    Bài viết
    3,151
    Thanks
    257
    1,085 lượt trong 567 bài viết
    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ả.
    Hidden Content

    Trần Văn Hiếu
    Email: Hidden Content
    Sđt: (+84)987 - 338 - 334

  5. #4
    Thành viên cấp 4
    Ngày tham gia
    Nov 2011
    Bài viết
    490
    Thanks
    0
    49 lượt trong 35 bài viết
    ^_^ 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é)
    HỌC, HỌC NỮA, HỌC MÃI,HỌC HẾT LỚP BẢY THÌ NGHỈ
    Hidden Content

  6. #5
    Little PLC

    Ngày tham gia
    Mar 2011
    Đang ở
    Mọi câu hỏi hãy đưa lên diễn dàn. Tôi không dùng hộp thư riêng.
    Bài viết
    3,151
    Thanks
    257
    1,085 lượt trong 567 bài viết
    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.
    Hidden Content

    Trần Văn Hiếu
    Email: Hidden Content
    Sđt: (+84)987 - 338 - 334

Tag của Chủ đề này

Đánh dấu

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
  •  
Back to Top