Đăng Ký
Kết quả 1 đến 8 của 8
  1. #1
    Thành viên cấp 10
    Ngày tham gia
    Jul 2011
    Đang ở
    Da Nang City
    Bài viết
    1,418
    Thanks
    65
    257 lượt trong 205 bài viết

    Add On Instruction for RSLogix5000

    Dear all
    RSLogix5000 của Rockwell Automation ngoài những lệnh cơ bản trong tập lệnh thì phần mềm cũng cho phép khách hàng (nhà phát triển , lập trình viên ...) phát triển những lệnh mới phù hợp vời nhu cầu sử dụng. và chỉ Version V16 trở lên mới được phép .
    Như các bạn đã biết với PLC khi cần điều khiển một tín hiệu gì đó mà nó hay lặp lại ( với nhiều tín hiệu ) thì mọi người thường lập trình nhiều chương trình con để control những tín hiệu đó. Chính vì vậy sẽ dẫn đến chương trình sẽ lặp lại nhiều lần và dẫn đến lỗi có thể xãy ra.
    Rockwell Automation có thể cho phép người dùng tạo ra những lệnh như vậy ,
    mình ví dụ :


    thay vì dùng một đoạn code thì mình chỉ sử dụng một lệnh mà vẫn đảm bảo yêu cầu điều khiển .
    còn đây là lệnh mình tạo để điều khiển Pump.


    và đây là code của nó.
    ////////// Pump control by Level with Auto/Man Select ///////////////////
    Delay_Start_Motor.PRE := 5000; // Delay check Motor fault

    /////// Select Mode //////////
    auto := not Auto_Man ;
    man := Auto_Man;

    //// Control Motor /////////
    Enable := ((man and (Start or Enable ))or (auto and Level_bit)) and not Stop and not Motor_fault and not CB_trip_bit;
    Motor_on := Enable;

    /////// Motor start fault ///////
    Delay_Start_Motor.TimerEnable := Motor_on and not Contact_NC;
    TONR(Delay_Start_Motor );
    if Delay_Start_Motor.DN then
    Motor_fault := 1;
    end_if;

    // Reset Fault ///////
    if Reset then
    Motor_fault :=0;
    CB_trip_bit :=0;
    end_if;

    ///////// Level control /////////
    if High_level and Low_Level then
    Level_bit :=1;
    else
    if not Low_Level then
    Level_bit := 0;
    else
    end_if;
    end_if;

    /// CB motor fsult /////
    if CB_trip then
    CB_trip_bit := 1;
    Motor_fault := CB_trip_bit;
    end_if;
    /////////////////////////

    Mình hướng dẫn tạo lệnh sau ....
    chúc một ngày vui vẽ..
    Lần sửa cuối bởi cuongvcs, ngày 02-08-2012 lúc 09:49 PM.
    ---------------------------------
    Thank and Best Regards
    cuongvcs
    Email :
    Hidden Content
    Hidden Content
    Tel : 0984198685
    " Listen. Think. Solve. "
    Skype : cuongvcs

  2. #2
    Thành viên cấp 1
    Ngày tham gia
    Jul 2011
    Bài viết
    27
    Thanks
    0
    0 lượt trong 0 bài viết
    Hi Anh Cường. Bài viết rất hay, sẳn đây anh có thể share một số tập lệnh trong lập trình RS5000 như bên S7200/300 ấy...Em tìm hoài vẫn không biết nó nằm ở đâu....Em mới làm quen với AB chưa lâu, mong mọi người giúp đỡ nhiều..
    Thanks !!!

  3. #3
    Thành viên cấp 10
    Ngày tham gia
    Jul 2011
    Đang ở
    Da Nang City
    Bài viết
    1,418
    Thanks
    65
    257 lượt trong 205 bài viết
    Trích dẫn Gửi bởi phuong.ld Xem bài viết
    Hi Anh Cường. Bài viết rất hay, sẳn đây anh có thể share một số tập lệnh trong lập trình RS5000 như bên S7200/300 ấy...Em tìm hoài vẫn không biết nó nằm ở đâu....Em mới làm quen với AB chưa lâu, mong mọi người giúp đỡ nhiều..
    Thanks !!!
    chào em
    Đây là tập lệnh của RSLogix5000 em xem đi nha. http://www.mediafire.com/?hq7sutx8zxq59jj
    còn đây là cách tạo Add On Instruction bạn tham khảo nha. http://www.mediafire.com/?0af420c3xiavv06
    có gì không hiểu thì lên đây mọi người cùng nhau giải quyêt .

    good luck.
    ---------------------------------
    Thank and Best Regards
    cuongvcs
    Email :
    Hidden Content
    Hidden Content
    Tel : 0984198685
    " Listen. Think. Solve. "
    Skype : cuongvcs

  4. #4
    Thành viên cấp 10
    Ngày tham gia
    Jul 2011
    Đang ở
    Da Nang City
    Bài viết
    1,418
    Thanks
    65
    257 lượt trong 205 bài viết
    Dear all .
    sau khi một số lệnh mình viết được thì mình port lên cho mọi người tham khảo .
    đây là lệnh dùng điều khiển 2 Pump chạy auto và manual .
    khi chạy auto 1 pump chạy một pump spare khi pump 1 có sự cố thì pump 2 chạy và ngược lại ,chạy theo sensor mực nước ( cao và thâp)
    thường dùng trong xử lý nước và nước thải .
    Đây là lệnh :



    và đây là code :
    ////////// Control 2 Pump By Level v 1.5 /////////////////
    Delay_Start_P1.PRE := Timer_Setting;
    Delay_Start_P2.PRE := Timer_Setting;
    Counter.PRE := 3;

    /////////// Check fault 2 pump ////////
    if CB_P1_Trip then
    CB_P1_trip_bit := 1; // CB Pump 1 trip
    P1_fault := 1;
    end_if;

    if CB_P2_Trip then
    CB_P2_trip_bit := 1; // CB Pump 2 trip
    P2_fault :=1;
    end_if;

    Delay_Start_P1.TimerEnable:= Pump_1_ON and not Aux_P1;
    TONR(Delay_Start_P1 );
    if Delay_Start_P1.DN then
    P1_fault := 1; // Pump 1 Start fault
    end_if;

    Delay_Start_P2.TimerEnable := Pump_2_ON and not Aux_P2;
    TONR(Delay_Start_P2 );
    if Delay_Start_P2.DN then
    P2_fault :=1; // Pump 2 Start fault
    end_if;

    ///////// Fault Status.///////////
    Pump_1_Fault := P1_fault;
    Pump_2_Fault := P2_fault;

    ////////// Reset fault
    if Reset and ACK_bit then
    P1_fault :=0;
    P2_fault :=0;
    CB_P1_trip_bit := 0;
    CB_P2_trip_bit := 0;
    end_if;

    ///////////////// Select Mode and Motor /////////
    P1_auto := not Auto_Man_1 and not Pump1_Services; // Pump 1 auto select
    P1_man := Auto_Man_1 and not Pump1_Services; // Pump 1 manual select
    P2_auto := not Auto_Man_2 and not Pump2_Services; // Pump 2 auto select
    P2_man := Auto_Man_2 and not Pump2_Services; // Pump 2 manual select

    /////// Select Pump in Auto Mode ////////////
    Counter.CUEnable := not P1_Enable and not P2_Enable;
    CTUD(Counter );
    if Counter.ACC =0 then
    Counter.ACC := 1;
    else
    if Counter.ACC = 1 then
    P1_Seq := 1; // Pump 1 Select
    else
    if Counter.ACC =2 then
    P2_Seq := 1; // Pump 2 Select
    else
    P2_Seq := 0;
    end_if;
    P1_Seq := 0;
    end_if;
    Counter.ACC := Counter.ACC;
    end_if;

    ///////// Reset Counter //////////////
    if Counter.DN then
    Counter.Reset :=1;
    else
    Counter.Reset :=0;
    end_if;

    /// Level Control ///////
    if High_Level and Low_Level then
    Level_bit :=1;
    else
    if not Low_Level then
    Level_bit := 0;
    else
    end_if;
    end_if;

    /// Pump 1 control /////
    P1_man_mode := P1_man and (Start_P1 or (P1_man_mode and not Stop_P1)); // Pump1 Manual Mode
    P1_auto_mode := P1_auto and (P1_Seq or not P2_auto) and Level_bit; // Pump1 Auto Mode
    P1_Enable := ((P1_auto and P1_auto_mode) or P1_man_mode ) and not P1_fault;
    Pump_1_ON := P1_Enable; // Pump 1 RUN


    /// Pump 2 control //////
    P2_man_mode := P2_man and (Start_P2 or (P2_man_mode and not Stop_P2)); // Pump2 Manual Mode
    P2_auto_mode := P2_auto and (P2_Seq or not P1_auto) and Level_bit; // Pump2 Auto Mode
    P2_Enable := ((P2_auto and P2_auto_mode) or P2_man_mode ) and not P2_fault;
    Pump_2_ON := P2_Enable; // Pump 2 RUN

    /////// Pump Runtimer /////////////
    Pump_Runtimer.PRE := 86400000;
    Pump_Runtimer.TimerEnable := Pump_1_ON or Pump_2_ON;
    RTOR(Pump_Runtimer );
    Pump_Runtimer.Reset := Pump_Runtimer.DN ;
    Runtimer := Pump_Runtimer.ACC / 60000;

    //////// Reset Runtimer/////////
    if Clear_Runtimer then
    Pump_Runtimer.Reset :=1;
    Runtimer :=0;
    end_if;

    if not Clear_Runtimer then
    Pump_Runtimer.Reset :=0;
    end_if;

    /////// Startus Displays Pump 1 ///////
    if P1_man then
    Status_P1 :=1; // Pump 1 is Man Mode
    else
    if P1_auto then
    Status_P1 :=2; // Pump 1 is Auto Mode
    else
    if Pump1_Services then
    Status_P1 :=3; // Pump 1 is Services Mode
    end_if;
    end_if;
    end_if;

    /////// Startus Displays Pump 2 ///////
    if P2_man then
    Status_P2 :=1; // Pump 2 is Man Mode
    else
    if P2_auto then
    Status_P2 :=2; // Pump 2 is Auto Mode
    else
    if Pump2_Services then
    Status_P2 :=3; // Pump 2 is Services Mode
    end_if;
    end_if;
    end_if;

    ///////// ACK Button //////////
    ACK_bit := (Pump_1_Fault or Pump_2_Fault) and (ACK or ACK_bit) and not Reset ;

    ////// end /////////////
    Good luck.
    ---------------------------------
    Thank and Best Regards
    cuongvcs
    Email :
    Hidden Content
    Hidden Content
    Tel : 0984198685
    " Listen. Think. Solve. "
    Skype : cuongvcs

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


  6. #5
    Thành viên cấp 3
    Ngày tham gia
    Mar 2011
    Bài viết
    248
    Thanks
    25
    52 lượt trong 38 bài viết
    Chào Anh.
    Cám ơn Anh đề tài này hữu ích đấy.
    - Theo Em được biết khi tạo một New ADD-On Instruction thì trong cái Instruction cho phép ta lựa chọn ngôn ngữ lập trình. khi ta mở Instruction thì nó giống như một Subroutine và điều đặc biệt là các tag trong đó nó có tùy chọn là Input hay Output giúp cho việc hiển thị instruction theo ý người dùng. Ngoài ra nó sẽ tự động tạo một datatype trong ADD-On define.
    Mitsubishi automation .
    PLC A,FX,Q and servo MR-J2,3.
    Email: Hidden Content
    Mobile : 0168 798 0344

  7. #6
    Thành viên cấp 10
    Ngày tham gia
    Jul 2011
    Đang ở
    Da Nang City
    Bài viết
    1,418
    Thanks
    65
    257 lượt trong 205 bài viết
    Trích dẫn Gửi bởi phongnhatdo Xem bài viết
    Chào Anh.
    Cám ơn Anh đề tài này hữu ích đấy.
    - Theo Em được biết khi tạo một New ADD-On Instruction thì trong cái Instruction cho phép ta lựa chọn ngôn ngữ lập trình. khi ta mở Instruction thì nó giống như một Subroutine và điều đặc biệt là các tag trong đó nó có tùy chọn là Input hay Output giúp cho việc hiển thị instruction theo ý người dùng. Ngoài ra nó sẽ tự động tạo một datatype trong ADD-On define.
    OK đúng vậy ,khi tạo những lệnh này người dùng tự do chọn ngôn ngữ lập trình cho mình và RSLogix5000 cho phép chọn 4 loại ngôn ngữ lập trình và mình dùng một trong số đó.,
    mọi data trong lệnh đó do mình thiết lập input/output/memmory (loacal tag).
    Mọi người cùng nhau chia sẽ và học hỏi .
    Regards,.
    ---------------------------------
    Thank and Best Regards
    cuongvcs
    Email :
    Hidden Content
    Hidden Content
    Tel : 0984198685
    " Listen. Think. Solve. "
    Skype : cuongvcs

  8. #7
    Thành viên cấp 1
    Ngày tham gia
    Sep 2012
    Bài viết
    12
    Thanks
    0
    0 lượt trong 0 bài viết
    cảm ơn mọi người share những kiến thức bổ ích cho cộng đồng

  9. #8
    Thành viên cấp 10
    Ngày tham gia
    Jul 2011
    Đang ở
    Da Nang City
    Bài viết
    1,418
    Thanks
    65
    257 lượt trong 205 bài viết
    Trích dẫn Gửi bởi PLC_AB Xem bài viết
    cảm ơn mọi người share những kiến thức bổ ích cho cộng đồng
    Chào thành viên mới PLC_AB.
    Bạn có kinh nghiệm gì PLC AB thì chia sẽ cho mọi người học hỏi với .
    Regards.
    ---------------------------------
    Thank and Best Regards
    cuongvcs
    Email :
    Hidden Content
    Hidden Content
    Tel : 0984198685
    " Listen. Think. Solve. "
    Skype : cuongvcs

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


Đá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