ch11 Multitask

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 13

Multitasking – Đa tác vụ

• Multitasking cho phép robot làm việc với hơn 10 tác vụ cùng một lúc.

• Các tác vụ này có thể là :


– Quan sát các thiết bị ngoài.
– Điều khiển và khóa/mở các thiết bị ngoài.
– Các chức năng an toàn, theo dõi vùng làm việc của robot.
– Dữ liệu cài đặt vào operator dialogues trong khi robot đang làm
việc.
– V.v....

• Phần cứng ngoài như PLC, v.v... Cần phải được thay thế bằng phần
mềm đa tác vụ, tiết kiệm chi phí.
Multitasking
• Có thể chạy tới hơn mười tác vụ song song. (pseudo parallell).

• Mỗi tác vụ được viết bằng ngôn ngữ RAPID, bao gồm đầy đủ các modun
thủ tục, dữ liệu v.v... như một chương trình thông thường.

• Các biến và hằng số thì địa phương trong từng tác vụ, nhưng biến
persistent thì lại khác. Một Persistent với cùng tên và kiểu có thể truy cập
từ mọi task.

• Tất cả tài nguyên hệ thống đều có thể được truy cập từ mỗi tác vụ.
– Flex pendant, I/O-signals, floppy, etc.

• Mỗi task có trap handling của nó và event routine chỉ có thể gọi ra trong
chính mỗi task của nó. (e.g. Start/Stop/Restart....).
Multitasking
Task: MAIN Task: SUPERVISION Task: CONTROL
Program memory Program memory Program memory
PROGRAM PROGRAM PROGRAM
Main module Main module Main module

Program Program Program


modules modules modules

System modules System modules System modules

BASIC SERVICES OPERATOR LOG


teach pendant
Multitasking - Intertask communication - Liên kết giữa các task

• Tất cả các loại dữ liệu đều có thể chuyển qua lại giữa các task với nhau,
nếu nó ở dạng persistent.
• Biến persistent là biến toàn cục đối với mọi task.
• Biến persistent có kiểu và kích thước (mảng) được khai báo giống nhau
trong tất cả các task. Nếu không, lỗi runtime error sẽ xuất hiện.
• Tất cả khai báo biến persistent cần chỉ rõ một giá trị khởi tạo, nhưng chỉ
khai báo của module đầu tiên được gọi sẽ sử dụng giá trị này.
Multitasking – Synchronizing- Đồng bộ
Synchronising using polling
Đây là cách đơn giản nhất để đồng bộ hóa, nhưng hiệu quả lại là
kém nhất.
Persistents được dùng cùng với các câu lệnh đơn giản, như
WaitUntil, IF, WHILE or GOTO.

Nếu lệnh WaitUntil được dùng, nó sẽ kiểm tra mỗi 100ms.


Không kiểm tra thường xuyên hơn trong các ứng dụng khác.
Multitasking - Synchronizing
Ví dụ :
TASK 0
MODULE module1
PERS bool startsync:=FALSE;
PROC main()
startsync:= TRUE;
.
ENDPROC
ENDMODULE
TASK 1
MODULE module2
PERS bool startsync:=FALSE;
PROC main()
WaitUntil startsync;
.
ENDPROC
ENDMODULE
Multitasking – Synchronizing
Synchronising using an interrupt
Sử dụng các lệnh SetDO và ISignalDO
Ví dụ :
TASK 0
MODULE module1
PROC main()
SetDO do1,1;
.ENDPROC
ENDMODULE
TASK 1
MODULE module2
VAR intnum isiint1;
PROC main()
CONNECT isiint1 WITH isi_trap;
ISignalDO do1, 1, isiint1;
WHILE TRUE DO
WaitTime 200;
ENDWHILE
IDelete isiint1;
ENDPROC
TRAP isi_trap
.ENDTRAP
ENDMODULE
Kiểu của task
• Kiểu của task
Mỗi task phụ (khác 0) được chạy theo chuỗi khởi động của hệ thống. Nếu
task có kiểu STATIC, thì nó sẽ được khởi động lại tại vị trí hiện hành(nơi
con trỏ ở đó khi hệ thống tắt điện), nhưng nếu kiểu task là SEMISTATIC
, nó sẽ được khởi động lại từ vị trí đầu mỗi lần bật điện.
Task ở kiểu NORMAL sẽ không chạy lúc khởi động hệ thống. Nó khởi động
theo cách thông thường, ví dụ như thông qua FlexPendant
Multitasking - Trustlevels
TrustLevel quản lý tác động của hệ thống khi một SEMISTATIC hoặc STATIC bị
dừng hoặc không chạy vì lý do nào đó.
SysFail – Là tác động mặc định. Tất cả các task dạng NORMAL(thông thường chỉ
có MAIN task) sẽ bị dừng. Ngoài ra hệ thống sẽ chuyển sang ”trạng thái lỗi hệ
thống”.
Tất cả các yêu cầu dịch chuyển hoặc chạy chương trình đều sẽ bị từ chối, Chỉ có
thể chạy warm start khởi động lại hệ thống. Được dùng khi task có các chế độ
quan sát an toàn.

