-
Thành viên cấp 10
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
-
-
Thành viên cấp 1
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 !!!
-
-
Thành viên cấp 10
Gửi bởi
phuong.ld
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
-
-
Thành viên cấp 10
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
-
Bài viết của "cuongvcs" đã được cám ơn bởi các thành viên:
-
Thành viên cấp 3
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
-
-
Thành viên cấp 10
Gửi bởi
phongnhatdo
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
-
-
Thành viên cấp 1
cảm ơn mọi người share những kiến thức bổ ích cho cộng đồng
-
-
Thành viên cấp 10
Gửi bởi
PLC_AB
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
-
Bài viết của "cuongvcs" đã được cám ơn bởi các thành viên:
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à 10:44 AM.
Phiên bản 4.2.5
Phát triển bởi thành viên PLCVietNam®.
Đánh dấu