SysHalt – Tất cả các task NORMAL sẽ bị dừng. Hệ thống bị ép sang chế độ ”đóng
động cơ”, Khi chuyển hệ thống sang ”chạy động cơ” thì có thể dịch chuyển robot,
nhưng các cố gắng khởi động chương trình sẽ bị từ chối. Chạy warm start(khởi
động nóng) để khởi động lại hệ thống.

SysStop - Tất cả các task NORMAL sẽ bị dừng nhưng có thể khởi động lại. Có thể
dịch chuyển robot.

NoSafety - Chỉ các task hiện hành sẽ dừng


Multitasking – Quyền ưu tiên

• Theo mặc định tất cả các task có cùng quyền.

• Theo đó, một ”bước cơ bản” sẽ được chạy trong mỗi


task theo thứ tự.
• Khi một task tạm ngừng, ví dụ đợi một tín hiệu nào
đó, thì các task khác vẫn chạy bình thường.
• Các quyền ưu tiên khác có thể có, bằng cách đặt
task này vào nhánh trước hay sau của task khác.
• Một task ở nhánh sau chỉ chạy khi tất cả task trước
nó ở trạng thái tạm ngừng.
Multitasking
• Sơ đồ lập trình
Lần đầu tiên
1. Khởi tạo task mới theo các thông số hệ thống (controller/task)
Chọn type là NORMAL và TrustLevel là NoSafety.
2. Định rõ tất cả modun cần chạy trước task mới này, cũng như các thông
số hệ thống theo kèm. (controller/task-modules).
3. Tạo các modun chạy trong task bằng FlexPendant (ở MAIN task) hoặc
tạo off-line.
4. Kiểm tra chạy thử các modun trong MAIN task, cho đến khi chạy tốt
hết. Lưu ý: chỉ có thể tiến hành ở trạng thái motors on.
5. Chuyển task type sang SEMISTATIC (hoặc STATIC).
6. Khởi động lại hệ thống.
Các thao tác lặp
Trong nhiều trường hợp ta chỉ lặp lại bước 3 và 5 là đủ. Và chỉ khi chương trình
cần được kiểm tra trong Main Task và quá trình chạy RAPID code của 2
task cùng lúc có thể làm người lập trình bị rối, thì tất cả các bước nên được
thực hiện. Lưu ý : Nếu 1 STATIC task được sử dụng, nó cần phải được nạp
lại các modun bị thay đổi và khởi động lại từ đầu.
Nếu tất cả các bước dưới đây đều được thực hiện thì nó sẽ giúp đảm bảo cho
bạn hơn.
1. Chuyển dạng của task sang NORMAL để hạn chế task. Một NORMAL task
sẽ không khởi động khi hệ thống khởi động lại và nếu nó không là 1
NORMAL task thì nó sẽ không bị tác động bởi nút Start/Stop trên
FlexPendant.
2. Khởi động lại hệ thống.
3. Chạy nạp các modun cho MAIN task, kiểm tra, thay đổi và lưu trữ lại các
modun.
Lưu ý: Không lưu task, lưu mỗi modun dựa vào các thông số hệ thống
4. Chuyển lại task type sang SEMISTATIC (hoặc STATIC).
5. Khởi động lại hệ thống.
• Thao tác kết thúc
• 1. Thiết lập TrustLevel ở dạng mong muốn, ví
dụ : SysFail
• 2. Khởi động lại hệ thống

You might also like