Upload
bom80111
View
130
Download
8
Embed Size (px)
DESCRIPTION
Giao trinh PLC s7-300 va s7-200
Citation preview
Chương I. Cơ sở lý thuyết về điều khiển Logic
I.1 Lý thuyết về điều khiển Logic
I.1.1 Định nghĩa
- Khái niệm về logic 2 trạng thái:
Trong cuộc sống hàng ngày những sự vật hiện tượng chúng ta thường quy ước
2 trạng thái này đối lập nhau hoàn toàn, ví dụ: có/không; thiếu/đủ; còn/hết; trong/đục;
nhanh/chậm...
Bảng 1.1 Ví dụ về bảng chân lý hàm 1 biến
Trong kỹ thuật, 2 trạng thái thường sử dụng là: đóng/mở; chạy/dừng...
Để lượng hóa 2 trạng thái này, trong toán học, người ta quy ước bằng con số
“0” và “1”. Từ đó, xây dựng nên các hàm và biến dựa trên 2 biến logic này.
I.1.2 Các hàm logic cơ bản
- Hàm logic 1 biến
- Hàm logic n biến
Hàm logic n biến : y = f(x1,x2,x3,..,xn).
Ta có: 1 biến nhận 21 giá trị n biến nhận 2n giá trị; mà một tổ hợp nhận 2 giá trị,
do vậy hàm có tất cả là trường hợp.
Ví dụ :1 biến tạo 4 hàm.
2 biến tạo 16 hàm.
3 biến tạo 256 hàm.
Qua ví dụ trên, ta có thể thấy khả năng tạo hàm rất lớn nếu số biến càng nhiều.
Tuy nhiên tất cả khả năng này đều được hiện qua các khả năng sau: tổng logic, nghịch
đảo logic, tích logic.
1
I.1.3 Tính chất
- Quan hệ giữa các hệ số:
0. 1 =0
1. 0 =0
0 +0 =0
0 +1 =1
1 +0 =1
1 +1 =1
= 1 = 0Đây là quan hệ giữa 2 hằng số “0” và “1”, là tiền đề cho các hàm logic sau này.
- Quan hệ giữa các biến và hằng số:
A.0 =0
A. 1 =A
A+1 =1
A +0 =A
A. A =0
A + A =1
- Các tính chất khác:
+ Luật giao hoán :
A. B =B. A
A +B =B +A
+ Luật kết hợp :
( A +B) +C =A +( B +C)
( A. B). C =A. ( B. C)
+ Luật phân phối :
A ( B +C) =A. B +A. C
+ Các tính chất đặc thù logic:
A. A =A
A +A =A
+ Định lý De Mogan :
2
= + = + Luât hàm nguyên : =A.
I.1.4 Các phương pháp biểu diễn hàm logic
- Bảng logic
* Nếu hàm có n biến thì bảng có n+1 cột (n cột cho biến & 1 cột cho hàm)
* 2n hàng tương ứng với 2n tổ hợp biến.
Bảng này gọi là bảng sự thật hay là bảng chân lý.
Ví dụ: Trong nhà có 3 công tắc A,B,C. Khi muốn đèn sáng khi: công tắc A,B,C
đều hở; hoặc A đóng B, C hở; hoặc A hở B đóng C hở. Với giá trị của hàm y đã cho ở
trên ta biểu diễn thành bảng như sau:
Bảng 1.2 Bảng chân lý các giá trị tiếp điểm
- Biểu diễn hình học
Thông thường, với số lượng biến từ 2 đến 3 biến, người ta biểu diễn trên hình học
giống như các hệ tọa độ. Ví dụ biểu diễn 2 biến như hình 1.1
Hình 1.1 Biểu diễn biến số trên hệ tọa độ
3
Công tắc đèn ĐènA B C Y0 0 0 1 sáng0 0 1 00 1 0 1 sáng0 1 1 01 0 0 1 sáng1 0 1 01 1 0 01 1 1 0
- Biểu diễn biểu thức đại số
Đối với tất cả các hàm logic đều có thể biểu diễn được dưới dạng tổng chuẩn và
tích chuẩn đầy đủ.
- Biểu diễn dạng bìa Karnaugh
Hình 1.2 Biểu diễn bằng dạng bìa Karnaugh
Bằng các phương pháp biểu diễn trên, ta sẽ tổng hợp mạch logic để được kết
quả rút gọn. Dựa trên các kết quả đó ta sẽ có các phương pháp tính toán điều khiển bài
toán tối ưu nhất.
4
I.2 Logic trình tự và mạch tổ hợp
I.2.1 Mô hình toán học mạch tổ hợp
- Định nghĩa: Mạch tổ hợp là mạch mà tín hiệu đầu ra ở thời điểm bất kỳ chỉ phụ
thuộc vào tổ hợp các giá trị tín hiệu đầu vào ở thời điểm đó
- Mạch tổ hợp thường có nhiều tín hiệu đầu vào (x1, x2, x3, …) và nhiều tín hiệu
đầu ra (y1, y2, y3, …). Một cách tổng quát có thể biểu diễn theo mô hình toán
học như sau:
y1 = f1(x1, x2,... )
y2 = f2(x1, x2,... )
...
Hình 1.3 Mạch tổ hợp logic
I.2.2 Phân tích mạch tổ hợp
Từ yêu cầu nhiệm vụ đã cho ta biến thành các vấn đề logic, để tìm ra bảng chức
năng ra bảng chân lý. Được thực hiện theo các bước sau:
Hình 1.4 Các bước thực hiện phân tích mạch tổ hợp logic
Các bước thực hiện:
- Phân tích yêu cầu: cần nắm rõ yêu cầu của bài toán
+ xác định nào là biến đầu vào.
+ xác định nào là biến đầu ra.
+ tìm ra mối liên hệ giữa chúng với nhau.
Điều này đòi hỏi người thiết kế phải nắm rõ yêu cầu thiết kế đây là một việc khó
khăn nhưng rất quan trọng trong qua trình thiết kế
- Kê bảng chân lý: liệt kê thành bảng về mối quan hệ giữa đầu vào và ra
5
y1; y2;...Mạch tổ hợpx1; x2;...
Ví dụ:
- Tổng hợp mạch chân lý: Nếu số biến tương đối ít thì dùng phương pháp hình vẽ
Nếu số biến tương đối nhiều thì dùng phương pháp đại số
Một số mạch tổ hợp thường gặp trong thực tế: như bộ mã hóa, mạch lật FF…
I.2.3 Logic trình tự
a, Định nghĩa: tín hiệu đầu ra chỉ được thực hiện khi các tín hiệu đầu vào được thực
hiện theo trình tự đã thiết lập từ trước.
Ví dụ: các mạch lật FF...
b, Phương pháp mô tả mạch trình tự:
- Bảng trạng thái
- Hình đồ trạng thái
- Grafcet
Một số mạch tổ hợp thường gặp trong hệ thống
thường là bộ giải mã, dồn kênh,...
Hình 1.5 Mạch tổ hợp logic trình tự
I.2.4 Khái niệm về mạch trình tự
a, Định nghĩa: là mạch có tín hiệu đầu ra chỉ bị kích hoạt khi các đầu vào được kích
hoạt theo một trình tự nào đó.
Điều này có thể thấy không thể thực hiện mạch logic trình tự theo các mạch
logic thông thường mà sử dụng các đặc tính của mạch lật FF
Một số phần tử logic trình tự: rơ le thời gian, các mạch lật FF: RS, JK,...
6
y1; y2;...Mạch tổ hợp
Logic trình tựx1; x2;...
ph
Hình 1.6 Ví dụ về mạch trình tự dung mạch lật FF
b, Mô tả mạch trình tự
- Phương pháp chuyển trạng thái
Sau khi khảo sát một công nghệ nào đó, ta có được bảng 1.3:
Bảng 1.3 Bảng mô tả sơ đồ công nghệ
+ Các cột của bảng ghi biến đầu vào và biến đầu ra (x1… y1…)
+ Số hang ghi rõ số trạng thái cần có của hệ (S1…)
+ Ô giao giữa cột xi với trạng thái Sj ghi trạng thái của mạch, nếu trạng thái mạch
trùng với trạng thái hàng thì trạng thái đó ổn định
+ Ô giao giữa yi và Sj là tín hiệu ra tương ứng
Để thực hiện tốt việc lập bảng, ta phải nắm rõ được quy trình công nghệ và biết chắc
7
các trạng thái chuyển đổi rõ ràng. Các trạng thái khác không biết hoặc chưa biết thì bổ
xung sau. Phân tích từng ô để xét trạng thái. Tuy nhiên, sẽ rất khó khăn khi phân biết
các trạng thái tương tự như ở bảng 1.4
Bảng 1.4 Các trạng thái tương tự
- Phương pháp lưu đồ
Phương pháp này mô tả trực quan, bao gồm các khối cơ bản:
+ Khối biểu thị giá trị ban đầu
+ Khối biểu thị công việc tính toán
+ Khối kiểm tra điều kiện
+ Khối kết thúc công việc
8
I.3 Grafcet
I.3.1 Định nghĩa
Trong dây chuyền sản xuất công nghiệp máy móc thường hoạt động theo trình
tự logic chặt chẽ nhằm đảm bảo chất lượng sản phẩm, an toàn cho người và thiết bị.
Cấu trúc hoạt động trình tự của dây chuyền đã đưa ra yêu cầu cho điều khiển đồng thời
cũng gợi ý cho ta sự phân nhóm logic của hoạt động trình tự bởi các tập hợp con của
máy móc và các thuật toán điều khiển bằng chương trình con. Sơ đồ khối của hệ điều
khiển quá trình được thể hiện theo sơ đồ sau:
Hình 1.7 Sơ đồ khối điều khiển quá trình
Một quá trình công nghệ bao gồm ba hình thức hoạt động sau:
+ Hoàn toàn tự động
+ Bán tự động
+ Bằng tay
Trong quá trình hệ thống làm việc, để đảm bảo an toàn và linh hoạt, hệ điều
khiển cần phải có sự chuyển đổi dễ dàng từ “tự động” → “bán tự động” hoặc “bằng
tay” và ngược lại → như vậy hệ mới đáp ứng được yêu cầu thực tế.
Trong quá trình làm việc, sự “không bình thường” (sự cố) của hệ thống có rất
nhiều loại; vì vậy trong quá trình phân tích hệ thống cố gắng mô tả chúng một cách
đầy đủ nhất, nghĩa là các sự kiện về lỗi đa số phải được định nghĩa trước. Trong vấn đề
về sự cố người ta thường phân ra làm 3 nhóm sau:
+ Hư hỏng “một bộ phận” trong cấu trúc điều khiển.
+ Hư hỏng “cấu trúc trình tự” điều khiển.
+ Hư hỏng “bộ phận chấp hành”.
9
Khi thiết kế hệ thống phải tính đến các phương án khác nhau như: việc dừng máy khẩn
cấp, xử lý tắc ngẽn vật liệu và nhiều hiện tượng nguy hiểm khác đồng thời cho phép
người vận hành can thiệp ngay điểm xảy ra sự cố hoặc cô lập vùng xảy ra sự cố đó.
Grafcet là cộng cụ rất hữu ích để thiết kế và thực hiện đầy đủ các yêu cầu của hệ thống
tự động hoá các quá trình công nghệ.
Định nghĩa Grafcet: Grafcet là từ viết tắt của tiếng Pháp “Graphe fontionnel de
commande étape transition”, là đồ hình chức năng cho phép mô tả các trạng thái hoạt
động của hệ thống và biểu diễn quá trình điều khiển với các trạng thái chuyển biến từ
trạng thái này sang trạng thái khác, đó là một graph định hướng và xác định bởi các
phần tử sau: G := {E, T, A, M}
+ E = {E1, E2, E3, ... , Em} là một tập hữu hạn các trạng thái (giai đoạn ) của
hệ thống, được kí hiệu bằng hình vuông. Ứng với mỗi trạng thái sao cho hành vi điều
khiển là không thay đổi, hành vi đó có thể hoạt động hoặc là không hoạt động. ⇒ Điều
khiển chính là thực hiện các mệnh đề logic chứa các biến vào/ra để hệ thống có được
trạng thái xác định trong hệ và đây cũng chính là một trong các trạng thái của Grafcet.
+ T = {t1, t2, t3, ... ti} là tập hữu hạn các chuyển trạng thái, biểu diễn bằng dấu
“gạch ngang”. Giữa hai trạng thái luôn tồn tại một chuyển trạng thái, chuyển trạng thái
này có dạng hàm Bool gắn với một chuyển trạng thái → “một tiếp nhận”
+ A = {a1, a2, a3, ... ai} là tập các cung định hướng nối giữa 1 trạng thái với 1
chuyển trạng thái hoặc 1 chuyển trạng thái với một trạng thái.
+ M = {m1, m2, m3, ... mi} là tập các giá trị (0,1). Nếu mi = 1 thì trạng thái i là
hoạt động, ngược lại trạng thái i không hoạt động.
I.3.2 Một số kí hiệu dùng trong Grafcet
Hình vuông có đánh số như hình 1.8 a), b) biểu thị trạng thái; hình chữ nhật bên
phải dùng để mô tả hoạt động của trạng thái đó. Hai hình chữ nhật lồng vào nhau có
đánh số, biểu thị trạng thái khởi đầu. Hình vuông đánh số có kèm theo dấu chấm “.”
biểu thị trạng thái hoạt động.
10
Hình 1.8 Kí hiệu cơ bản Grafcet
Dấu gạch ngang biểu thị cho việc chuyển trạng thái. Trạng thái được chuyển
khi điều kiện chuyển được thoả mãn. Hình 1.9
Hình 1.9 Kí hiệu trong chuyển trạng thái
Các kí hiệu phân nhánh ở hình 1.10. Hình 1.10 a) khi TT1 đang hoạt động nếu
t12 thoả mãn thì TT2 hoạt động; nếu t13 thoả mãn thì TT3 hoạt động; nếu t12 và t13
cùng thoả mãn thì TT2 và TT3 cùng hoạt động gọi là TT OR. Tương tự cho hình 1.10
b). Hình 1.10 c) TT1 đang hoạt động nếu t123 thoả mãn thì cả hai TT2 và TT3 hoạt
động gọi là trạng thái AND. Hình 1.10 d) TT7 và TT8 đang hoạt động nếu t789 thoả
mãn thì TT9 hoạt động trạng thái này gọi là TT AND.
11
Hình 1.10 Kí hiệu phân nhánh
Hình 1.11 a) cho phép thực hiện bước nhảy, nếu đang hoạt động ở TT2, điều
kiện a thoả mãn thì hệ thống sẽ chuyển hoạt động từ TT2 sang TT5 bỏ qua TT3 và
TT4; ngược lại nếu a không thoả mãn thì các trạng thái 3, 4, 5 lần lượt sẽ được thực
hiện. Hình 1.11 b) nếu điều kiện f chưa thoả mãn thì TT8 sẽ quay về lại TT7, nếu f
thoả mãn thì TT8 mới chuyển sang TT9
Hình 1.11 Kí hiệu bước nhảy
I.3.3 Ứng dụng của Grafcet
12
Ta xét một ví dụ cụ thể để mô tả hoạt động của hệ thống tự động điều khiển quá
trình. Hệ thống trộn có sơ đồ công nghệ ở hình 1.12. Thùng X dùng để chứa nước
chuẩn bị cho hệ thống trộn. Trước khi động cơ M kéo cánh khuấy để trộn yêu cầu
thùng Y phải có đủ nước; cân 1 và 2 đã cân đủ vật liệu; lúc động cơ M khởi động cánh
khuấy cũng là lúc hai băng tải C1, C2 được khởi động để đưa hai vật liệu A, B vào
thùng trộng Y.
Hình 1.12 Sơ đồ công nghệ trộn
Trình tự khuấy trộn như sau:
- Nếu mức vật liệu ở thùng trộn là min (Nmin) thì hệ thống làm việc ở chế độ tự động
(AUT) → Cấp tín hiệu cho mở các van V1, V2, V3.
- Bơm P được khởi động để bơm nước từ thùng X vào thùng Y.
- Khi khối lượng cân trên các cân 1, 2 đã đủ thì van V2, V3 đóng lại.
- Nước trong thùng Y tăng dần cho đến khi đạt mức max (Nmax) thì bơm P dừng và
van V1 đóng lại.
- Khi việc chuẩn bị nguyên vật liệu trên đã xong, động cơ khuấy M bắt đầu hoạt động
đồng thời các van V4, V5 mở, băng tải C1, C2 hoạt động để đưa liệu vào thùng Y.
- Quá trình trộn được tính bằng thời gian t2, sau thời gian t2 thì có tín hiệu Ft2 xuất
hiện và cắt động cơ khuấy M để kết thúc quá trình trộn.
- Nlim là tín hiệu cực hạn trên để cấm hoạt động khi thùng trộn Y đã quá đầy.
- Trước khi động cơ M hoạt động thì van Ev mở để tháo hết vật liệu trong thùng Y ra
ngoài đến mức min (Nmin đóng), đồng thời vật liệu trên cân 1, 2 đã hết thì van V4, V5
tự động đóng lại nhưng băng tải C1, C2 còn phải quay thêm một đoạn nữa để đưa hết
vật liệu trên băng tải xuống thùng Y.
13
- Vì lý do an toàn, hệ thống còn có nút dừng khẩn cấp (AU) khi hệ thống có sự cố bất
thường, đồng thời trước khi hệ thống hoạt động lại cần có tín hiệu đặt lại cho hệ thống
(REP).
Hình 1.13 Sơ đồ cấu trúc
Ở đây: M, P, C1, C2, V1, V2, V3, V4, V5, Ev là biến điều khiển quá trình: AUT, AU,
REP. A, B, Nmin, Nmax, Nlim là tín hiệu quá trình đưa về điều khiển trạng thái.
Có 2 điều kiện về điều khiển cần lưu ý:
Phương thức làm việc tự động theo chu kỳ. Chu kỳ ở đây là chu kỳ trộn, nghĩa
là hệ thống đã thực hiện xong mỗi mẽ trộn. Một mẽ trộn được bắt đầu bằng tín hiệu
điều khiển AUT (điều kiện bắt đầu là P, M, V1, V2... trạng thái chưa làm việc).
Phương thức khoá khi có sự cố, khi có sự cố ngẫu nhiên thì hệ thống phải được
dừng khẩn cấp bằng lệnh AU. Lúc này phải chốt lại ngay kết quả đang xử lý, đến khi
nào sự cố được khắc phục xong thì được hoạt động theo trình tự đặt lại bằng lệnh REP
với việc tính đến hoặc không tính đến điều kiện khởi động ban đầu.
Ban đầu chúng ta bắt đầu đi vào thiết kế hệ thống chưa có lệnh AU và REP
tham gia, đó là Grafcet ở hình 1.14. Trạng thái khởi đầu trong trường hợp này là TT1.
Giả sử các điều kiện đầu là thùng ở mức min, cơ cấu chấp, hành ở trạng thái tốt (sẵn
sàng làm việc) thì trạng thái 2, 3, 4 được thực hiện (van V1 mở, bơm P quay, van V2,
V3 mở để đưa vật liệu xuống cân 1, 2). Khi nước trong thùng dâng lên đến mức max
(Nmax) thì hệ thống chuyển sang trạng thái 5. Khi khối lượng trên cân 1 (tín hiệu báo
14
đủ A), khối lượng rên cân 2 (tín hiệu báo đủ B) thì hệ thống chuển sang trạng thái 6, 7.
Trạng thái 5, 6, 7 biểu hiện cho nguyên liệu trong một mẽ trộn đã chuẩn bị xong. Khi
các điều kiện Nmax, A, B đã thỏa mãn thì hệ thống sẽ chuyển sang trạng thái 8, tương
ứng động cơ trộn M hoạt động, thời gian t2 được tính, van V4, V5 mở, băng tải C1, C2
hoạt động. Khi xả hết liệu trên hai cân 1, 2 thì van V1, V2 dừng và thời gian t1 được
tính để hai băng tải chạy thêm 1 thời gian nữa (t1). Sau thời gian này băng tải dừng và
tín hiệu Ft1 xuất hiện và hệ thống chuyển sang trạng thái 9, tại đây M vẫn còn hoạt
động đến khi thời gian t2 kết thúc hệ thống sẽ chuyển về trạng thái nghỉ để chuẩn bị
cho chu kỳ tiếp theo.
Hình 1.14
Ngoài các chế độ làm việc bình thường, ta có thể xây dựng với các chế độ bị lỗi
và khắc phục sự cố cho hệ thống trên.
15
Chương 2 Bộ điều khiển lập trình PLC
II.1 Đặc điểm bộ điều khiển logic khả trình (PLC)
II.1.1 Sự ra đời của bộ điều khiển PLC
Năm 1642, Pascal đã phát minh ra máy tính cơ khí dùng bánh răng. Đến năm 1834
Babbage đã hoàn thiện máy tính cơ khí "vi sai" có khả năng tính toán với độ chính xác
tới 6 con số thập phân.
Năm 1808, Joseph M.Jaquard đã dùng các lỗ trên tấm bìa thẻ kim loại mỏng, sắp
xếp chúng trên máy dệt theo nhiều chiều khác nhau để điều khiển máy dệt tự động
thực hiện các mẫu hàng phức tap.
Trước năm 1904, Hoa Kỳ và Đức đã sử dụng mạch rơle để triển khai chiếc máy
tính điện tử đầu tiên trên thế giới.
Năm 1943, Mauhly và Ackert chế tạo "cái máy tính" đầu tiên gọi là "máy tính và
tích phân số điện tử" viết tắt là ENIAC. Máy có: 18.000 đèn điiện tử chân không,
500.000 mối hàn thủ công, chiếm diện tích 1613 ft2, công suất tiêu thụ điện 174 kW,
6000 nút bấm, khoảng vài trăm phích cắm.
Chỉ tới khi áp dụng kỹ thuật bán dẫn vào năm 1948, đưa vào sản xuất công nghiệp
vào những năm 60 thế kỷ trước thì những máy tính điện tử lập trình lại mới được sản
xuất và thương mại hoá.
Sự phát triển của máy tính cũng kèm theo kỹ thuật điều khiển tự động.
- Mạch tích hợp điện tử - IC - năm 1959.
- Mạch tích hợp gam rộng - LSI - năm 1965.
- Bộ vi xử lý - năm 1974.
- Dữ liệu chương trình - điều khiển.
- Kỹ thuật lưu giữ...
Những phát minh này đã đánh dấu một bước rất quan trọng và quyết định trong
việc phát triển ồ ạt kỹ thuật máy tính và các ứng dụng của nó như PLC, CNC,... lúc
này khái niệm điều khiển bằng cơ khí và bằng điện tử mới được phân biệt. Sự phát
triển của PLC đã đem lại nhiều thuận lợi và làm cho nó các thao tác máy trở nên
nhanh, nhạy, dễ dàng và tin cậy hơn. Nó có khả năng thay thế hoàn toàn cho các
phương pháp điều khiển truyền thống dùng rơle (loại thiết bị phức tạp và cồng kềnh);
16
khả năng điều khiển thiết bị dễ dàng và linh hoạt dựa trên việc lập trình trên các lệnh
logic cơ bản; khả năng định thời, đếm; giải quyết các vấn đề toán học và công nghệ;
khả năng tạo lập, gửi đi, tiếp nhận những tín hiệu nhằm mục đích kiểm soát sự kích
hoạt hoặc đình chỉ những chức năng của máy hoặc một dây chuyền công nghệ.
Như vậy những đặc điểm làm cho PLC có tính năng ưu việt và thích hợp trong môi
trường công nghiệp: Khả năng kháng nhiễu rất tốt; Cấu trức dạng modul rất thuận tiện
cho việc thiết kế, mở rộng, cải tạo nâng cấp; Có những modul chuyên dụng để thực
hiện những chức năng đặc biệt hay những modul truyền thông để kết nối PLC với
mạng công nghiệp hoặc mạng Internet; Khả năng lập trình được, lập trình đễ dàng
cũng là đặec điểm quan trọng để xếp hạng một hệ thống điều khiển tự động; Yêu cầu
của người lập trình không cần giỏi về kiến thức điện tử mà chỉ cần nắm vững công
nghệ sản xuất và biết chọn thiết bị thích hợp là có thể lập trình được; Thuộc vào hệ sản
xuất linh hoạt do tính thay đổi được chương trình hoặc thay đổi trực tiếp các thông số
mà không cần thay đổi lại chương trình.
II.1.2 Các khái niệm cơ bản về PLC
Các thành phần của một PLC thường có các modul phần cứng sau:
(1) Modul nguồn PS.
(2) Modul đơn vị xử lý trung tâm CPU.
(3) Modul bộ nhớ chương trình và dữ liệu ROM-RAM.
(4) Modul đầu vào/ra SM.
(5) Modul phối ghép IM (để hỗ trợ cho vấn đề truyền thông nội bộ).
(6) Modul truyền thông CP (để hỗ trợ cho vấn đề truyền thông mạng).
(7) Modul chức năng FM (điều khiển chức năng riêng biệt).
Cấu trúc phần cứng của PLC
17
Hình 2.1 Cấu trúc cơ bản của PLC S7-200
- Đơn vị xử lý trung tâm (CPU Central Procesing Unit):
Thường trong mỗi PLC có một CPU, ngoài ra còn có một số loại lớn có tới hai
CPU dùng để thực hiện những chức năng điều khiển phức tạp và quan trọng gọi là hot
standbuy hay redundant. Tuy nhiên, đối với các ứng dụng nhỏ thì chỉ có một CPU
thực hiện.Do đó, bộ vi xử lý quyết định khả năng và chức năng của PLC.
- Bộ nhớ: Bao gồm cả RAM, ROM, EEPROM.
Một nguồn điện dự phòng là cần thiết cho RAM để duy trì dữ liệu ngay cả khi mất
nguồn điện chính. Bộ nhớ được thiết kế thành dạng modul để cho phép dễ dàng thích
nghi với các chức năng điều khiển với các kích cỡ khác nhau. Muốn rộng bộ nhứo chỉ
cần cắm thẻ nhớ vào rãnh cắm chờ sẵn trên modul CPU.
- Khối vào/ ra:
Hoạt động xử lý tín hiệu bên trong PLC: 5VDC, 15VDC (điện áp cho họ TTL &
CMOS). Trong khi đó tín hiệu điều khiển bên ngoài có thể lớn hơn. khoảng 24VDV
đến 240VDC hay 110VAC đến 220VAC với dòng lớn. Khối giao tiếp vào ra có vai trò
giao tiếp giữa mạch vi điên tử của PLC với mạch công suất bên ngoài. Thực hiện
chuyển mức điện áp tín hiệu và cách ly bằng mạch cách ly quang (Opto-isolator) trên
các khối vào ra. Cho phép tín hiệu nhỏ đi qua và ghim các tín hiệu có mức cao xuống
mức tín hiệu chuẩn.
Ngõ vào: nhận trực tiếp tín hiệu từ cảm biến.
Ngõ ra: là các transistor, rơle hay triac vật lý.
- Thiết bị lập trình: Có 2 loại thiết bị có thể lập trình được đó là:Các thiết bị
chuyên dụng đối với từng nhóm PLC của hãng tương ứng. Máy tính có cài đặt
phần mềm.
- Modul quản lý việc phối ghép: Dùng để phốii ghép bộ PLC với các thiết bị bên
ngoài như máy tính, thiết bị lập trình, bảng vận hành và mạng truyền thông
công nghiệp.
- Thanh ghi (Register): là bộ nhớ 16 bit hay 32 bit để lưu trữ tạm thời khi PLC
thực hiện quá trình tính toán. Thanh ghi chốt (Latch register) duy trì nội dung
cho đến khi nó được chồng lên bằng nội dung mới. Thanh ghi chuyên dùng
(Special register). Thanh ghi tập tin hay thanh ghi bộ nhớ chương trình
18
(Program memory registers). Thanh ghi điều chỉnh giá trị được từ biến trở bên
ngoài (External adjusting register). Thanh ghi chỉ mục (Index register).
- Bộ đếm (Counter): kí hiệu là C.
+ Phân loại: tín hiệu đầu vào: Bộ đếm tiến. Bộ đếm lùi. Bộ đếm tiến lùi (bộ đếm
này có cờ chuyên dụng chọn chiều đếm). Bộ đếm pha phụ thuộc vào sự lệch pha giữa
hai tín hiệu xung kích. Bộ đếm tốc độ cao (high speed counter), xung kích có tần số
cao khoảng vài kZ đến vài chục kZ.
+ Theo kích thước của thanh ghi và chức năng của bộ đếm: Bộ đếm 16 bit. Bộ
đếm 32 bit. Bộ đếm chốt: duy trì nội dung đếm ngay cả khi PLC bị mất điện.
- Bộ định thời (times): kí hiệu là T, được dùng để định các sự kiện có quan tâm
đến vấn đề thời gian, bộ định thơi trên PLC được gọi là bộ định thời logic. Việc
tổ chức định thời thực chất là một bộ đếm xung với chu ký có thể thay đổi
được.
II.1.3 Giới thiệu một số nhóm PLC phổ biến hiện nay trên thế giới
. Siemens: có ba nhóm
CPU S7 200:
CPU 21x: 210; 212; 214; 215-2DP; 216.
CPU 22x: 221; 222; 224; 224XP; 226; 226XM.
CPU S7300:
CPU S7400:
. Mitsubishi:
. Omron:
. Allen Bredly:
. Controtechnique:
. ABB:
AC 100M
AC 400M
AC 800M, là loại có 2 module CPU làm việc song song, chế độ dự phòng nóng.
19
II.2 Tổng quan về họ PLC S7-200 của hãng Siemens
Có hai series: 21x (loại cũ không còn sản xuất nữa) và 22x (loại mới). Về mặt tính
năng thì loại mới có ưu điểm hơn nhiều.Bao gồm các loại CPU sau: 221, 222, 224,
224XP, 226, 226XM trong đó CPU 224XP có hỗ trợ analog I/O onboard và 2 port
truyền thông.
Bảng 2.1: Các loại CPU S7-200
II.2.1 Cấu trúc phần cứng của S7-200
II.2.1.1 Hình dáng bên ngoài:
- Các đèn trạng thái:
20
Hình 2.2 Cấu trúc phần cứng của PLC S7-200
Đèn RUN-màu xanh: Chỉ định PLC ở chế độ làm việc và thực hiện chương
trình đã được nạp vào bộ nhớ chương trình.
Đèn STOP-màu vàng: Chỉ định PLC ở chế độ STOP, dừng chương trình đang
thực hiện lại (các đầu ra đều ở chế độ off).
Đèn SF-màu đỏ, đèn báo hiệu hệ thống bị hỏng có nghĩa là lỗi phần cứng hoặc
hệ điều hành. Ở đây cần phân biệt lỗi hệ thống và lỗi chương trình người dùng, lỗi
chương trình người dùng thì CPU không thể nhận biết được vì trước khi download
xuống CPU, phần mềm đã làm nhiệm vụ kiểm tra trước khi dịch sang mã máy.
Đèn Ix.x-màu xanh: Chỉ định trạng thái On/Off của đầu vào số.
Đèn Qx.x-màu xanh: Chỉ định trạng thái On/Off của đầu vào số.
Port truyền thông nối tiếp: RS 485 protocol, 9 chân sử dụng cho việc phối ghép
với PC, PG, TD200, TD200C, OP, mạng biến tần, mạng công nghiệp. Tốc độ truyền -
nhận dữ liệu theo kiểu PPI là 9600 baud. Tốc độ truyền - nhận dữ liệu theo kiểu
Freeport là 300- 38400 baud
- Công tắc chọn chế độ:
Công tắc chọn chế độ RUN: Cho phép PLC thực hiện chương trình, khi chương
trình gặp lỗi hoặc gặp lệnh STOP thì PLC sẽ tự động chuyển sang chế độ STOP mặc
dù công tắc vẫn ở chế độ RUN (nên quan sát đèn trạng thái).
Công tắc chọn chế độ STOP: Khi chuyển sang chế độ STOP, dừng cưỡng bức
chương trình đang chạy, các tín hiệu ra lúc này đều về off.
Công tắc chọn chế độ TERM: cho phép người vận hành chọn một trong hai chế
độ RUN/STOP từ xa, ngoài ra ở chế độ này được dùng để download chương trình
người dùng.
- Vít chỉnh định tương tự: Mỗi CPU có từ 1 đến 2 vít chỉnh định tương tự, có thể
xoay được một góc 270 độ, dùng để thay đổi giá trị của biến sử dụng trong
chương trình.
- Pin và nguồn nuôi bộ nhớ: Sử dụng tụ vạn năng và pin. Khi năng lượng của tụ
bị cạn kiệt PLC sẽ tự động chuyển sang sử dụng năng lượng từ pin.
II.2.1.2 Giao tiếp với thiết bị ngoại vi
- Thiết bị lập trình loại PGxx được trang bị sẵn phần mềm lập trình, chỉ lập trình
21
được với ngôn ngữ STL.
- Máy tính PC trên đó có cài đặt phần mềm Step7 Mcro/Win 32 và Step7
Mcro/Dos. Hiện nay hầu hết sử dụng Step7 Mcro/Win 32 version 3.0,3.2,4.0.
V4.0 cho phép người lập trình có thể xem được giá trị, trạng thái cũng như đồ
thị của các biến. Nhưng chỉ sử dụng được trên máy tính có cài đặt hệ điều hành
Window 2000/ WinNT và PLC loại version mới nhất hiện nay.
II.2.1.3 Giao tiếp giữa sensor và cơ cấu chấp hành:
S7-200 có hai loại cơ bản: AC/DC/RLY, loại này điện áp nguồn cung cấp từ 85-
264 VAC, tần số 47-63 Hz;
Điện áp vào: có nguồn cung cấp điện áp chuẩn cho sensor là 24VDC.
Điện áp ra: loại này sử dụng nguồn điện ngoài, có thể là DC hoặc AC nhưng không
vượt quá 220V. Nếu sử dụng đối với những thiết bị tiêu thụ có công suất bé khoảng
chừng vài W thì có thể lấy trực tiếp nguồn của cảm biến.
II.2.2 Cấu trúc bộ nhớ S7-200
II.2.2.1. Phân chia bộ nhớ
Bộ nhớ được chia làm 4 vùng cơ bản, hầu hết các vùng nhớ đều có khả năng đọc
ghi chỉ trừ vùng nhớ đặc biệt SM (special memory) là vùng nhớ chỉ đọc.
- Vùng nhớ chương trình là miền bộ nhớ được dùng để lưu giữ các lệnh chương
trình. Vùng này thuộc kiểu non-valatie đọc/ghi được.
- Vùng nhớ tham số: là miền lưu giữ các tham số như từ khoá, địa chỉ trạm...
cũng giống như vùng chương trình, Vùng này thuộc kiểu non-valatie đọc/ghi
được.
- Vùng dữ liệu: được sử dụng để cất các dữ liệu của chương trình bao gồm kết
quả của các phép tính, hằng số được định nghĩa trong chương trình, bộ đệm
truyền thông...
- Vùng đối tượng: Timer, bộ đếm, bộ đếm tốc độ cao và các cổng vào/ra tương tự
được đặt trong vùng nhớ cuối cùng. Vùng này không thuộc kiểu non-valatile
nhưng đọc/ghi được.
II.2.2.2. Vùng nhớ dữ liệu và đối tượng:
Vùng nhớ dữ liệu là vùng nhớ động, nó có thể truy cập theo từng bit, byte,từ đơn
(worrd), từ kép (double worrd) và cũng có thể truy nhập được với mảng dữ liệu. Được
22
sử dụng làm miền lưu trữ dữ liệu cho các thuật toán, các hàm truyền thông, lập bảng,
các hàm dịch chuyển, xoay vòng thanh ghi, con trỏ địa chỉ...
Vùng đối tượng được sử dụng để lưu giữ dữ liệu cho các đối tượng lập rtình như
các giá trị tức thời, giá trị đặt trước của bộ đếm hay Timer. Dữ liệu kiểu đối tượng bao
gồm các thanh ghi của counter, bộ đếm, các bộ đếm tốc độ cao, bộ đệm vào/ra tương
tự và các thanh ghi AC (Accumulator). Vùng nhớ dữ liệu và đối tượng được chia ra
nhiều miền nhớ nhỏ với những ứng dụng khác nhau. Chúng được ký hiệu bằng chữ cái
đầu của tên tiếng Anh. Thông số, chức năng, giới hạn của các vùng nhớ tương ứng với
từng CPU được mô tả qua các bảng sau:
Bảng 2.2 Thông số, chức năng và giới hạn vùng nhớ các họ PLC S7-200
Địa chỉ truy nhập được quy ước với công thức:
Truy nhập theo bit:
- Viết: tên miền (+) địa chỉ byte (+). (+) chỉ số bit (từ 07).
- Đọc: ngược lại, ví dụ: V12.7_bit 7 của byte 12 trong vùng nhớ V.
Truy nhập theo byte:
- Viết: tên miền (+) B (+) địa chỉ của byte trong miền.
- Đọc: ngược lại, ví dụ: VB32_byte 32 trong vùng nhớ V.
Truy nhập theo Word (từ):
- Viết: tên miền (+) W (+) địa chỉ byte cao của từ trong miền.
- Đọc: ngược lại, ví dụ: VW180_Word 180 trong vùng nhớ V, từ này
gồm có 2 byte 180 và 181
23
Truy nhập theo double Word (từ kép):
- Viết: tên miền (+) D (+) địa chỉ byte cao của từ cao trong miền.
- Đọc: ngược lại, ví dụ: VD8_double Word 8 trong vùng nhớ V, từ kép
này bao gồm 4 byte 8, 9, 10, 11
Tất cả các byte thuộc vùng dữ liệu đề có thể truy nhập bằng con trỏ. Con trỏ quy
định trong vùng nhớ V, L hoặc các thanh ghi AC1, AC2, AC3. Mỗi con trỏ gồm 4
byte, dùng lệnh MOVD. Quy ước sử dụng con trỏ để truy nhập như sau: &địa chỉ byte
(cao) là toán hạng lấy địa chỉ của byte, từ hoặc từ kép mà con trỏ đang chỉ vào. Ví dụ:
AC1=&VB10, thanh ghi AC1 chứa đại chỉ của byte 10 thuộc vùng nhớ V.
VD100=&VW110, từ kép VD100 chứa địa chỉ byte cao (VB110) của từ đơn VW110.
AC2=&VD150, thanh ghi AC2 chứa địa chỉ của byte cao (VB150) của tứ kép VD150.
*con trỏ là toán hạng lấy nội dung của byte, từ hoặc từ kép mà con trỏ đang chỉ
vào. Ví dụ như đối phép gán địa chỉ trên thì:
*AC1=VB10, lấy nội dung của byte VB10.
*VD100=VW110, lấy nội dung của từ đơn VW110.
Phép gán địa chỉ và sử dụng con trỏ như trên cũng có tác dụng với những thanh ghi 16
bit của Timer, bộ đếm thuộc vùng đối tượng hay các vùng nhớ I, Q, V, M, AI, AQ, SM
II.2.2.3 Mở rộng cổng vào ra
Số module mở rộng tuỳ thuộc vào từng loại CPU, số module tương ứng với từng
loại CPU được trình bày theo bảng 2.3. Cách mắc nối các module mở rộng được mắc
nối tiếp (theo một móc xích) về phía bên phải của module CPU. Các module số hoặc
tương tự đều chiếm chỗ trên bộ đệm 100 vào/ra tương ứng với đầu vào/ra của module
24
Bảng 2.3 Quy tắc đánh địa chỉ cho các module mở rộng PLC S7-200
Chương 3. Ngôn ngữ lập trình cho PLC S7-200
III.1 Phương pháp lập trình
S7-200 biểu diễn một mạch logic cứng bằng một dãy các lệnh lập trình. Chương
trình bao gồm một dãy các tập lệnh. S7-200 thực hiện chương trình bắt đầu từ lệnh lập
trình đầu tiên và kết thúc ở lập trình cuối trong một vòng quét (scan).
Một vòng quét được bắt đầu bằng một việc đọc trạng thái của đầu vào, và sau đó
thực hiện chương trình. Vòng quét kết thúc bằng việc thay đổi trạng thái đầu ra. Trước
khi bắt đầu một vòng quét tiếp theo S7-200 thực thi các nhiệm vụ bên trong và nhiệm
vụ truyền thông. Chu trình thực hiện chương trình là chu trình lặp.
Cách lập trình cho S7-200 nói riêng và cho các PLC nói chung dựa trên hai
phương pháp cơ bản. Phương pháp hình thang (Ladder, viết tắt là LAD) và phương
pháp liệt kê lệnh (Statement list, viết tắt là STL).
Nếu có một chương trình viết dưới dạng LAD, thiết bị lập trình sẽ tự động tạo ra
một chương trình theo dạng STL tương ứng. Ngược lại không phải mọi chương trình
viết dưới dạng STL đều có thể chuyển sang được dạng LAD.
Phương pháp hình thang (LAD): LAD là một ngôn ngữ lập trình bằng đồ họa,
những thành phần cơ bản dùng trong LAD tương ứng với các thành phần của bảng
điều khiển bằng rơ le. Trong chương trình LAD, các phần tử cơ bản dùng để biểu
diễn lệnh logic như sau:
Tiếp điểm: Tiếp điểm thường mở Tiếp điểm thương đóng
Cuộn dây (coil): Là biểu tượng mô tả rơ le được mắc theo chiều dòng
điện cung cấp cho rơ le.
Hộp (Box): Là biểu tượng mô tả các hàm khác nhau, nó làm việc khi có dòng
điện chạy đến hộp. Những dạng hàm thường được biểu diễn bằng hộp là các bộ
thời gian (Timer), bộ đếm (counter) và các hàm toán học. Cuộn dây và các hộp
phải mắc đúng chiều dòng điện.
Mạng LAD: Là đường nối các phần tử thành một mạch hoàn thiện, đi từ đường
nguồn bên trái sang đường nguồn bên phải.. Dòng điện chạy từ trái qua tiếp điểm đến
đóng các cuộn dây hoặc các hộp trở về bên phải nguồn.
25
Phương pháp liệt kê lệnh (STL): Là phương pháp thể hiện chương trình dưới dạng
tập hợp các câu lệnh. Mỗi câu lệnh trong chương trình, kể cả những lệnh hình thức
biểu diễn một chức năng của PLC.
Các toán hạng và giới hạn cho phép của CPU 2xx:
Phương pháp truy nhập Giới hạn cho phép của các toán hạngTruy nhập bit (địa chỉ byte, chỉ số bit)
V (0.0 4095.7)I (0.0 7.7)
Q (0.0 7.7)M (0.0 31.7)SM (0.0 85.7)T (0 127)C (0 127)
Truy nhập bit VB (0 4.095) IB (0 7) MB (0 31). SMB (0 85) AC (0 3) Hằng số
Truy nhập từ đơn VW (0 4094)T (0 127)C (0 127)IW (0 6)QW (0 6)MW (0 30)SMW (0 84)AC (0 3)AIW (0 30)AQW (0 30)Hằng số
Truy nhập từ kép VD (0 4092)ID (0 4)QD (0 4)MD (0 28)SMD (0 82)AC (0 3)HC (0 2)Hằng số.
III.1.1 Một số lệnh cơ bản dùng trong lập trình
III.1.1.1 Các lệnh vào ra
26
Load (LD): Lệnh LD nạp giá trị logic của một tiếp điểm vào trong bít đầu tiên
của ngăn xếp (xem hình a), các giá trị cũ còn lại trong ngăn xếp bị đẩy lùi xuống
một bít.
Load Not (LDN): Lệnh LDN nạp giá trị logic nghịch đảo của một tiếp điểm vào
trong bít đầu tiên của ngăn xếp (xem hình b), các giá trị còn lại trong ngằn xếp
bị đẩy lùi xuống một bít.
Các dạng khác nhau của lệnh LD, LDN cho LAD như sau:
LAD Mô tả Toán hạng
LD n Tiếp điểm thường mở
sẽ được đóng nếu n = 1.
n: I, Q, M, SM, T, C, V
(bit)
LDN n Tiếp điểm thường đóng
sẽ mở khi n = 1.
LDI n Tiếp điểm thường mở
sẽ đóng tức thời khi n = 1
n: I
LDNI n Tiếp điểm thường đóng
sẽ mở tức thời khi n = 1
Các dạng khác nhau của lệnh LD, LDN cho STL như sau:
Lệnh Mô tả Toán hạngLD n Lệnh nạp giá trị logic
của điểm n vào bít đầu tiên trong ngăn xếp.
n (bít): I, Q, M, SM, T, C, V
LDN n Lệnh nạp giá trị logic nghịch đảo của điểm n vào bít đầu tiên trong ngăn xếp.
LDI n Lệnh nạp tức thời giá trị logic của điểm n vào bít đầu tiên trong ngăn xếp.
n: I
LDNI n
Lệnh nạp tức thời giá trị logic nghịch đảo của điểm n vào bít đầu tiên trong ngăn xếp.
OUTPUT (=)
27
Lệnh sao chép nội dung của bít đầu tiên trong ngăn xếp vào bít được chỉ định trong
lệnh. Nội dung cua ngăn xếp không bị thay đổi.
Mô tả lệnh bằng LAD như sau:
LAD Mô tả Toán hạng
Cuộn dây đầu ra ở trạng thái
kích thích khi có dòng điều
khiển đi qua.
n: I, Q, M, SM, T, C, V (bít)
Cuộn dây đầu ra được kích
thích tức thời khi có dòng
điều khiển đi qua.
n: Q (bít)
Mô tả bằng lệnh STL như sau:
STL Mô tả Toán hạng
= n
Lệnh = sao chép giá trị
của đỉnh ngăn xếp tới tiếp
điểm n được chỉ dẫn trong
lệnh.
n: I, Q, M, SM, T, C, V (bít)
= I n
Lệnh = I (immediate) sao
chép tức thời giá trị của đỉnh
stack tới tiếp điểm n được
chỉ dẫn trong lệnh.
n: Q (bít)
III.1.1.2 Các lệnh ghi/ xóa giá trị cho tiếp điểm
SET (S) và RESET (R):
Lệnh dùng để đóng (SET) và ngắt (RESET) các điểm gián đoạn đã được thiết kế.
Trong LAD, logic điều khiển dòng điện đóng hoặc ngắt các cuộc dây đầu ra. Khi dòng
điều khiển đến các cuộc dây thì các cuộn dây đóng hoặc mở các tiếp điểm (hoặc một
dãy các tiếp điểm).
Trong STL, lệnh truyền trạng thái bít đầu của ngăn xếp đến các điểm thiết kế. Nếu
bít này có giá trị =1, các lệnh S và R sẽ đóng ngắt tiếp điểm hoặc một dãy các tiếp
điểm (giới hạn từ 1 đến 255). Nội dung của ngăn xếp không bị thay đổi bởi lệnh này.
Mô tả bằng lệnh LAD
28
LAD Mô tả Toán hạng
Đóng một mảng gồm n các
tiếp điểm kể từ S_BIT
S BIT: I, Q, M, SM,
T, C, V
n(byte): IB, QB, MB,
SMB, VB,AC, Hằng số,
*VD, *AC
Đóng một mảng gồm n các
tiếp điểm kể từ S BIT. Nếu S
BIT lại chỉ vào Timer hoặc
Counter thì lệnh sẽ xóa bít đầu
ra của Timer/ Counter đó.
Đóng tức thời một mảng
gồm n các tiếp điểm kể từ S
BIT
S BIT: Q
N(byte): IB, QB, MB,
SMB, VB,AC, Hằng số,
*VD, *AC
Ngắt tức thời một mảng
gồm n các tiếp điểm kể từ địa
chỉ S BIT
STL Mô tả Toán hạng
S S_bit, n Ghi giá trị logic vào một
mảng gồm n bít kể từ địa chỉ S
BIT
S BIT: I, Q, M, SM,
T, C, V
(bit)
n: IB, QB, MB,
SMB, VB
(byte) AC, Hằng số,
*VD, *AC
R S_bit, n Xóa một mảng gồm n bít kể
từ địa chỉ S BIT. Nếu S BIT
lại chỉ vào Timer hoặc
Counter thì lệnh sẽ xóa bít đầu
ra của Timer / Counter.
SI S_bit, n Ghi tức thời giá trị logic 1
vào một mảng gồm n bít kể từ
địa chỉ S BIT
S BIT: Q
(bit)
n: IB, QB, MB,
SMB, VB (byte)
(byte) AC, Hằng số,
*VD, *AC
RI S_bit, n Xóa tức thời một mảng
gồm n bít kể từ địa chỉ S
BIT
29
Hình 3.1 Ví dụ về các lệnh cơ bản Out, Set và Reset
III.1.1.3 Các lệnh logic đại số (BOOLEAN)
AND (A) và OR (O)
Các lệnh tiếp điểm đại số Boolean cho phép tạo lập được các mạch logic (không có
nhớ). Trong LAD các lệnh này được biểu diễn thông qua cấu trúc mạch, mắc nối tiếp
hay song song các tiếp điểm thường đóng và các tiếp điểm thường mở. STL có thể sử
dụng các lệnh A (And) và O (Or) cho các hàm hở hoặc các lệnh AN (And Not), ON
(Or Not) cho các hàm kín.
Giá trị của ngăn xếp thay đổi phụ thuộc vào từng lệnh.
Lệnh Mô tả Toán hạng
A n
O n
Lệnh thực hiện toán tử (A) và (O)
giữa giá trị logic của tiếp điểm n và
giá trị bít đầu tiên trong ngằn xếp.
Kết quả được ghi lại bít đầu trong
ngăn xếp.
n: I, Q, M, SM, T, C,
V
(bit)
30
Lệnh Mô tả Toán hạng
AN n
ON n
Lệnh thực hiện toán tử ^ (A) và V
(O) giữa giá trị logic nghịch đảo của
tiếp điểm n và giá trị bít đầu tiên
trong ngằn xếp. Kết quả được ghi lại
bít đầu trong ngăn xếp.
AI n
OI n
Lệnh thực hiện tức thời toán tử ^
(A) và V (O) giữa giá trị logic của
tiếp điểm n và giá trị bít đầu tiên
trong ngằn xếp. Kết quả được ghi lại
bít đầu trong ngăn xếp.
n: 1
(bit)
ANI n
ONI n
Lệnh thực hiện tức thời toán tử ^
(A) và V (O) giữa giá trị logic
nghịch đảo của tiếp điểm n và giá trị
bít đầu tiên trong ngằn xếp. Kết quả
được ghi lại bít đầu trong ngăn xếp.
Lệnh A và O phối hợp giá trị logic của một tiếp điểm n với giá trị bít đầu tiên của
ngăn xếp. Kết quả phép tính được đặt lại vào bít đầu tiên trong ngăn xếp. Giá trị của
các bít còn lại trong ngăn xếp không bị thay đổi.
Luật tính toán của các phép tính logic And và Or như sau:
x y And Or
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 1
ALD, OLD, LPS, LRD, LPP
Ngoài những lệnh làm việc trực tiếp với tiếp điểm, S7-200 còn có 5 lệnh đặc biệt
biểu diễn các phép tính của đại số Boolean cho các bit trong ngăn xếp, được gọi là các
lệnh stack logic. Đó là các lệnh ALD (And load), OLD (Or load), LPS (Logic push),
LRD (Logic read) và LPP (Logic pop). Lệnh stack logic được dùng để tổ hợp, sao
chụp hoặc xóa các mệnh đề logic. LAD không có bộ đếm dành cho lệnh stack logic.
31
STL sử dụng các lệnh stack logic để thực hiện phương trình tổng thể có nhiều biểu
thức con.
Bảng sao tóm tắt cú pháp gọi các lệnh stack logic trong STL.
Lệnh Mô tả Toán hạng
ALD Lệnh tổ hợp giá trị của bít đầu tiên và thứ hai của
ngăn xếp bằng phép tính logic. Kết quả ghi lại vào
bít đầu tiên. Giá trị còn lại của ngăn xếp được kéo
lên một bít.
Không có
OLD Lệnh tổ hợp giá trị của bít đầu tiên và thứ hai của
ngăn xếp bằng phép tính logic V. Kết quả ghi lại
vào bít đầu. Giá trị còn lại của ngăn xếp được kéo
lên một bít.
Không có
LPS Lệnh logic Push (LPS) sao chụp giá trị của bít đầu
tiên vào bít thứ hai trong ngăn xếp. Giá trị còn lại bị
đẩy xuống một bít. Bít cuối cùng bị đẩy ra khỏi
ngăn xếp.
Không có
LRD Lệnh sao chép giá trị của bít thứ hai vào bít đầu tiên
trong ngăn xếp. Các giá trị còn lại của ngăn xếp giữ
nguyên vị trí.
Không có
LPP Lệnh kéo ngăn xếp lên một bít. Giá trị của bít sau
được chuyển cho bít trước.
Không có
Lệnh ALD và lệnh OLD thực hiện phép tính logic And và Or giữa hai bít đầu tiên
của ngăn xếp. Kết quả của phép logic này sẽ được ghi lại vào bít đầu trong ngăn xếp.
Nội dung còn lại của ngăn xếp được kéo lên một bít.
LOGIC PUSH (LPS)
LOGIC READ (LRD)
LOGIC POP (LPP)
Lệnh LPS, LRD va LPP là những lệnh thay đổi nội dung bít đầu tiên của ngăn xếp.
Lệnh LPS sao chép nội dung của bít đầu tiên và bít thứ hai trong ngăn xếp, nội dung
ngăn xếp sau đo bị đẩy xuống một bít. Lệnh LRD lấy giá trị của bít thứ hai ghi vào bít
32
đầu tiên của ngăn xếp, nội dung ngăn xếp đó được kéo lên một bít. Lệnh LPP kéo ngăn
xếp lên một bít.
ORW, ORD, ANDW, ANDD, XORW, XORD
Lệnh thực hiện các thuật toán logic And, Or và Exclusive Or của đại số Boolean
trên 2 bit hoặc 4 byte. S7-200 cung cấp thêm những lệnh logic có khả năng thực hiện
các thuật toán logic trên một mảng nhiều tiếp điểm (hay nhiều bít) như trên 2 byte
hoặc 4 byte. Luật tính toán của chúng như sau:
x y x And y x Or y x XOR y
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0
Cách biểu diễn các lệnh logic này trong LAD và STL được tóm tắt trong bảng sau.
Chúng sử dụng bít nhớ đặc biệt SM 1.0 để thông báo về trạng thái kết quả phép tính
được thực hiện (kết quả bằng 0).
Biểu diễn trong STL
STL Mô tả Toán hạng
ANDW IN1
IN2
Lệnh thực hiện phép logic
AND giữa các bít tương ứng của
hai từ IN1 và IN2. Kết quả được
ghi lại vào IN2
IN1: VW, T, C,
IW, QW.
(word) SMW,
AC, AIW, *VD
*AC, Hằng số.
IN2: VW, T, C,
IW, QW
(word) W, CA,
AIW, *VD, *AC
ORW IN1 IN2
Lệnh thực hiện phép logic OR
giữa các bít tương ứng của hai từ
IN1 và IN2. Kết quả được ghi lại
vào IN2
XORW IN1 IN2
Lệnh thực hiện phép logic
XOR giữa các bít tương ứng của
hai từ IN1 và IN2. Kết quả được
ghi lại vào IN2
33
STL Mô tả Toán hạng
ANDD IN1 IN2
Lệnh thực hiện phép logic
AND giữa các bít tương ứng của
hai từ kép IN1 và IN2. Kết quả
được ghi lại vào IN2
IN1: VD, ID,
QD, MD, SMQ.
(Dword) AC,
HC, *CD,*AC
Hằng số.
IN2: VD, ID,
QD, MD, SMD
(Dword)AC,
*VD, *AC
ORD IN1 IN2
Lệnh thực hiện phép logic OR
giữa các bít tương ứng của hai từ
kép IN1 và IN2. Kết quả được
ghi lại vào IN2
XORD IN1 IN2
Lệnh thực hiện phép logic
XOR giữa các bít tương ứng của
hai từ kép IN1 và IN2. Kết quả
được ghi lại vào IN2
Biểu diễn trong LAD với các kiểu dữ liệu
LAD Mô tả Toán hạng
Lệnh thực hiện phép
tính logic AND theo
từng bít của IN1 và IN2.
Kết quả được ghi vào
OUT.
IN1: VW, T, C,
IW, QW (word)
SMW, AC, AIW, VD
*AC, Hằng số.
IN2: VW, T, C,
IW, QW, (word)
SMW, AC, AIW,
*VD, *AC, Hằng số.
OUT: VW, T, C,
IW, QW, MW, (word)
SMW, AC, *VD,
*AC
Lệnh thực hiện phép
tính logic OR giữa các
bít tương ứng của hai từ
IN1 và IN2. Kết quả
được ghi vào từ OUT.
Lệnh thực hiện phép
tính logic XOR giữa các
bít của IN1 và IN2. Kết
quả được ghi vào OUT.
34
III.1.1.4 Các lệnh tiếp điểm đặc biệt
Có thể dùng các lệnh tiếp điểm đặc biệt để phát hiện sự chuyển tiếp trạng thái của
xung (sườn xung) và đảo lại trạng thái của dòng cung cấp (giá trị của đỉnh ngăn xếp).
LAD sử dụng các tiếp điểm đặc biệt để tác động vào dòng cung cấp. Các tiếp điểm đặc
biệt không có toán hạng riêng của chính chúng và vì thế phải đặt chúng vào vị trí phía
trước của cuộn dây hoặc hộp đầu ra. Tiếp điểm chuyển tiếp dương/âm (các lệnh sườn
trước và sườn sau) có nhu cầu về bộ nhớ, nên đối với CPU 214 là 256 lệnh.
Biểu diễn trong ngôn ngữ LAD
LAD Mô tả Toán hạng
Tiếp điểm đảo trạng thái của dòng cung cấp.
Nếu dòng cung cấp có tiếp điểm đảo thì nó bị
ngắt mạch, nếu không có tiếp điểm đảo thì nó
thông mạch.
Không có
Tiếp điểm chuyển đổi dương cho phép dòng
cung cấp thông mạch trong một vòng quét khi
sườn xung điều khiển chuyển từ 0 lên 1
Không có
Tiếp điểm chuyển đổi âm cho phép dòng cung
cấp thông mạch trong một vòng quét khi sườn
xung điều khiển chuyển từ 1 xuống 0.
Không có
Biểu diễn trong ngôn ngữ STL
STL Mô tả Toán hạng
NOT Lệnh đảo giá trị của bít đầu tiên trong ngăn
xếp.
Không có
EU Lệnh nhận biết sự chuyển tiếp trạng thái từ 0
lên 1 trong một vòng quét của đỉnh ngăn xếp.
Khi nhận được sự chuyển tiếp như vậy đỉnh
ngăn xếp sẽ có giá trị bằng 1 trong một vòng
quét.
Không có
ED Lệnh nhận biết sự chuyển tiếp trạng thái từ 1 Không có
35
STL Mô tả Toán hạng
xuống 0 trong một vòng quét của đỉnh ngăn
xếp. Khi nhận được sự chuyển tiếp như vậy
đỉnh ngăn xếp sẽ có giá trị bằng 1 trong một
vòng quét.
NOT (NOT)
EDGE UP (EU)
EDGE DOWN (ED)
Lệnh NOT, EU va ED thực hiện các thuật toán đặc biệt trên bít đầu tiên của ngăn
xếp. Lệnh NOT đảo giá trị của bít đầu tiên trong ngăn xếp. Lệnh EU khi phát hiện thấy
sườn lên từ 0 đến 1 trong bít đầu tiên của ngăn xêp thì đặt giá trị 1 vào bít đầu tiên của
ngăn xếp trong khoảng thời gian bằng một vòng quét.
Bảng 3.2 Ví dụ về các lệnh And, Not và Edge Down
III.1.1.5 Các lệnh so sánh
36
Khi lập trình, nếu có các quyết định về điều khiển được thực hiện dựa trên kết
quả của việc so sánh thì có thể sử dụng lệnh so sánh cho byte, từ hay từ kép cua S7-
200.
Khi so sánh giá trị của byte thì không cần phaii để y đến dấu cua toán hạng. Ngược
lại khi so sánh các từ hoặc từ kép với nhau thì phải để ý đến dấu của toán hạng, ngược
lại khi so sánh các từ hoặc từ kép với nhau thì phải để ý đến dấu của toán hạng là bít
cao nhất trong từ hoặc từ kép.
Biểu diễn các lệnh so sánh trong LAD (ví dụ với các kiểu dữ liệu khác nhau):
LAD Mô tả Toán hạng
Tiếp điểm đóng khi
n1 = n2
n1, n2: VB, IB,
QB, MB, SMB, AC,
Const, *VD*, AC
n1, n2 (từ): VW, T,
C, IW, QW, MW,
SMW,AC, AIW,
Hằng số, *VD, *AC
n1, n2(từ kép):VD,
ID, QD, MD, SMD,
AC, HC, Hằng số,
*VD, *AC
Tiếp điểm đóng khi
n1 > n2
Tiếp điểm đóng khi
n1 < n2
Trong STL, những lệnh so sánh thực hiện phép so sánh byte, từ và từ kép. Căn cứ
vào kiểu so sánh (<=, =, >=), kết quả của phép so sánh có giá trị bằng 0 (nếu đúng)
hoặc 1 (nếu sai) nên có thề sử dụng kết hợp cùng với các lệnh logic A, O, NOT để tạo
ra được các phép so sánh mà S7-200 không có lệnh so sánh tương ứng như: so sánh
không bằng nhau (< >), so sánh nhỏ hơn (>), có thể tạo ra được nhờ dùng kết hợp lệnh
NOT với các lệnh đã có (=, >=, <=). Ví dụ sau mô tả việc thực hiện pháp so sánh
không bằng nhau (< >) giữa nội dung của từ V>W100 và hằng số 50 bằng cách sử
dụng kết hợp phép so sánh bằng nhau LDW = và lệnh đảo NOT.
LDB =, LDW =
LDD =, LDR =
37
LDB < =, LDW < =
LDD < =, LDR < =
LDB > =, LDW > =
LDD > =, LDR > =
AB =, AW =
AD =, AR =
AB < =, AW < =
AD < =, AR < =
Biểu diển lệnh so sánh trong STL:
STL Mô tả Toán hạng
LDB = n1 n2
AB = n1 n2
OB = n1 n2
Lệnh thực hiện phép tính logic Load,
And hoặc Or giữa giá trị logic 1 với
nội dung đỉnh ngăn xếp khi nội dung
2 byte n1 và n2 thỏa mãn n1 = n2
n1, n2 (byte):VB,
IB, QB, MB,
SMB, AC, hằng
số, *VD, *ACLDB > = n1 n2
AB > = n1 n2
OB > = n1 n2
Lệnh thực hiện phép tính logic Load,
And hoặc Or giữa giá trị logic 1 với
nội dung đỉnh ngăn xếp khi nội dung
2 byte n1 và n2 thỏa mãn n1 > = n2
LDB < = n1 n2
AB < = n1 n2
OB < = n1 n2
Lệnh thực hiện phép tính logic Load,
And hoặc Or giữa giá trị logic 1 với
nội dung đỉnh ngăn xếp khi nội dung
2 byte n1 và n2 thỏa mãn n1 < = n2
LDW = n1 n2
AW = n1 n2
OW = n1 n2
Lệnh thực hiện phép tính logic
Load, And hoặc Or giữa giá trị logic
1 với nội dung đỉnh ngăn xếp khi nội
dung 2 từ n1 và n2 thỏa mãn n1 = n2
n1, n2
(từ):VW, T, C,
QW, MW,
SMW, AC,
AIW, hằng số,
*VD, *AC
LDW > = n1 n2
AW > = n1 n2
OW > = n1 n2
Lệnh thực hiện phép tính logic Load,
And hoặc Or giữa giá trị logic 1 với
nội dung đỉnh ngăn xếp khi nội dung
2 từ n1 và n2 thỏa mãn n1 > = n2
LDW < = n1 n2 Lệnh thực hiện phép tính logic Load,
38
STL Mô tả Toán hạng
AW < = n1 n2
OW < = n1 n2
And hoặc Or giữa giá trị logic 1 với
nội dung đỉnh ngăn xếp khi nội dung
2 từ n1 và n2 thỏa mãn n1 < = n2
LDD = n1 n2
AD = n1 n2
OD = n1 n2
Lệnh thực hiện phép tính logic Load,
And hoặc Or giữa giá trị logic 1 với
nội dung đỉnh ngăn xếp khi nội dung
2 từ kép n1 và n2 thỏa mãn n1 = n2
n1, n2 (từ kép)
:VD, ID, QD,
MD, SMD, AC,
HC, hằng số,
*VD, *AC
LDD > = n1 n2
AD > = n1 n2
OD > = n1 n2
Lệnh thực hiện phép tính logic Load,
And hoặc Or giữa giá trị logic 1 với
nội dung đỉnh ngăn xếp khi nội dung
2 từ kép n1 và n2 thỏa mãn n1 > = n2
LDD < = n1 n2
AD < = n1 n2
OD < = n1 n2
Lệnh thực hiện phép tính logic Load,
And hoặc Or giữa giá trị logic 1 với
nội dung đỉnh ngăn xếp khi nội dung
2 từ kép n1 và n2 thỏa mãn n1 < = n2
LDR = n1 n2
AR = n1 n2
OR = n1 n2
Lệnh thực hiện phép tính logic Load,
And, Or giữa giá trị logic 1 với nội
dung đỉnh ngăn xếp nếu hai số thực
n1 và n2 (4 byte) thỏa mãn n1 = n2
n1, n2 (từ
kép):VD, ID,
QD, MD, SMD,
AC, HC, hằng
số, *VD, *AC
LDR > = n1 n2
AR > = n1 n2
OR > = n1 n2
Lệnh thực hiện phép tính logic Load,
And, Or giữa giá trị logic 1 với nội
dung đỉnh ngăn xếp nếu hai số thực
n1 và n2 (4 byte ) thỏa mãn n1 > = n2
LDR < = n1 n2
AR < = n1 n2
OR < = n1 n2
Lệnh thực hiện phép tính logic Load,
And, Or giữa giá trị logic 1 với nội
dung đỉnh ngăn xếp nếu hai số thực
n1 và n2 (4 byte) thỏa mãn n1 < = n2
39
Hình 3.3 Ví dụ về sử dụng lệnh so sánh
III.1.2 Lệnh nhảy chương trình con và can thiệp vòng quét
III.1.2.1 Lệnh nhảy chương trình con
Các lệnh của chương trình, nếu không có những lệnh điều khiển riêng, sẽ được thực
hiện theo thứ tự từ trên xuống dưới trong một vòng quét. Lệnh điều khiển chương trình
cho phép thay đổi thứ tự thực hiện lệnh. Chúng cho phép chuyển thứ tự thực hiện,
đáng lẽ ra là lệnh tiếp theo, tới một lệnh bất cứ nào khác của chương trình, trong đó
nơi điều khiển chuyển đến phải được đánh dấu trước bằng một nhãn, chỉ, đích. Thuộc
nhóm lệnh điều khiển chương trình gồm: lệnh nhảy, lệnh gọi chương trình con, nhãn
chỉ đích, hay gọi đơn giản là nhãn, phải được đánh dấu trước khi thực hiện lệnh nhảy
hay lệnh gọi chương trình con.
Việc đặt nhãn cho lệnh nhảy phải nằm trong chương trình. Nhãn của chương trình
con, hoặc của chương trình xử lý ngắt được khai báo ở đầu chương trình. Không thể
dùng lệnh nhảy JMP để chuyển điều khiển từ chương trình chính vào một nhãn bất kỳ
trong chương trình con hoặc trong chương trình xử lý ngắt. Tương tự như vậy cũng
không thể từ một chương trình con hay chương trình xử lý ngắt nhảy vào bất cứ một
nhãn nào nằm ngoài các chương trình đó.
Lệnh gọi chương trình con là lệnh chuyển điều khiển đến chương trình con. Khi
chương trình con thực hiện xong các phép tính của mình thì việc điều khiển lại được
chuyển trở về lệnh tiếp theo trong chương trình chính nằm ngay sau lệnh gọi chương
trình con. Từ một chương trình con có thể gọi được một chương trình con khác trong
40
nó, có thể gọi như vậy nhiều nhất là 8 lần trong S7-200. Nói chung (trong một chương
trình con có lệnh gọi đến chính nó) về nguyên tắc không bị cấm song phải để ý đến
giới hạn trên.
Nếu lệnh nhảy hay lệnh gọi chương trình con được thực hiện thì đỉnh ngăn xếp luôn
có giá trị logic 1. Bởi vậy trong chương trình con các lệnh có điều kiện được thực hiện
như các lệnh không điều kiện. Sau các lệnh LBL (đặt nhãn) và SBR, lệnh LD trong
STL sẽ bị vô hiệu hóa.
Khi một chương trình con được gọi, toàn bộ nội dung của ngăn xếp sẽ được cất đi,
đỉnh của ngăn xếp nhận giá trị logic mới là 1, các bít khác của ngăn xếp nhận giá trị
logic 0 và điều khiển được chuyển đến chương trình con đã được gọi. Khi thực hiện
xong chương trình con và trước khi điều khiển được chuyển trở lại chương trình ðã gọi
nó, nội dung ngăn xếp đã được cất giữ trước đó sẽ được chuyển trở lại ngăn xếp.
Nội dung của thanh ghi AC không được cất giữ khi gọi chương trình con, nhưng khi
một chương trình xử lý ngắt được gọi, nội dung của thanh ghi AC sẽ được cất giữ
trước khi thực hiện chương trình xử lý ngắt và nạp lại khi chương trình xử lý ngắt đã
được thực hiện xong. Bởi vậy chương trình xử lý ngắt có thể tự do sử dụng bốn thanh
ghi AC của S7-200.
JMP, LBL, SBR, RET
Lệnh nhảy JMP và lệnh gọi chương trình con SBR cho phép chuyển điều khiển từ
vị trí này đến vị trí khác trong chương trình. Cú pháp của lệnh nhảy và lệnh gọi
chương trình con trong LAD và STL đều có toán hạng là nhãn chỉ đích (nơi nhảy đến,
nơi chứa chương trình con).
Lệnh nhảy, lệnh gọi chương trình con, lệnh khai báo nhãn và lệnh thoát khỏi
chương trình con được biểu diễn trong LAD và trong STL như sau:
LAD STL Mô tả Toán hạng
JMP n
Lệnh nhảy thực hiện
việc chuyển điều khiển
đến nhãn n trong một
chương trình.
n: 0 255
LBL n Lệnh khai báo nhãn n
trong một chương trình.
41
LAD STL Mô tả Toán hạng
SBR n Lệnh gán nhãn n cho
một chương trình con.
RET Lệnh trở về chương trình
đã gọi chương trình con
không điều kiện.
Không có
III.1.2.2 Các lệnh can thiệp vào thời gian vòng quét
Các lệnh này được dùng để kết thúc chương trình đang thực hiện, và kéo dài trong
khoảng thời của một vòng quét.
Trong LAD và STL chương trình chính phải được kết bằng lệnh kết thúc không
điều kiện MEND. Có thể sử dụng lệnh kết thúc có điều kiện END trước lệnh kết thúc
không điều kiện.
Lệnh STOP kết thúc chương trình, nó chuyển điều khiển chương trình đến chế độ
STOP. Nếu gặp lệnh STOP trong chương trình chính hoặc trong chương trình con thì
chương trình đang thực hiện sẽ được kết thúc ngay lập tức.
Lệnh WDR sẽ khởi động lại đồng hồ quan sát (watchdog Timer) và chương trình
tiếp tục được thực hiện trong vòng quét ở chế độ quan sát.
Sử dụng lệnh END, STOP và WDR trong LAD và STL như sau:
LAD STL Mô tả
END Lệnh kết thúc chương trình chính hiện hành có điều
kiện.
STOP Lệnh STOP kết thúc chương trình hiện hành và
chuyển sang chế độ STOP.
WDR Lệnh WDR khởi tạo lại đồng hồ quan sát.
42
III.2 Các lệnh điều khiển Timer
III.2.1 Định nghĩa
Timer là bộ tạo thời gian trễ giữa tín hiệu vào và tín hiệu ra nên trong điều khiển
vẫn thường gọi là khâu trễ. Nếu ký hiệu tín hiệu vào là x(t) và thời gian trễ được tạo ra
bằng Timer là r thì tín hiệu đầu ra của Timer đó sẽ là x (t-r).
S7-200 tùy thuộc vào từng loại CPU mà có số lượng Timer khác nhau. Thông
thường, có 3 loại Timer:
* Timer tạo thời gian trễ không có nhớ theo sườn, ký hiệu là TON.
* Timer tạo thời gian trễ theo sườn xuống, ký hiệu là TOF.
* Timer tạo thời gian trễ có nhớ, ký hiệu là TONR.
Ba kiểu Timer của S7-200 (TON, TOF và TONR) phân biệt với nhau ở phản ứng
của nó đối với trạng thái tín hiệu đầu vào, tức là khi tín hiệu đầu vào chuyển trạng thái
logic từ 0 lên 1, được gọi là thời điểm Timer được kích, và không tính khoảng thời
gian khi đầu vào có giá trị logic 0 vào thời gian trễ tín hiệu được đặt trước.
Timer TON, TOF và TONR bao gồm 3 loại với 3 độ phân giải khác nhau, độ phân
giải 1ms, 10 ms, 100 ms. Thời gian trễ r được tạo ra chính là tích của độ phân giải của
bộ Timer được chọn và giá trị đặt trước cho Timer.
Thời gian trễ = PT x độ phân giải
VD: Cần thời gian trễ là 10s
Dùng T37 – độ phân giải 100ms
10s/100ms=100 -> PT
Dùng T33 – độ phân giải 10ms -> PT=1000
Timer của S7-200 có những tính chất cơ bản sau:
Các bộ Timer được điều khiển bởi một cổng vào và giá trị đếm tức thời. Giá trị đếm
tức thời của Timer được nhớ trong thanh ghi 2 byte (gọi là T-word) của Timer, xác
định khoảng thời gian trễ kể từ khi Timer được kích. Giá trị đặt trước của các bộ Timer
được ký hiệu trong LAD và STL là PT. Giá trị đếm tức thời của thanh ghi T-word
thường xuyên được so sánh với giá trị đặt trước của Timer.
43
Mỗi bộ Timer, ngoài thanh ghi 02 byte T-word lưu giá trị đếm tức thời, còn có 1 bít,
ký hiệu bằng T-bít, chỉ trạnh thái logic đầu ra. Giá trị logic của bít này phụ thuộc vào
kết quả so sánh giữa giá trị đếm tức thời với giá trị đặt trước.
Đối với Timer kiểu TON và TONR, trong khoảng thời gian tín hiệu x (t) có giá trị
logic 1, giá trị đếm tức thời trong T-word luôn được cập nhật và thay đổi tăng dần cho
đến khi nó đạt giá trị cực đại. Khi giá trị đếm tức thời lớn hơn hoặc bằng giá trị đặt
trước, T-bít có giá trị logic 1.
Đối với Timer kiểu TOF, khi đầu vào chuyển mức logic lên 1, giá trị đặt sẽ được đặt
về 0, khi đầu vào chuyển mức logic 0, giá trị của T-word sẽ đếm đến PT. Khi đầu vào
chuyển tử mức logic 0 lên mức logic 1 thì T-bit sẽ được set lên 1, khi đầu vào chuyển
từ 1 xuống 0, giá trị T-bit =1 và nó sẽ trở về 0 khi giá trị T-word=PT. Lưu ý, không
được sử dụng cùng một lúc hai loại Timer kiểu TON và TOF cho một địa chỉ.
Các loại Timer của S7-200 (ví dụ đối với CPU 214) chia theo TON, TOF, TONR và
độ phân giải bao gồm:
Lệnh Độ phân giải Giá trị cực đại CPU 214
TON
TOF
1 ms 32,767s T32T96
10 ms 327,67s T33T36; T97 T100
100 ms 3276,7s T37T63; T101
T127
TON
R
1 ms 32,767s T0 T64
10 ms 327,67s T1T4; T65T68
100 ms 3276,7s T5T31; T69T95
III.2.2 Khai báo và sử dụng
Cú pháp khai báo sử dụng Timer trong LAD như sau:
LAD Mô tả Toán hạng
Khai báo Timer số hiệu xx
kiểu TON để tạo thời gian trễ
tính từ khi đầu vào IN được kích.
Nếu T-word lớn hơn hoặc bằng
PT thì T-bít có giá trị logic bằng
PT: VW, T, C, IW,
QW, AIW, SMW,
AC, AIW, VD
44
1. Có thể reset Timer kiểu TON
bằng lệnh R hoặc bằng giá trị
logic 0 tại đầu vào IN
*AC, Hằng số.
Khai báo Timer số hiệu zz
kiểu TONR để tạo thời gian trễ
tính từ khi đầu vào IN được kích.
Nếu T-word lớn hơn hoặc bằng
PT thì T-bít có giá trị logic bằng
1. Chỉ có thể reset kiểu TONR
bằng lệnh R cho T-bít
Khai báo Timer số hiệu yy
kiểu TOF để tạo trễ tính từ khi
đầu vào IN chuyển từ 1 xuống 0.
Reset kiểu TOF bằng lệnh R.
Cú pháp khai báo sử dụng Timer trong STL như sau:
TON, TONR khai báo sử dụng Timer của S7-200, lệnh khai báo sử dụng Timer là
lệnh có điều kiện. Tại thời điểm khai báo tín hiệu đầu vào có giá trị logic bằng giá trị
logic của bít đầu tiên trong ngăn xếp.
STL Mô tả Toán hạng
TON Txx n
Khai báo Timer số hiệu xx kiểu
TON để tạo thời gian trễ tính từ khi
bít đầu tiên trong ngăn xếp có giá trị
logic 1. Nếu như giá trị đếm tức thời
lớn hơn hoặc bằng giá trị đặt trước n
thì T-bít có giá trị logic bằng 1. Có
thể reset Timer kiểu TON bằng lệnh
R hoặc bằng giá trị logic 0 tại đầu
vào.
n (word) :VW, T,
C, IW,QW, AIW,
SMW,
AC, AIW, VD
*AC, Hằng số
TONR Tzz
n
Khai báo Timer số hiệu zz kiểu
TONR để tạo thời gian trễ tính từ
khi bít đầu tiên trong ngăn xếp có
45
giá trị logic 1. Nếu như giá trị đếm
tức thời lớn hơn hoặc bằng giá trị
đặt trước n thì T-bít có giá trị logic
bằng 1. Chỉ có thể reset Timer kiểu
TONR bằng lệnh R cho T-bít
TOF Tyy n Khai báo Timer số hiệu yy kiểu
TOF để tạo thời gian trễ tính từ khi
bít đầu tiên trong ngăn xếp có giá trị
logic từ 1 xuống 0
Chú ý: Khi sử dụng Timer kiểu TONR, giá trị đếm tức thời được lưu lại và không bị
thay đổi trong khoảng thời gian khi tín hiệu đầu vào có logic 0. Giá trị của T-bít không
được nhớ mà hoàn toàn phụ thuộc vào kết quả so sánh giữa giá trị đếm tức thời và giá
trị đặt trước.
Các Timer được đánh số từ 0 đến 127 (đối với CPU 21x) hoặc 255 (CPU 22x). Một
Timer được đặt tên là Txx, trong đó xx là số hiệu của Timer. Txx đồng thời cũng là địa
chỉ hình thức của T-word và T-bít vẫn được phân biệt với nhau nhờ kiểu lệnh sử dụng
với Txx. Khi dùng lệnh làm việc với từ, Txx được hiểu là địa chỉ của T-word, ngược
lại khi sử dụng lệnh làm việc với tiếp điểm, Txx được hiểu là địa chỉ của T-bít.
Một Timer đang làm việc có thể được đưa lại về trạng thái khởi động ban đầu. Công
việc đưa một Timer về trạng thái ban đầu được gọi là reset Timer đó.
Khi reset một bộ Timer, T-word và T-bít của nó đồng thời được xóa và có giá trị
bằng 0, như vậy giá trị đếm tức thời được đặt về 0 và tín hiệu đầu ra cũng có trạng thái
logic bằng 0. Có thể reset bất cứ bộ Timer của S7-200 bằng lệnh R (reset). Điều đó nói
rằng khi dùng lệnh R cho T-bít của một Timer, Timer đó sẽ được đưa về trạng thái ban
đầu và lệnh R cho một Txx vừa xóa T-word vừa xóa T-bít của Timer đó.
Lưu ý về cách sử dụng các độ phân giải của Timer (xét chương trình sau):
. Đầu tiên bộ định thời với độ phân giải 1 ms được sử dụng (T32, giá trị đặt trước
300). Q0.0 sẽ có giá trị bằng 1 (ON) trong thời gian một vòng quét khi và chỉ khi nào
thời điểm cập nhật của bộ định thời mà giá trị đếm vượt qua giá trị đặt trước rơi vào
46
đúng giữa lúc thực hiện hai lệnh này. Nghĩa là sau khi lệnh trước được thực hiện
nhưng phải trước khi thực hiện lệnh sau
. Nếu sử dụng bộ định thời với độ phân giải 10 ms (T33, giá trị đặt trước 30), Q0.0
không bao giờ có giá trị 1 (luôn luôn OFF)
. Trường hợp cuối cùng sử dụng bộ định thời với độ phân giải 100 ms (T37, giá trị
đặt trước bằng 3). Q0.0 luôn luôn có giá trị bằng 1 (ON) trong đúng thời gian một
vòng quét
Để đảm bảo chắc chắn Q0.0 sẽ có giá trị 1 (ON) trong thời gian một vòng quét, ta
phải dùng công tắc thường đóng Q0.0 để kích hoạt các bộ định thời thay vì dùng công
tắc thường đóng với bit trạng thái của nó.
Hình 3.4 Ví dụ về sử dụng độ phân giải của Timer
47
Ví dụ về sử dụng Timer
TON:
Hình 3.5 Ví dụ về sử dụng Timer kiểu TON
Khi ngõ vào I0.0 =1 Timer T37 được kích , Nếu sau 10x100ms =1s I0.0 vẫn giữ
trạng thái thì Bit T37 sẽ lên 1 ( Khi đó Q0.0 lên 1). Nếu I0.0 =1 không đủ thời gian 1S
thì bit T37 sẽ không lên 1
TOF:
Hình 3.6 Ví dụ về sử dụng Timer kiểu TOF
Khi Ngõ vào I0.0 = 1 thì bit T33 lên 1 (Ngõ ra Q0.0 lên 1). Khi I0.0 xuống 0,thời
gian Timer bắt đầu tính ,đủ thời gian 1s = 100x10ms thì bit T33 sẽ tắt (Q0.0 tắt). Nếu
I0.0 xuống 0 trong khoảng thời gian chưa đủ 1s đã lên 1 lại thì bit T33 vẫn giữ nguyên
trạng thái
48
TONR:
Ngõ vào I0.0 có tác dụng kích thời gian cho Timer, khi ngõ I0.0 =1 thời gian Timer
được tính,khi I0.0=0 thời gian không bị Reset về 0.Khi đủ thời gian thì Bit T1 sẽ lên 1.
Thời gian Timer chỉ bị Reset khi có tín hiệu Reset Timer ( tín hiệu từ ngõ I0.1)
Hình 3.7 Ví dụ về sử dụng Timer kiểu TONR
49
III.3 Các lệnh điều khiển Counter
III.3.1 Định nghĩa
Counter là bộ đếm hiện chức năng đếm sườn xung lên trong S7-200. Các bộ đếm
của S7-200 được chia ra làm 3 loại: bộ đếm tiến (CTU), đếm lùi (CTD) và bộ đếm
tiến/lùi (CTUD).
- Bộ đếm tiến CTU đếm số sườn lên của tín hiệu logic đầu vào, tức là đếm số lần
thay đổi trạng thái logic từ 0 lên 1 của tín hiệu. Số sườn xung đếm được, được
ghi vào thanh ghi 2 byte của bộ đếm, gọi là thanh ghi C-word. Nội dung của C-
word, gọi là giá trị đếm tức thời của bộ đếm, luôn được so sánh với giá trị đặt
trước của bộ đếm được ký hiệu là PV. Khi giá trị đếm tức thời bằng hoặc lớn
hơn giá trị đặt trước này thì bộ đếm báo ra ngoài bằng cách đặt giá trị logic 1
vào một bít đặc biệt của nó, được gọi là C-bít. Trường hợp giá trị đếm tức thời
nhỏ hơn giá trị đặt trước thì C-bít có giá trị logic là 0. Khác với các bộ Counter,
các bộ đếm CTU đều có chân nối với tín hiệu điều khiển xóa để thực hiện việc
đặt lại chế độ khởi phát ban đầu (reset) cho bộ đếm, được ký hiệu bằng chữ cái
R trong LAD hay được qui định là trạng thái logic của bít đầu tiên của ngăn xếp
trong STL. Bộ đếm được reset khi tín hiệu xóa này có mức logic là 1 hoặc khi
lệnh R (reset) được thực hiện với C-bít. Khi bộ đếm được reset, cả C-word và
C-bít đều nhận giá trị 0.
- Bộ đếm lùi CTD đếm số sườn lên của tín hiệu logic đầu vào, tuy nhiên khác với
đếm lùi, để bộ đếm có thể thực hiện được thì phải có tín hiệu đầu vào gọi là tín
hiệu kích hoạt (LD). Khi chưa có tín hiệu kích, nếu có sườn lên logic đầu vào,
tại thời điểm đó C-word = 0 thì bộ đếm sẽ không hoạt động. Nếu tín hiệu kích
hoạt = 1 thì C-word sẽ được nạp bởi giá trị đặt, và ứng với mỗi sườn lên đầu
vào, giá trị C-word sẽ bị giảm đi một đơn vị, khi đếm tới 0, nó sẽ dừng đếm.
Trong quá trình C-word >0, C-bit = 1. Bộ đếm lùi không có chân Reset.
- Bộ đếm tiến/ lùi CTUD đếm tiến khi gặp sườn lên của xung vào cổng đếm, ký
hiệu là CU trong LAD hoặc bít thứ 3 của ngăn xếp trong STL, và đếm lùi khi
gặp sườn của xung vào cổng đếm lùi, được ký hiệu là CD trong LAD hoặc bít
thứ 2 của ngăn xếp trong STL. Giống như bộ đếm CTU, bộ đếm CTUD cũng
50
được đưa về trạng thái khởi phát ban đầu bằng 2 cách. Khi đầu vào logic của
chân xóa, ký hiệu bằng R trong LAD hoặc bít thứ nhất của ngăn xếp trong STL,
có giá trị logic là 1 hoặc bằng lệnh R (reset) với C-bít của bộ đếm. CTUD có
giá trị đếm tức thời đúng bằng giá trị đang đếm và được lưu trong thanh ghi 2
byte C-word của bộ đếm. Giá trị đếm tức thời luôn được so sánh với giá trị đặt
trước PV của bộ đếm. Nếu giá trị đếm tức thời lớn hơn bằng bằng giá trị đặt
trước thì C-bít có giá trị logic bằng 1. Còn các trường hợp khác C-bít có giá trị
logic bằng 0.
III.3.2 Khai báo và sử dụng
Các bộ đếm được đánh số từ 0 đến 127/(256) CPU 214/(224) và ký hiệu bằng Cxx,
trong đó xx là số thứ tự của bộ đếm. Ký hiệu Cxx đồng thời cũng là địa chỉ hình thức
của C-word và của C-bít. Mặc dù dùng địa chỉ hình thức, song C-word và C-bít vẫn
được phân biệt với nhau nhờ kiểu lệnh sử dụng làm việc với từ hay với tiếp điểm (bít).
Lệnh khai báo sử dụng bộ đếm trong LAD như sau:
LAD Mô tả Toán hạng
Khai báo bộ đếm tiến theo sườn
lên của CU. Khi giá trị đếm tức
thời C-word>= PV, C-bit có giá
trị 1. Bộ đếm được reset khi đầu
vào R có giá trị logic bằng 1. Bộ
đếm ngừng đếm khi C-word đạt
giá trị cực đại 32.767.
PV (word) :
VW, T, C, IW,
QW, MW, SMW,
AC,
AIW, Hằng số,
*VD, *AC
Khai báo bộ đếm theo sườn lên
của CD. Khi đầu vào CD chuyển
mức logic từ 0 lên 1, giá trị C-
word sẽ giảm đi 1 đơn vị (với
điều kiện C-word >0). Nếu đầu
vào LD chuyển từ 0 lên 1, giá trị
PV sẽ nạp vào C-word. Đếm tới
0 sẽ dừng, trong khoảng C-
word>0, C-bit =1
51
Khi báo bộ đếm tiến/lùi, đếm
tiến theo sườn lên của CU và
đếm lùi theo sườn lên của CD.
Khi giá trị đếm tức thời C-word
Cxx >= PV, C-bít (cxx) có giá trị
logic bằng 1. Bộ đếm ngừng
đếm tiến khi C-word đạt giá trị
cực đại 32.767, ngừng đếm lùi
khi C-word đạt cực tiểu -32.767
CTUD reset khi đầu vào R có
giá trị logic bằng 1.
PV
(word):VW,T, C,
IW, QW, MW,
SMW, AC,A IW,
Hằng số, *VD,
*AC
Lệnh khai báo sử dụng bộ đếm trong STL như sau:
STL Mô tả Toán hạng
CTU Cxx n
Khai báo bộ đếm tiến theo sườn lên
cùa CU. Khi giá trị đếm tức thời C-
word lớn hơn hoặc bằng giá trị đặt
trước n, C-bít có giá trị logic bằng 1.
Bộ đếm được reset khi đầu ngăn xếp
có giá trị logic bằng 1. Bộ đếm ngừng
đếm khi C-word đạt giá trị cực đại
32.767.
n (word):VW,
T, C, IW, QW,
MW, SMW, AC,
AIW, Hằng số.
*VD, *AC
CTD Cxx n Khai báo bộ đếm lùi theo sườn xuống
CTUD Cxx
n
Khai báo bộ đếm tiến/lùi, đếm tiến
theo sườn lên của CU và đếm lùi theo
sườn lên của CD. Khi giá trị đếm tức
thời C-word, Cxx lớn hơn hoặc bằng
giá trị đặt trước n, C-bít có giá trị
logic bằng 1, bộ đếm ngừng đếm tiến
khi C-word đạt giá trị cực đại 32.767
và ngừng đếm lùi khi C-word đạt
được giá trị cực tiểu 32.767 CTUD
Cxx: C48
C79
n (word) : VW,
T, C, IW, QW,
MW, SMW, AC,
AIW, Hằng số,
*VD, *AC
52
reset khi bít đầu của ngăn xếp có giá
trị logic bằng 1.
Ví dụ về sử dụng các bộ đếm lùi, đếm tiến lùi:
Đếm tiến CTU:
Hình 3.8 Ví dụ về sử dụng bộ đếm tiến
Mô tả: Mỗi lần có một sườn cạnh lên ở chân CU, giá trị bộ đếm (1 Word) được tăng
lên 1.Khi giá trị hiện tại lớn hơn hoặc bằng giá trị đặt PV(Preset value), ngõ ra sẽ được
bật lên ON. Khi chân Reset được kích (sườn lên) giá trị hiện tại bộ đếm và ngõ ra được
trả về 0. Bộ đếm ngưng đếm khi giá trị bộ đếm đạt giá trị tối đa là 32767
Đếm lùi CTD:
Hình 3.9 Ví dụ về sử dụng bộ đếm lùi
53
Mô tả: Khi chân LD được kích (sườn lên) giá trị PV được nạp cho bộ đếm. Mỗi lần có
một sườn cạnh lên ở chân CD, giá trị bộ đếm (1 Word) được giảm xuống 1.Khi giá trị
hiện tại của bộ đếm bằng 0, ngõ ra sẽ được bật lên ON và bộ đếm sẽ ngưng đếm.
Đếm tiến lùi CTUD:
Hình 3.10 Ví dụ về sử dụng bộ đếm tiến lùi
Mô tả: Mỗi lần có một sườn cạnh lên ở chân CU, giá trị bộ đếm (1 Word) được tăng
lên 1. Mỗi lần có một sườn cạnh lên ở chân CD, giá trị bộ đếm được giảm xuống 1.Khi
giá trị hiện tại lớn hơn hoặc bằng giá trị đặt PV(Preset value), ngõ ra sẽ được bật lên
ON. Khi chân R được kích (sườn lên) giá trị bộ đếm và ngõ Out được trả về 0. Giá trị
cao nhất của bộ đếm là 32767 và thấp nhất là –32768. Khi giá trị bộ đếm đạt ngưỡng.
54
III.4 Các lệnh dữ liệu
III.4.1 Các lệnh số học
a. Lệnh cộng (ADD)
Lệnh ADD_I
Là lệnh thực hiện phép cộng các số nguyên 16-bít IN1 và IN2.
Trong LAD kết quả là một số nguyên 16-bít được ghi vào OUT, tức là:
IN1 + IN2 = OUT.
Còn trong STL, kết quả cũng là một giá trị 16-bít nhưng được ghi vào IN2, tức là
IN1 + IN2 = IN2.
Lệnh ADD_DI:
Là lệnh thực hiện phép cộng các số nguyên 32-bít IN1 và IN2
Trong LAD, kết quả là một số nguyên 32-bít được ghi vào OUT, tức là:
IN1 + IN2 = OUT.
Còn trong STL, kết quả cũng là một giá trị 32-bít nhưng được ghi vào IN2, tức là
IN1 + IN2 = IN2.
Lệnh ADD_R:
Là lệnh thực hiện phép cộng các số thực 32-bít IN1 và IN2.
Trong LAD, kết quả là một số thực 32-bít được ghi vào OUT, tức là:
IN1 + IN2 = OUT.
Còn trong STL, kết quả cũng là một giá trị thực 32-bít nhưng được ghi vào IN2, tức
là IN1 + IN2 = IN2.
b. Lệnh trừ (SUB)
Lệnh SUB_I:
Là lệnh thực hiện phép trừ các số nguyên 16-bít IN1 và IN2
Trong LAD kết quả là một số nguyên 16-bít và được ghi vào OUT, tức là:
IN1 - IN2 = OUT.
Còn trong STL, kết quả là một giá trị 16-bít nhưng được ghi lại vào IN2, tức là IN1-
IN2 = IN2.
Lệnh SUB-DI:
Là lệnh thực hiện phép trừ các số nguyên 32-bít IN1 và IN2
55
Trong LAD kết quả là một số nguyên 32-bít được ghi vào IN2, tức là:
IN1 - IN2 = IN2.
Còn trong STL, kết quả là một giá trị 32-bít nhưng được ghi lại vào IN2, tức là IN1-
IN2 = IN2.
Lệnh SUB_R:
Là lệnh thực hiện phép trừ các số thực 32-bít IN1 và IN2
Trong LAD kết quả là một số thực 32-bít được ghi vào OUT, tức là:
IN1 - IN2 = OUT.
Trong STL, kết quả là một giá trị 32-bít nhưng được ghi lại vào IN2, tức là IN1-
IN2 = IN2.
Cú pháp dùng lệnh cộng và trừ trong LAD và STL như sau:
LAD STL
+ I IN1 IN2
- I IN1 IN2
Đối với các dạng dữ liệu khác, chỉ thay thế kiểu dữ liệu sử dụng. Ví dụ: dùng phép
cộng trừ kiểu W, thay kiểu dữ liệu I bằng kiểu dữ liệu W.
c. Lệnh nhân (MUL)
Lệnh MUL:
Trong LAD: Lệnh thực hiện phép nhân 2 số nguyên 16-bít IN1 và IN2 và cho ra kết
quả 32-bít chứa trong từ kép OUT (4 byte).
Trong STL: Lệnh thực hiện phép nhân giữa 2 số nguyên 16-bít n1 và số nguyên
chứa trong từ thấp (từ 0 đến bít 15) của toán hạng 32-bít n2 (4 byte). Kết quả 32-bít
được ghi vào n2.
Lệnh MUL_R:
Trong LAD: lệnh thực hiện phép nhân hai số thực 32-bít IN1 và IN2 và cho ra kết
quả 32-bít chứa trong từ kép OUT (4 byte).
56
Trong STL: Lệnh thực hiện phép nhân giữa số thực 32-bít được ghi vào IN2.
d. Lệnh chia (DIV)
Trong LAD: Lệnh thực hiện phép chia số nguyên 16-bít IN1 cho số nguyên 16-bít
IN2. Kết quả 32-bít chứa trong từ kép OUT gồm thương số ghi trong mảng 16-bít từ
bít 0 đến bít15 (từ thấp) và phần dư cũng 16-bít ghi trong mảng từ bít-16 đến bít-31 (từ
cao).
Trong STL: Lệnh thực hiện phép chia số nguyên 16-bít n1 cho số nguyên, số
nguyên 16-bít nằm trong từ thấp từ bít 0 đến bít 15 của toán hạng 32-bít n2. Kết quả
32-bít được ghi lại vào n2 bao gồm thương số ghi trong mảng 16-bít từ bít 0 đến bít 15
(từ thấp) và phần dư ghi trong mảng 16-bít từ bít-16 đến bít-31 (từ cao).
Lệnh DIV_R:
Trong LAD: lệnh thực hiện phép chia số thực 32-bít IN1 cho số thực 32-bít IN2 và
cho ra kết quả 32-bít chứa trong từ kép OUT.
Trong STL, lệnh thực hiện phép chia số thực 32-bít IN1 cho số thực 32-bít IN2, kết
quả 32-bít được ghi lại vào IN2.
e. Lệnh lấy căn bậc 2 (SQRT)
Là lệnh thực hiện lấy căn bậc hai của số thực 32-bít IN. Kết quả là một số 32-bít
được ghi vào từ kép OUT.
III.4.2 Các lệnh dịch chuyển nội dung ô nhớ
Các lệnh dịch chuyển nội dung ô nhớ thực hiện việc di chuyển hoặc sao chép số liệu
từ vùng này sang vùng khác trong bộ nhớ.
Trong LAD hay trong STL lệnh dịch chuyển thực hiện việc di chuyển hay sao chép
nội dung của một byte, một từ đơn, một từ kép hoặc một giá trị thực từ vùng này sang
vùng khác trong bộ nhớ.
Lệnh MOV_B, MOV_R, MOV_W, MOV_DW
Là lệnh sao chép nội dung của byte IN sang byte OUT.
Cú pháp dùng lệnh MOV_B trong LAD hay MOVB trong STL như sau:
LAD STL
57
MOVB IN OUT
Tương tự như vậy đối với các kiểu dữ liệu khác.
Các lệnh dịch chuyển thanh ghi
Các lệnh dịch chuyển thanh ghi được chia làm hai nhóm:
Nhóm các lệnh làm việc với thanh ghi có độ dài bằng một từ đơn (16-bít) hay
một từ kép (32-bít).
Nhóm các lệnh làm việc với thanh ghi có độ dài tùy ý mà được định nghĩa trong
lệnh.
Nhóm lệnh với thanh ghi có độ dài 16 hoặc 32 bít.
Lệnh dịch chuyển thuộc nhóm này cho phép dịch chuyển và quay các bít trong các
từ đơn và trong các từ kép.
Số lần dịch chuyển các bít của từ đơn hay từ kép được chỉ thị bằng một toán hạng
trong được gọi là số lần đếm đẩy.
Số lần quay các bít của từ đơn hay từ kép cũng được chỉ thị bằng một toán hạng
trong lệnh, được gọi là số lần đếm quay.
Khi sử dụng các lệnh dịch chuyển các bít của từ đơn hay từ kép cần chú ý:
Sẽ không thực hiện việc dịch chuyển nếu như số đếm lần đẩy bằng 0.
Nếu số lần đẩy có giá trị lớn hơn 0, bít nhớ tràn SM1.1 có giá trị logic của bít cuối
cùng được đẩy ra.
Nếu số đếm lần đẩy lớn hơn hoặc bằng 16 (từ đơn), lớn hơn hoặc bằng 32 (từ kép)
khi dịch chuyển thì lệnh sẽ chỉ thực hiện với số đếm lần đẩy lớn nhất là 16 hoặc 32.
Lệnh SRW (đẩy các bít từ đơn sang phải) và SDR (đẩy các bít từ kép sang phải) sẽ
chuyển giá trị 0 vào bít cao nhất của từ hoặc từ kép tại mỗi lần đẩy. Sau khi thực hiện
lệnh, bít SM1.1 sẽ có giá trị của bít thứ N-1 của từ đơn hoặc từ kép với N là số lần đẩy.
Lệnh SLW (đẩy các bít từ đơn sang trái) và SRD (đẩy các bít từ kép sang trái) sẽ
chuyển giá trị logic 0 vào bít thấp nhất của từ hoặc từ kép tại mỗi lần đẩy. Sau khi thực
hiện lệnh, bít SM1.1 sẽ có giá trị của bít thứ 16-N đối với từ đơn hoặc 32-N đối với từ
kép, trong đó N là số lần đẩy.
58
Bít báo kết quả 0 (bít SM1.0) sẽ có giá trị logic bằng 1 nếu như sau khi thực hiện
lệnh đẩy nội dung của từ đơn hay từ kép bằng 0.
Khi sử dụng lệnh quay các bít của từ đơn hay từ kép cần chú ý:
Lệnh quay thực hiện phép đẩy vòng tròn sang trái hay phải các bít của một từ đơn
hoặc của một từ kép. Tại mỗi lần quay, giá trị logic của bít bị đẩy ra khỏi đầu này cũng
là giá trị logic được đưa vào đầu kia của từ hay của từ kép.
Lệnh quay sẽ không thực hiện nếu như số đếm lần quay có giá trị là 0 hay bằng bội
số của 16 (với từ đơn) hoặc 32 (với từ kép).
Đối với các giá trị khác của số đếm lần quay lớn hơn 16 (đối với từ đơn) hoặc 32
(đối với từ kép), lệnh sẽ thực hiện với số đếm lần quay mới bằng phần dư của số đếm
lần quay cũ chia cho 16 hoặc chia cho 32.
Khi thực hiện lệnh quay sang phải RRW (với từ đơn) hay RRD (với từ kép), tại mỗi
lần quay giá trị thấp nhất trong từ hoặc từ kép được ghi vào bít báo tràn SM1.1. Sau
khi lệnh được thực hiện xong bít SM1.1 sẽ có giá trị logic bít 16-N của từ đơn hoặc
32-N của từ kép, trong đó N là số đếm lần quay.
Khi thực hiện lệnh quay sang trái RLW (với từ đơn) hay RLD (với từ kép) tại mỗi
lần quay, giá trị logic của bít cao nhất trong từ hoặc từ kép được ghi vào bít báo tràn
SM1.1. Sau khi lệnh được thực hiện xon bít SM1.1 sẽ có giá trị logic bít thứ N-1 trong
từ đơn hoặc từ kép, trong đó N là số đếm lần quay (mới).
Bít báo kết quả 0 (bít SM1.0) sẽ có giá trị logic 1 nếu từ hay từ kép được quay có
giá trị bằng 0.
Lệnh SHR_B (W, R, D):
Là lệnh dịch chuyển các bít của từ đơn IN sang phải N vị trí, trong đó N được gọi là
số đếm lần dịch chuyển. Tại mỗi lần dịch chuyển, giá trị logic 0 được đưa vào bít cao
(bít thứ 15) và giá trị logic của bít thấp (bít 0) được chuyển vào bít báo tràn SM1.1.
Trong LAD kết quả được ghi vào OUT, còn trong STL kết quả vẫn nằm trong IN.
Cú pháp của lệnh như sau:
LAD STL
59
SRW IN N
Tương tự như vậy đối với các kiểu dữ liệu khác.
III.4.3 Hàm đổi dữ liệu tương ứng thanh ghi 7 nét
Hàm SEG chuyển đổi số nguyên hệ cơ số Hexa trong khoảng 0 F sang thành giá
trị bit tương ứng của thanh ghi 7 nét.
Hàm SEG lập giá trị các bit của thanh ghi 7 nét tương ứng với nội dung của 4 bit
thấp của byte đấu vào IN. Kết quả được ghi cào byte đầu ra OUT
Sơ đồ các bit của thanh ghi 7 nét
Số
nguyên
Thanh ghi 7 nét
- g f e d c b a
0 0 0 1 1 1 1 1 1
1 0 0 0 0 0 1 1 0
2 0 1 0 1 1 0 1 1
3 0 1 0 0 1 1 1 1
4 0 1 1 0 0 1 1 0
5 0 1 1 0 1 1 0 1
6 0 1 1 1 1 1 1
7 0 0 0 0 0 1 1 1
8 0 1 1 1 1 1 1 1
9 0 1 1 0 0 1 1 1
A 0 1 1 1 0 1 1 1
B 0 1 1 1 1 1 0 0
C 0 0 1 1 1 0 0 1
D 0 1 0 1 1 1 1 0
E 0 1 1 1 1 0 0 1
F 0 1 1 1 0 0 0 1
LAD STL Toán hạng
60
a
b
c
d
e
fg
SEG IN OUT
IN (Byte) :VB, IB,
QB, MB, SMB, AC,
*VD, *AC, hằng số
OUT(byte): VB, IB,
QB, MB, SMB, AC,
*VD, *AC
III.4.4 Đồng hồ thời gian thực
Đồng hồ tời gian thực chỉ có ở CPU 214. Để có thể làm việc với đồng hồ thời gian
thực CPU 214 cung cấp hai lệnh đọc và ghi giá trị cho đồng hồ. Những giá trị đọc
được hoặc ghi được với đồng hồ thời gian thực là các giá trị về ngày, thánh, năm, và
các giá trị giờ, phút, giây. Các dữ liệu đọc, ghi với đồng hồ thời gian thực trong LAD
và trong STL có độ dài một byte và phải được mã hóa theo kiểu số nhị phân BCD.
Byte 0 Năm ( 0 99)
Byte 1 Tháng(0 12)
Byte 2 Ngày (0 31)
Byte 3 Giờ (0 23)
Byte 4 Phúc (0 59)
Byte 5 Giây (0 59)
Byte 6 0
Byte 7 0 ngày trong tuần
Các dữ liệu hợp lệ là:
Năm (yy) Tháng (mm) Ngày (dd) Giờ (hh) Phút (mm) Giây (ss)
0 99 1 12 1 31 0 23 0 59 0 59
Riêng giá trị về ngày trong tuần là một số tương ứng với nội dung của nibble(4 bit)
thấp trong byte theo kiểu:
Chủ nhật Thứ hai Thứ ba Thứ tư Thứ năm Thứ sáu Thứ bảy
1 2 3 4 5 6 7
61
READ_RTC (LAD)
TODR (STL)
Lệnh đọc nội dung của đồng hồ thời gian thực với bộ đệm 8 byte được chỉ thị trong
lệnh bằng toán hạng T.
SET_RTC (LAD)
TODW (STL)
Lệnh ghi nội của bộ đệm 8 byte được chỉ thị trong lệnh bằng toán hạng T vào đồng
hồ thời gian thực.
Cú pháp sử dụng lệnh đọc, ghi dữ liệu với đồng hồ thời gian thực trong LAD, STL:
LAD STL Toán hạng
TODR T
T(byte) : VB, IB,
QB, MB, SMB,
*VD, *ACTODW T
Tuyệt đối không sử dụng lệnh TODR và lệnh TODW đồng thời vừa trong chương
trình chính, vừa trong chương trình xử lý ngắt. Khi một lệnh TODR hay TODW đã
được thực hiện, thì khi gọi chương trình xử lý ngắt, các lệnh làn việc với đồng hồ thời
gian thực trong chương trình xử lý ngắt sẽ không được thục hiện nữa. Bit SM4.5 sẽ có
logic 1 trong những trường hợp như vậy.
III.4.5 Lệnh truyền thông
III.4.5.1 Lệnh truyền (XMT), nhận (RCV)
Được sử dụng trong chế độ truyền thông freeport để truyền dữ liệu qua cổng truyền
thông. Việc nhận dữ liệu qua Port giao tiếp được thực hiện bằng 2 cách:
- Có thể thực hiện việc nhận dữ liệu bằng lệnh RCV ( hoàn toàn tương tự việc
truyền dữ liệu)
62
- Nhận dữ liệu bằng cách dùng ngắt thông qua Port giao tiếp,phương pháp này
thường được dùng nhiều hơn,do phương pháp này có thể quản lí được số lượng
Byte truyền nhận dễ dàng hơn.
LAD STL
XMT Table, Port
RCV Table, Port
Bit EN: tín hiệu cho phép truyền dữ liệu qua cổng Com
TBL : VB,MB,IB,QB.SMB,*LD,*AC,*VD
Port : 0 cho CPU 221,222,224
0,1 cho CPU 224XP,CPU226
Ví dụ về sử dụng lệnh truyền thông: Muốn truyền các ký từ: “T” “R” “I” qua port 0.
Ta thực hiện như sau, với 3 là số chuỗi truyền đi, sử dụng VB làm biến truyền.
63
III.4.5.2 Xuất, nhận dữ liệu qua cổng giao tiếp
S7_200 thông thường cho phép ta sử dụng các Port giao tiếp để giao tiếp với
các thiết bị bên ngoài,Trường hợp CPU sử dụng có 2 Port giao tiếp thì ta cũng có thể
sử dụng cả 2 Port giao tiếp để có thể giao tiếp với các thiết bị bên ngoài ( Như : Giao
tiếp 485 với đầu cân,giao tiếp với các đầu đo điện…….).
a, Xuất dữ liệu
Để thực hiện việc xuất dữ liệu ra Port giao tiếp ta thực hiện như sau:
Bước 1: Định dạng cho việc giao tiếp qua Port (Tốc độ Baud,số Bit dữ liệu…) thông
qua 2 byte SMB30 (cho Port 0),SMB130 (cho Port 1)
Bước 2: Thực hiện việc xuất dữ liệu
64
Bảng 4.1 Định dạng giao tiếp qua Port
Ví dụ:
Định dạng giao tiếp Port 0 (No Parity, 8
data bits per character, tốc độ baud 9600,
chế độ Freeport protocol)
Xuất dữ liệu qua Port 0.
TBL = VB200
b, Nhận dữ liệu
Để thực hiện việc nhận dữ liệu qua Port giao tiếp ,trước hết ta cũng phải định
dạng giao thức cho việc giao tiếp giống như phần xuất dữ liệu ra Port giao tiếp. Để
thực hiện việc nhận dữ liệu,ta thực hiện việc liên kết sự kiện nhận dữ liệu qua Port
giao tiếp ( Sự kiện số 8 cho Port 0,sự kiện số 25 cho Port 1).
Ví dụ:
65
Liên kết sự kiện ngắt số 8 với
chương trình ngắt INT_0 ( sự
kiện nhận dữ liệu qua Port giao
tiếp)
Cho phép ngắt (ENI)
Con trỏ trỏ tới ô nhớ VB300
Dữ liệu sau khi nhận được đưa
vào con trỏ AC1 (tức là đưa
vào VB300),sau đó tăng con trỏ
lên 1. Con trỏ đang ở VB301
Tăng con trỏ lên 1
Sau đó sẽ gọi chương trình con để xử lí chuỗi dữ liệu vừa mới nhận đó.
Ngoài ra, còn có các lệnh về đọc (NETR), ghi (NETW) trên mạng. Lệnh thiết lập cổng
giao tiếp (GET_ADDR và SET_ADDR).
66
Chương 4 PLC S7-300 Siemens và ngôn ngữ lập trình
IV.1 Giới thiệu về PLC S7-300
IV.1.1 Tổng quan chung
Đây là dòng sản phẩm cao cấp, được dùng cho những ứng dụng lớn với những yêu
cầu I/O nhiều và thời gian đáp ứng nhanh,yêu cầu kết nối mạng,và có khả năng mở
rộng cho sau này. Ngôn ngữ lập trình đa dạng cho phép người sử dụng có quyền chọn
lựa. Đặc điểm nổi bật của S7_300 đó là ngôn ngữ lập trình cung cấp những hàm toán
đa dạng cho những yêu cầu chuyên biệt như : Hàm SCALE….. hoặc ta có thể sử dụng
ngôn ngữ chuyên biệt để xây dựng hàm riêng cho ứng dụng mà ta cần. Ngoài ra S7-
300 còn xây dựng phần cứng theo cấu trúc Modul, nghĩa là đối với S7-300 sẽ có
những Modul tích hợp cho những ứng dụng đặc biệt như Modul PID, Modul Đọc xung
tốc độ cao….
Các loại tín hiệu kết nối với PLC bao gồm:
a, Tín hiệu số: Là các tín hiệu thuộc dạng hàm Boolean, dạng tín hiệu chỉ có 2 trị 0
hoặc 1.
Đối với PLC Siemens :
Mức 0: tương ứng với 0V hoặc hở mạch
Mức 1: Tương ứng với 24V
Vd: Các tín hiệu từ nút nhấn, từ các công tắc hành trình….. đều là những tín
hiệu số
b, Tín hiệu tương tự: Là tín hiệu liên tục, từ 0-10V hay từ 4-20mA….
Vd: Tín hiệu đọc từ Loadcell,từ cảm biến lưu lượng…
c, Tín hiệu khác: Bao gồm các tín hiệu giao tiếp với máy tính, với các thiết bị ngoại
vi khác bằng các giao thức khác nhau như giao thức RS232,RS485,Modbus….
67
Hình 4.1 Cấu trúc chung của PLC S7-300
(1: Nguồn; 2:Khe cắm; 3: Nguồn ra 24V; 4: công tắc; 5: đèn báo; 6: khe cắm thẻ
nhớ; 7: cổng truyền thong MPI-Profibus DP; 8: giắc cắm SM; 9: sơ đồ đấu dây)
IV.1.2 Cấu trúc phần cứng
PLC S7-300 bao gồm các module sau:
- Modul CPU: Modul CPU là loại Modul chứa vi xử lí, hệ điều hành, bộ nhớ,
các bộ thời gian, bộ đếm,cổng truyền thông (RS485)…. Và có thể còn có một
vài cổng vào ra số.Các cổng vào ra số trên CPU được gọi là cổng vào ra
Onboard. Trong họ PLC S7_300 có nhiều loại CPU khác nhau: CPU 312,CPU
314, CPU 315…. Những Modul cùng sử dụng một loại bộ vi xử lí, nhưng khác
nhau về cổng vào ra onboard cũng như các khối hàm đặc biệt tích hợp sẵn trong
thư viện của hệ điều hành phục vụ việc sử dụng các cổng vào ra onboard này
sẽ được phân biệt với nhau tong tên gọi bằng tên cụm chữ cái IFM (viết tắt của
Intergrated Function Module).Ví dụ Module CPU 312IFM, Modul314 IFM….
Ngoài ra còn có các loại module hai cổng truyền thông, trong đó cổng truyền
thông thứ 2 có chức năng chính là phục vụ việc nối mạng phân tán. Các loại
module CPU được phân biệt với những loại CPU khác bằng thêm cụm từ DP
(Distrubited port) trong tên gọi. Ví dụ module CPU 315-DP
- Các Modul mở rộng thường được chia thành 5 loại chính: PS (Power Supply):;
SM ( Signal Module) gồm: DI, DO, DI/O, AI. AO, AI/O; IM (Interface
Module); FM (Function Module); CP (Communication Module). Lưu ý: Trên
mỗi một Rack chỉ có thể gá được nhiều nhất 8 module mở rộng (không kể
68
module CPU, module nguồn nuôi). Một module CPU có thể làm việc trực tiếp
với nhiều nhất 4 Rack, các Rack này phải được nối với nhau bằng Module IM.
Hình 4.2 Tủ đấu nối PLC S7-300
1 2 3 4 5 6 7 8 9 10 11
P
S
CPU IM SM SM SM SM SM CP FM FM
Đối với module SM, các loại tín hiệu thường xử lý là tín hiệu số và tín hiệu tương
tự. Tùy từng loại module sử dụng và cách cài đặt trong cấu hình phần cứng mà module
đó có thể làm việc với nhiều loại tín hiệu khác nhau.
Một trạm PLC được hiểu là một module CPU ghép nối cùng với các module mở rông
khác (module DI, DO, AI, AO, CP, FM) trên những thanh rack (giá đỡ), trong đó việc
truy nhập của CPU vào các module mở rộng được thực hiện thông qua địa chỉ của
chúng. Một module CPU có khả năng quản lý được 4 thanh rack với tối đa 8 module
mở rrộng trên mỗi thanh. Tuỳ vào vị trí lắp đặt của module mở rộng trên những thanh
rack mà các module có những địa chỉ khác nhau.
PLC S7-300 có nhiều chùng loại CPU, có thể giới thiệu một số chủng loại sau:
CPU 312: Bộ nhớ làm việc 16KB, chu kì lệnh 0.1us
69
CPU 312C: Bộ nhớ làm việc 16KB, chu kì lệnh 0.1us, tích hợp sẵn 10DI/6DO,2
Xung tốc độ cao 2.5KHz,2 kênh đọc xung tốc độ cao 10Khz.
CPU 312IFM: Bộ nhớ làm việc 6KB,chu kì lệnh 0.6us,tích hợp sẵn 10DI/6DO
CPU 313: Bộ nhớ làm việc 12KB,chu kì lệnh 0,6us
CPU 313C: Bộ nhớ làm việc 32KB, chu kì lệnh 0,1us, tích hợp sẵn 24DI, 16DO,
5AI, 2AO, 3 Kênh xuất xung tốc độ cao (2.5Khz), 3 kênh đọc xung tốc độ cao
(30Khz)
CPU 313C-2DP: Bộ nhớ làm việc 32KB, chu kì lệnh 0.1us, tích hợp sẵn
24DI,16DO,5AI, 2AO, 3 Kênh xuất xung tốc độ cao (2.5Khz), 3 kênh đọc xung tốc độ
cao (30Khz),có 2 cổng giao tiếp.
CPU 313C-2PtP : Bộ nhớ làm việc 32KB,chu kì lệnh 0.1us, tích hợp sẵn
24DI,16DO,5AI, 2AO, 3 Kênh xuất xung tốc độ cao (2.5Khz), 3 kênh đọc xung tốc độ
cao (30Khz),có 2 cổng giao tiếp MPI+ PtP connector (RS-422/485 (ASCII,. .)
CPU 314: Bộ nhớ làm việc 24KB, chu kì lệnh 0.3us
CPU 314IFM : Bộ nhớ làm việc 24KB, chu kì lệnh 0.3us, tích hợp sẵn 20DI/16DO,
4AI/ 1AO
CPU 314C-2DP:Bộ nhớ làm việc 48KB,chu kì lệnh 0.1us,tích hợp sẵn 24DI/
16DO, 5AI/ 2AO, 4 kênh xuất xung tốc độ cao,4 kênh đọc xung tốc độ cao.2 cổng
giao tiếp.
CPU 314C-2PtP:Bộ nhớ làm việc 48KB,chu kì lệnh 0.1us,tích hợp sẵn 24DI/
16DO, 5AI/ 2AO, 4 kênh xuất xung tốc độ cao,4 kênh đọc xung tốc độ cao.2 cổng
giao tiếp.
CPU 315 : Bộ nhớ làm việc 48KB, chu kì lệnh 0.3us
CPU 315-2DP: Bộ nhớ làm việc 48KB, chu kì lệnh 0.3us, MPI + DP
CPU 315F-2DP : Bộ nhớ làm việc 128KB,chu kì lệnh 0.3us, 2 cổng giao tiếp.
CPU 316 : Bộ nhớ làm việc 128KB, chu kì lệnh 0.3us
CPU 316-2DP: Bộ nhớ làm việc 128KB,chu kì lệnh 0.3us, 2 cổng MPI + DP
CPU 317-2: Bộ nhớ làm việc 512KB, chu kì lệnh 0.3us,2 cổng giao tiếp MPI + DP
CPU 317F-2: Bộ nhớ làm việc 512KB,chu kì lệnh 0.3us, 2 cổng giao tiếp MPI +
DP ( DP master hoặc Slave)
70
CPU 318-2: Bộ nhớ làm việc 256KB, chu kì lệnh 0.3us, 2 cổng giao tiếp MPI + DP
( DP Master hoặc Slave).
CPU 614: Bộ nhớ làm việc 192KB,chu kì lệnh 0.3us, tích hợp sẵn 512DI/DO
CPU M7: RS232,MPI 64KB SRAM
IV.1.3 Kiểu dữ liệu và phân chia bộ nhớ trong S7-300
a, Các kiểu dữ liệu sử dụng
- Kiểu Bool: True hoặc False (0 hoặc 1)
- Kiểu Byte: gồm 8 bit
- Kiểu Word: 16 bit
- Kiểu Int: số nguyên 16 bit
- Kiểu Dint: số nguyên 32 bit
- Kiểu Real: số thực
- Kiểu S5T: kiểu dữ liệu Timer
- Kiểu Char: kiểu dữ liệu kí tự
- Kiểu Date: kiểu dữ liệu ngày tháng
- Kiểu Tod: kiểu dữ liệu ngày tháng
b, Phân chia bộ nhớ trong S7-300
Bộ nhớ trong PLC S7-300 gồm 3 vùng nhớ chính:
- Vùng chứa chương trình ứng dụng : Vùng chứa chương trình được chia thành 3
miền: OB ( Organisation block) : miền chứa chương trình tổ chức; FC
(Function): Miền chứa chương trình con, được tổ chức thành hàm và có biến
hình thức để trao đổi dữ liệu; FB (Function block): Miền chứa chương trình
con, được tổ chức thành hàmvà có khả năng trao đổi dữ liệu với bất cứ 1 khối
chương trình nào khác. Các dữ liệu này phải được xây dựng thành một khối dữ
liệu riêng ( Data Block khối DB)
- Vùng chứa tham số của hệ điều hành: Chia thành 7 miền khác nhau:
I (Process image input): Miền dữ liệu các cổng vào số,trước khi bắt đầu thực
hiện chương trình, PLC sẽ đọc giá trị logic của tất cả các cổng đầu vào và cất giữ
chúng trong vùng nhớ I. Thông thường chương trình ứng dụng không đọc trực tiếp
trạng thái logic của cổng vào số mà chỉ lấy dữ liệu của cổng vào từ bộ đệm I.
71
Q (Process Image Output): Miền bộ đệm các dữ liệu cổng ra số. Kết thúc giai
đoạn thực hiện chương trình,PLC sẽ chuyển giá trị logic của bộ đệm Q tới các cổng ra
số. Thông thường chương trình không trực tiếp gán giá trị tới tận cổng ra mà chỉ
chuyển chúng tới bộ đệm Q.
M (Miền các biến cờ): Chương trình ứng dụng sử dụng những biến này để lưu
giữ các tham số cần thiết và có thể truy nhập nó theo Bit (M), byte (MB), từ (MW) hay
từ kép (MD).
T (Timer): Miền nhớ phục vụ bộ thời gian (Timer) bao gồm việc lưu trữ giá trị
thời gian đặt trước ( PV-Preset Value ), giá trị đếm thời gian tức thời (CV –Current
Value) cũng như giá trị Logic đầu ra của bộ thời gian.
C (Counter): Miền nhớ phục vụ bộ đếm bao gồm việc lưu trữ giá trị đặt trước
( PV- Preset Value), giá trị đếm tức thời (CV _ Current Value) và giá trị logic đầu ra
của bộ đệm.
PI: Miền địa chỉ cổng vào của các Modul tương tự (I/O External input). Các giá
trị tương tự tại cổng vào của modul tương tự sẽ được module đọc và chuyển tự động
theo những địa chỉ cấu hình trong phần cứng. Chương trình ứng dụng có thể truy cập
miền nhớ PI theo từng Byte ( PIB), từng từ PIW hoặc từng từ kép PID.
PQ: Miền địa chỉ cổng ra cho các module tương tự (I/O External Output). Các
giá trị theo những địa chỉ này sẽ được module tương tự chuyển tới các cổng ra tượng
tự. Chương trình ứng dụng có thể truy nhập miền nhớ PQ theo từng Byte (PQB),từng
từ (PQW) hoặc theo từng từ kép (PQD)
- Vùng chứa các khối dữ liệu: được chia làm 2 loại:
DB (Data Block):Miền chứa dữ liệu được tổ chức thành khối. Kích thước cũng
như số lượng khối do người sử dụng quy định, phù hợp với từng bài toán điều
khiển.Chương trình có thể truy nhập miền này theo từng bit (DBX), byte (DBB), từ
(DBW) hoặc từ kép (DBD).
L (Local data block): Miền dữ liệu địa phương được các khối chương trình OB,
FC, FB tổ chức và sử dụng cho các biến nháp tức thời và trao đổi dữ liệu của biến hình
thức với những khối chương trình gọi nó. Nội dung của một khối dữ liệu trong miền
nhớ này sẽ bị xoá khi kết thúc chương trình tương ứng trong OB, FC, FB. Miền này có
thể được truy nhập từ chương trình theo bit (L), byte(LB) từ (LW) hoặc từ kép (LD).
72
Tên gọi Kích thước
truy nhập
Kích thước tối đa
(phụ thuộc CPU)
Ý nghĩa
Process-
image
Input (I)
Bộ đệm vào
số.
I
IB
IW
ID
0.0127.7
0127
0126
0124
Đầu mỗi vòng quét, hệ điều
hành sẽ ghi vào phần nhớ này
các giá trị được lấy từ cổng vào
số (digitale inputs) vật lý của
module mở rộng.
Process-
image
Output (Q)
Bộ đệm ra
số.
Q
QB
QW
QD
0.0127.7
0127
0126
0124
Cuối mỗi vòng quét, hệ điều
hành sẽ đọc nội dung của miền
nhớ này và chuyển ra cổng ra
số (digitale outputs) của các
module mở rộng.
Bit memory
(M)
Vùng nhớ
cờ.
M
MB
MW
MD
0.0255.7
0255
0254
0252
Được sử dụng như một biến cờ
cho chương trình ứng dụng.
Timer (T) T0T255 Miền nhớ lưu giữ các giá trị
PV, CV, T-bit của Timer.
Được truy nhập và sửa đổi bởi
hệ điều hành và chương trình
ứng dụng.
Counter (C) C0C255 Miền nhớ lưu giữ các giá trị
PV, CV, C-bit của Counter.
Được truy nhập để sửa đổi bởi
hệ điều hành và chương trình
ứng dụng.
Data block
(DB)
Khối dữ liệu
share.
DBX
DBB
DBW
DBD
0.065535.7
0 65535
065534
065532
Được mở bằng lệnh “OPN
DB”
Data block DIX 0.065535.7 Là khối DB nhưng được mở
73
Tên gọi Kích thước
truy nhập
Kích thước tối đa
(phụ thuộc CPU)
Ý nghĩa
(DI)
Khối dữ liệu
Instance.
DIB
DIW
DID
0 65535
065534
065532
bằng lệnh “OPN DI”
Local block
(L)
Miền nhớ
địa phương
cho các tham
số hình thức.
L
LB
LW
LD
0.065535.7
0 65535
065534
065532
Miền nhớ được cấp phát cho
các khối OB, FC, FB mỗi khi
khối này được gọi để thực
hiện. Miền nhớ này cũng sẽ
được giải phóng khi thực hiện
xong các khối chương trình đó.
Peripheral
input (PI)
PIB
PIW
PID
0 65535
0 65534
0 65532
Chỉ có địa chỉ truy cập để đọc.
Không có phần bộ nhớ thực sự.
Peripheral
output (PQ)
PQB
PQW
PQD
0 65535
0 65534
0 65532
Chỉ có địa chỉ truy cập để ghi.
Không có phần bộ nhớ thực sự.
Bảng 4.1 Phân chia vùng nhớ trong S7-300
c, Vòng quét của chương trình
PLC thực hiện chương trình theo chu kì lặp. Mỗi vòng lặp được gọi là vòng quét
(Scan). Mỗi vòng quét được bắt đầu bằng giai đoạn chuyển dữ liệu từ các cổng vào số
tới vùng bộ đệm ảo I, tiếp theo là giai đoạn thực hiện chương trình. Trong từng vòng
quét chương trình thực hiện từ lệnh đầu tiên đến lệnh kết thúc của khối OB (Block
End). Sau giai đoạn thực hiện chương trình là giai đoạn chuyển các nội dung của bộ
đệm ảo Q tới các cổng ra số. Vòng quét được kết thúc bằng giai đoạn truyền thông nội
bộvà kiểm tra lỗi. Chú ý rằng bộ đệm I và Q không liên quan tới các cổng vào ra tương
tự nên các lệng truy nhập cổng tương tự được thực hiện trực tiếp với cổng vật lí chứ
không thông qua bộ đệm. Thời gian cần thiết để PLC thực hiện 1 vòng quét gọi là thời
gian vòng quét (Scan Time). Thời gian vòng quét không cố định, tức là không phải
vòng quét nào cũng được thực hiện trong một khoảng thời gian như nhau. Có vòng
quét được thực hiện lâu, có vòng quét được thực hiện nhanh tuỳ thuộc vào số lệnh
74
trong chương trình được thực hiện và khối dữ liệu truyền thông trong vòng quét đó.
Như vậy giữa việc đọc dữ liệu từ đối tượng để xử lí, tính toán và việc gởi tín hiệu điều
khiển đến đối tượng có một khoảng thời gian trễ đúng bằng thời gian vòng quét. Nói
cách khác, thời gian vòng quét quyết định tính thời gian thực của chương trình điều
khiển trong PLC. Thời gian vòng quét càng ngắn, tính thời gian thực của chương trình
càng cao. Nếu sử dụng các khối chương trình đặc biệt có chế độ ngắt, ví dụ như khối
OB40, OB80…, chương trình của các khối đó sẽ được thực hiện trong vòng quét khi
xuất hiện tín hiệu báo ngắt cùng chủng loại. Các khối chương trình này có thể được
thực hiện tại mọi điểm trong vòng quét chứ không bị gò ép là phải ở trong giai đoạn
thực hiện chương trình. Chẳng hạn nếu 1 tín hiệu báo ngắt xuất hiện khi PLC đang ở
giai đoạn truyền thông và kiểm tra nội bộ, PLC sẽ ngừng công việc truyền thông, kiểm
tra để thực hiện khối chương trình tương ứng với tín hiệu báo ngắt đó. Với hình thức
xử lí tín hiệu ngắt như vậy, thời gian vòng quét sẽ càng lớn khi càng có nhiều tín hiệu
ngắt xuất hiện trong vòng quét. Do đó để nâng cao tính thời gian thực cho chương
trình điều khiển, tuyệt đối không nên viết chương trình xử lí ngắt quá dài hoặc quá lạm
dụng việc sử dụng chế độ ngắt trong chương trình điều khiển. Tại thời điểm thực hiện
lệnh vào ra, thông thường lệnh không làm việc trực tiếp với cổng vào ra mà chỉ thông
qua bộ đệm ảo của cổng trong vùng nhớ tham số.Việc truyền thông giữa bộ đệm ảo
với ngoại vi trong các giai đoạn 1 và 3 do hệ điều hành CPU quản lí. Ở 1 số modul
CPU, khi gặp lệnh vào ra ngay lập tức,hệ thống sẽ cho dừng mọi công việc khác, ngay
cả chương trình xử lí ngắt,để thực hiện lệnh trực tiếp với cổng vào ra.
d, Cấu trúc chương trình
Chương trình trong S7_300 được lưu trong bộ nhớ của PLC ở vùng giành riêng cho
chương trình và có thể được lập với 2 dạng cấu trúc khác nhau.
- Lập trình tuyến tính: toàn bộ chương trình nằm trong một khối trong bộ nhớ.
Loại hình cấu trúc tuyến tính này phù hợp với những bài toán tự động
nhỏ,không phức tạp. Khối được chọn phải là khối OB1, là khối mà PLC luôn
quét và thực hiện các lệnh trong đó thường xuyên,từ lệnh đầu tiên đến lệnh cuối
cùng và quay lại lệnh đầu tiên.
- Lập trình có cấu trúc: Chương trình được chia thành những phần nhỏ và mỗi
phần thực thi những nhiệm vụ chuyên biệt riêng của no,từng phần này nằm
75
trong những khối chương trình khác nhau. Loại hình cấu trúc này phù hợp với
những bài toán điều khiển nhiều nhiệm vụ và phức tạp. PLC S7_300 có 4 loại
khối cơ bản sau:
Loại khối OB (Organization Block) : Khối tổ chức và quản lí chương trình điều
khiển. Có nhiều loại khối OB với những chức năng khác nhau, chúng được phân biệt
với nhau bằng một số nguyên đi sau nhóm kí tự OB.
Ví dụ: OB1, OB35, OB40, OB80,…..
Loại khối FC (Program block): Khối chương trình với những chức năng riêng
giống như 1 chương trình con hoặc một hàm (chương trình con có biến hình thức).
Một chương trình ứng dụng có thể có nhiều khối FC và các khối FC này được phân
biệt với nhau bằng một số nguyên sau nhóm kí tự FC.
Ví dụ: FC1, FC2….
Loại khối FB (Function Block): Là loại khối FC đặc biệt có khả năng trao đổi 1
lượng dữ liệu lớn với các khối chương trình khác. Các dữ liệu này phhải được tổ chức
thành khối dữ liệu riêng có tên gọi là Data block. Một chương trình ứng dụng có thể có
nhiều khối FB và các khối Fb này được phân biệt với nhau bằng một số nguyên sau
nhóm kí tự FB. Chẳng hạn như FB1,FB2…
Loại khối DB (Data Block): Khối chứa các dữ liệu cần thiết để thực hiện chương
trình. Các tham số của khối do người dùng tự đặt. Một chương trình ứng dụng có thể
có nhiều khối DB và các khối DB này được phân biệt với nhau bằng một số nguyên
sau nhóm kí tự DB
Ví dụ: DB1, DB2….
Chương trình trong các khối được liên kết với nhau bằng các lệng gọi khối, chuyển
khối. Xem những phần chương trình trong các khối như là các chương trình con thì
S7_300 cho phép gọi chương trình con lồng nhau, tức là chương trình con này gọi một
chương trình con khác và từ một chương trình con được gọi lại gọi tới một chương
trình con thứ 3 … Số các lệnh gọi lồng nhau phụ thuộc vào từng chủng loại module
CPU mà ta đang sử dụng. Ví dụ đối với module CPU 314 thì số lệnh gọi lồng nhau
nhiều nhất có thể cho phép là 8. Nếu số lần gọi khối lồng nhau mà vượt quá con số
giới hạn cho phép, PLC sẽ tự chuyển qua chế độ Stop và đặt cờ báo lỗi.
76
Các khối OB đặc biệt khi sử dụng cần lưu ý: Trong khi khối OB được thực hiện
đều đặn ở từng vòng quét trong giai đoạn thực hiện chương trình thì các khối OB khác
chỉ được thực hiện khi xuất hiện tín hiệu báo ngắt tương ứng, nói cách khác chương
trình viết cho các khối OB này chính là chương trình xử lí tín hiệu ngắt (event). Chúng
bao gồm:
OB10 ( Time of Day Interrupt):Chương trình trong khối sẽ được thực hiện khi giá
trị của đồng hồ thời gian thực nằm trong một khoảng thời gian đã được quy định.OB10
có thể gọi một lần, nhiều lần cách đều nhau từng phút, từng giơ,từng ngày ….Việc quy
định khoảng thời gian hay số lần gọi OB10 được thực hiện nhờ chương trình hệ thống
SFC28 hoặc trong bảng tham số của module CPU nhờ phần mềm Step 7.
OB20 ( Time Day Interrupt): Chương trình trong khối sẽ được thực hiện sau một
khoảng thời gian trễ đặt trước kể từ khi gọi chương trình hệ thống SFC32 để đặt thời
gian trễ.
OB35 (Cyclic Interrupt): Chương trình trong OB35 sẽ được thực hiện cách đều
nhau 1 khoảng thời gian cố định.Mặc định khoảng thời gian này sẽ là 100ms,xong ta
có thể thay đổi nó trong bảng tham số của module CPU, nhờ phần mềm Step7.
OB40 (Hardware Interrupt): Chương trình trong OB sẽ được thực hiện khi xuất
hiện 1 tín hiệu báo ngắt từ ngoại vi đưa vào module CPU thông qua các cổng vào ra số
onboard đặc biệt,hoặc thông qua các module SM,CP,FM
OB80 (Cycle Time Fault): Chương trình trong khối OB80 sẽ được thực hiện khi
thời gian vòng quét(Scan time) vượt quá khoảng thời gian cực đại đã được quy định
hoặc khi có một tín hiệu ngắt gọi một khối OB nào đó mà khối OB này chưa kết thúc ở
lần gọi trước.Mặc định thời gian Scan time cực đại là 150ms, nhưng có thể thay đổi nó
thông qua bảng tham số của module CPU nhờ phần mềm Step 7.
OB81 (Power Supply fault): CPU sẽ gọi chương trình trong khối OB81 khi phát
hiện thấy có lỗi về nguồn nuôi.
OB82( Diagnostic Interrupt):Chương trình trong OB82 được gọi khi CPU phát hiện
sự cố từ các Modul vào ra
OB85( Not Load fault):Chương trình trong OB82 được gọi khi CPU phát hiện thấy
chương trình ứng dụng có sử dụng chế độ ngắt nhưng chương trình sử lí tín hiệu ngắt
lại không có trong khối OB tương ứng.
77
OB87 ( Communication fault):Khối OB87 sẽ được gọi khi CPU phát hiện thấy lỗi
trong truyền thông ví dụ như không có tín hiệu trả lời từ các đối tác.
OB100 ( Start Up Information):Khối OB100 sẽ được thực hiện 1 lần khi CPU
chuyển trạng thái Stop sang Run.
OB121 ( Synchronous error):Khối OB121 sẽ được gọi khi CPU phát hiện thấy lỗi
logic trong chương trình như đổi sai kiểu dữ liệu hoặc lỗi truy nhập khối DB, FC,FB
không có trong bộ nhớ CPU.
OB122 ( Synchronous error):Khối OB122 sẽ được gọi khi CPU phát hiện thấy lỗi
truy cập module trong chương trình,ví dụ chương trình có lệnh truy nhập module vào
ra mở rộng nhưng lại không tìm thấy module này.
Ngoài ra, còn một số khối OB đặc biết khác, tùy thuộc vào chủng loại CPU mà nó
có chức năng và phương pháp sử dụng khác nhau.
e, Các vùng nhớ và truy cập dữ liệu
Trong S7_300 có các vùng nhớ sau:
I: Input, các ngõ vào số.
Q:Output, các ngõ ra số.
M: Internal Memory, vùng nhớ nội.
DB: Data Block, dữ liệu. Sử dụng vùng nhớ này phải khai báo trong phần mềm.
PIW: Analog Input, ngõ vào analog.
PQW: Analog Output, ngõ ra analog.
T: Timer.
C: Counter.
Định dạng dữ liệu:
Kiểu Bool: VD: Q0.0, I0.0, DB1.DBX2.3
Kiểu Byte: 1 Byte = 8 Bit. Suy ra, giá trị 1 Byte trong khoảng: 0 -(28 -1) hay 0-
255. VD: QB0, MB3, VB10, SMB2
Kiểu Word: 1 Word = 2 Byte = 16 Bit.
Kiểu DWord: 1 DWord = 2 Word = 4 Byte = 32 Bit.
Kiểu Int: Số nguyên 16 bit
Kiểu DInt: Số nguyên 32 bit
Kiểu Real: Số thực 32 bit
78
IV.2 Tập lệnh trong S7-300
IV.2.1 Thanh ghi trạng thái
Khi thực hiện lệnh, CPU sẽ ghi nhận lại trạng thái của phép tính trung gian cũng
như của kết quả vào một thanh ghi đặc biệt 16 Bits, được gọi là thanh ghi trạng thái
(Status Word). Mặc dù thanh ghi trạng thái này có độ dài 16 Bits nhưng chỉ sử dụng 9
Bits với cấu trúc như sau:
BR CC1 CC0 OV OS OR STA RLO FC
Bit logic thường làm việc với RLO
Word logic làm việc với thanh ghi ACCU
Ý nghĩa của các bit trạng thái:
- FC ( First check) : Khi phải thực hiện một dãy các lệnh logic liên tiếp nhau gồm
các phép tính giao, hợp và nghịch đảo, bit FC có giá trị bằng 1, hay nói cách
khác, FC=0 khi dãy lệnh Logic tiếp điểm vừa được kết thúc.
- RLO (Result of logic operation): Kết quả tức thời của phép tính logicvừa được
thực hiện
- STA (Status bit): Bit trạng thái này luôn có giá trị logic của tiếp điểm được chỉ
định trong lệnh.
- OR :Ghi lại giá trị của phép tính logic giao cuối cùng được thực hiện để phụ
giúp cho việc thực hiện phép toán hợp sau đó. Điều này là cần thiết vì trong một
biểu thức hàm 2 trị ,phép tính giao bao giờ cũng phải được thực hiện trước các
phép tính hợp.
- OS (Stored overflow bit): Ghi lại giá trị Bit bị tràn ra ngoài mảng ô nhớ.
- OV(Overflow Bit): Bit báo cáo kết quả phép tính bị tràn ra ngoài mảng ô nhớ.
- CC0 và CC1 ( Condition code) : Hai bit báo trạng thái của kết quả phép tính với
số nguyên,số thực phép dịch chuyển hoặc phép tính logic trong ACCU
- BR (Binary result bit) : Bit trạng thái cho phép liên kết hai loại ngôn ngữ lập
trình STL và LAD .Chẳng hạn cho phép người sử dụng có thể viết một khối
chương trình FB hoặc FC trên ngôn ngữ STL nhưng gọi và sử dụng chúng trong
một chương trình khác viết trên LAD. Để tạo ra được mối liên kết đó,ta cần
phải kết thúc chương trình trong FB, FC bằng lệnh ghi: BR = 1 nếu chương
79
trình chạy không có lỗi; BR = 0 nếu chương trình chạy có lỗi Khi sử dụng các
khối hàm đặc biệt của hệ thống (SFC hoặc SFB), trạng thái làm việc của
chương trình cũng được thông báo ra ngoài qua bit trạng thái BR như sau:
BR=1 nếu SFC hay SFB thực hiện không có lỗi; BR=0 nếu có lỗi khi thực hiện
SFC hay SFB
IV.2.2 Các lệnh về bit
Về cơ bản, cú pháp hệ lệnh trong S7-300 khá giống so với S7-200 về một số câu
lệnh. Tuy nhiên vẫn có một số khác biệt trong cách sử dụng, đồng thời số lượng câu
lệnh trong S7-300 nhiều hơn cả về số lượng và chức năng.
Trong mục này, sẽ trình bày chủ yếu bằng ngôn ngữ STL vì trong lập trình, ngôn
ngữ STL có độ linh hoạt và mềm dẻo hơn ngôn ngữ LAD và FBD. Tuy nhiên sẽ cố
gắng trình bày kết hợp song song giữa hai loại ngôn ngữ được sử dụng chủ yếu là
LAD và STL để đọc giả so sánh về cú pháp hệ lệnh.
a. Nhóm lệnh logic tiếp điểm
Lệnh AND (và)
Cú pháp A (toán hạng)
- FC = 0 thì nó sẽ gán nội dung của toán hạng vào RLO .Sau đó sẽ dựng FC = 1
- FC = 1 thì RLO = RLO I0.0 và duy trì FC = 1
Khi vào đầu một chương trình thì FC = 0 hoặc chỉ cần tạo một Network mới
RLO : Result of logic oplogic operation
Lệnh AN
Cú pháp AN (toán hạng)
- FC = 0 sẽ gán giá trị logic nghịch đảo của toán hạng vào RLO
- FC = 1 nó sẽ thực hiện phép tính giữa RLO với giá trị nghịch đảo của toán hạng
và ghi lại kết quả vào RLO
Lệnh O
Cú pháp O (toán hạng)
- FC = 0 thì nó sẽ gán giá trị logic của toán hạng vào RLO
- FC = 1 nó sẽ thực hiện phép giữa RLO với toán hạng và ghi lại kết quả vào RLO
Lệnh ON
Cú pháp ON (toán hạng)
80
- FC = 0 thì nó sẽ gán giá trị logic của toán hạng vào RLO
- FC = 1 nó sẽ thực hiện phép giữa RLO với giá trị nghịch đảo của toán hạng và
ghi lại kết quả vào RLO
Lệnh gán
Cú pháp = ( toán hạng )
Lệnh thực hiện phép tính với giá trị 1 biểu thức(Lệnh này không có toán hạng)
Cú pháp A(
- FC = 0 lệnh sẽ gán giá trị logic của biểu thức trong dấu ngoặc sau nó vào RLO
- FC = 1 lệnh sẽ thực hiện phép tính và giữa RLO với giá trị logic của biểu thức
trong dấu ngoặc sau nó và ghi lại kết quả vào RLO
Lệnh thực hiện phép tính với giá trị nghịch đảo của 1 biểu thức (Lệnh này
không có toán hạng)
Cú pháp AN(
- FC = 0 lệnh sẽ gán giá trị logic của biểu thức trong dấu ngoặc sau nó vào RLO
- FC = 1 lệnh sẽ thực hiện phép tính và giữa RLO với giá trị nghịch đảo logic của
biểu thức trong dấu ngoặc sau nó và ghi lại kết quả vào RLO
Lệnh thực hiện phép tính với giá trị 1 biểu thức(Lệnh này không có toán hạng)
Cú pháp O(
- FC = 0 lệnh sẽ gán giá trị logic của biểu thức trong dấu ngoặc sau nó vào RLO
- FC = 1 lệnh sẽ thực hiện phép tính giữa RLO với giá trị logic của biểu thức
trong dấu ngoặc sau nó và ghi lại kết quả vào RLO
Lệnh thực hiện phép tính với giá trị nghịch đảo của 1 biểu thức
(Lệnh này không có toán hạng)
Cú pháp ON(
- FC = 0 lệnh sẽ gán giá trị logic nghịch đảo của biểu thức trong dấu ngoặc sau nó
vào RLO
- FC = 1 lệnh sẽ thực hiện phép tính giữa RLO với giá trị nghịch đảo của biểu
thức trong dấu ngoặc sau nó và ghi lại kết quả vào RLO
Lệnh thực hiện phép tính exclusive or
Cú pháp X (toán hạng)
- FC = 0 lệnh ghi giá trị logic của toán hạng vào RLO
81
- FC = 1 lệnh sẽ kiểm tra xem nội dung của RLO và giá trị logic của toán hạng có
khác nhau không nếu khác thì ghi 1 vào RLO nếu không khác thì ghi 0 vào RLO
Lệnh thực hiện phép tính exclusive or not
Cú pháp XN (toán hạng)
- FC = 0 lệnh sẽ ghi giá trị nghịch đảo của toán hạng vào RLO
- FC = 1 lệnh sẽ kiểm tra xem nội dung của RLO và giá trị logic của toán hạng có
giống nhau không nếu giống thì ghi 1 vào RLO nếu không giống thì ghi 0 vào RLO
Lệnh thực hiện phép tính exclusive or với giá trị của một biểu thức (Lệnh này
không có toán hạng)
Cú pháp X(
- FC = 0 lệnh sẽ ghi giá trị logic của biểu thức trong dấu ngoặc sau nó vào RLO
- FC = 1 lệnh đảo nội dung RLO khi biểu thức trong dấu ngoặc sau nó có giá trị 1
Lệnh thực hiện phép tính exclusive or với giá trị của một biểu thức (Lệnh này
không có toán hạng)
Cú pháp XN(
- FC = 0 lệnh sẽ ghi giá trị logic nghịch đảo của biểu thức trong dấu ngoặc sau nó
vào RLO
- FC = 1 lệnh sẽ đảo nội dung của RLO khi biểu thức trong dấu ngoặc sau nó có giá
trị 0
Lệnh ghi giá trị logic 1 vào RLO (Lệnh này không có toán hạng)
Cú pháp SET
Lệnh ghi giá trị logic 0 vào RLO(Lệnh này không có toán hạng)
Cú pháp CLR
Lệnh đảo giá trị của RLO(Lệnh này không có toán hạng)
Cú pháp NOT
Lệnh gán có điều kiện giá trị logic 1 vào ô nhớ
Cú pháp S (toán hạng )
Nếu RLO = 1 ,lệnh sẽ ghi giá trị 1 vào ô nhớ có địa chỉ cho trong toán hạng
Lệnh gán có điều kiện giá trị logic 0 vào ô nhớ
Cú pháp R (toán hạng )
Nếu RLO = 1 ,lệnh sẽ ghi giá trị 0 vào ô nhớ có địa chỉ cho trong toán hạng
82
Lệnh phát hiện sườn lên
cú pháp FP (toán hạng)
Lệnh được sử dụng như một biến cờ để ghi nhận lại giá trị của RLO tại vị trí này
trong chương trình của vòng quét trước .Tại mỗi vòng quét lệnh kiểm tra cờ có giá trị
1 thì sẽ ghi 1 vào RLO .Trong trường hợp khác thì ghi 0 đồng thời chuyển nội dung
RLO vào lại cờ biến.
Vậy RLO có giá trị 1 trong 1 vòng quét khi có sườn lên trong RLO
Lệnh phát hiện sườn xuống
cú pháp FN (toán hạng)
Lệnh được sử dụng như một cờ biến để ghi nhận lại giá trị của RLO tại vị trí này
trong chương trình nhưng của vòng quét trước. Tại mỗi vòng quét lệnh sẽ kiểm tra
nếu biến cờ có giá trị 1 thì sẽ ghi 1 vào RLO. Trường hợp khác thì ghi 0 đồng thời
chuyển nội dung RLO vào lại cờ biến .Vậy RLO có giá trị 1 trong 1 vòng quét khi có
sườn xuống trong RLO.
b. Các lệnh có toán hạng
Lệnh đọc vào ACCU
Cú pháp L (toán hạng)
Nội dung cũ của ACCU1được chuyển vào ACCU2 .Nếu giá trị chuyển vào có kích
thước < từ kép thì được ghi theo thứ tự từ byte thấp đến byte cao của từ thấp . Nếu giá
trị chuyển vào có kích thước = từ kép thì ta chuyển về Byte
Lệnh chuyển nội dung của ACCU tới ô nhớ
Cú pháp T (toán hạng )
Lệnh không thay đổi nội dung ACCU2
c. Lệnh không có toán hạng
Lệnh đọc nội dung của thanh ghi trạng thái vào ACCU1
Cú pháp L STW
Lệnh ghi nội dung của ACCU1 vào thanh ghi trạng thái
Cú pháp T STW
Lệnh chuyển 9 bit của từ thấp của ACCU1 vào thanh ghi trạng thái
Lệnh chuyển nội dung của ACCU2 vào ACCU1
Cú pháp POP
83
Lệnh không làm thay đổi nội dung của ACCU2
Lệnh chuyển nội dung của ACCU1 vào ACCU2
Cú pháp PUSH
Lệnh không làm thay đổi nội dung của ACCU1
Lệnh đảo nội dung của hai thanh ghi ACCU1 và ACCU2
Cú pháp TAK
Lệnh không làm thay đổi nội dung của thanh ghi trạng thái
Lệnh đảo nội dung của hai byte của từ thấp trong ACCU1
Cú pháp CAW
Lệnh đảo nội dung các byte trong ACCU1
Cú pháp CAD
Lệnh đảo giá trị các bit trong từ thấp của ACCU1
Cú pháp INVI
Nội dung của ACCU2 không bị thay đổi
Lệnh đảo giá trị các bit của ACCU1
Cú pháp INVD
Nội dung của ACCU2 không bị thay đổi
d. Lệnh logic thực hiện trên thanh ghi ACCU
Lệnh thực hiện phép tính giữa các bit trong từ thấp của ACCU1, ACCU2
Cú pháp AW [<dữ liệu hằng >]
- Nếu lệnh không có toán hạng.Kết quả phép tính được ghi lại vào ACCU1
- Nếu lệnh có toán hạng thì toán hạng phải là một dữ liệu hằng có kích thước 16bit .
Kết quả phép tính được ghi lại vào ACCU1.
Lệnh thực hiện phép tính giữa các bit của hai thanh ghi ACCU1, ACCU2
Cú pháp AD [<dữ liệu hằng >]
- Nếu lệnh không có toán hạng Kết quả phép tính được ghi lại vào ACCU1.
- Nếu lệnh có toán hạng thì toán hạng phải là một dữ liệu hằng có kích thước 32bit.
Kết quả phép tính được ghi lại vào ACCU1.
Lệnh thực hiện phép tính giữa các bit trong từ thấp của ACCU1, ACCU2
Cú pháp OW [<dữ liệu hằng >]
- Nếu lệnh không có toán hạng .Kết quả được ghi lại vào ACCU1.
84
- Nếu lệnh có toán hạng thì toán hạng phải là một dữ liệu hằng có kích thước 16bit .
Kết quả phép tính được ghi lại vào ACCU1.
Lệnh thực hiện phép tính giữa các bit của hai thanh ghi ACCU1, ACCU2
Cú pháp OD [<dữ liệu hằng >]
- Nếu lệnh không có toán hạng.Kết quả phép tính được ghi lại vào ACCU1.
- Nếu lệnh có toán hạng thì toán hạng phải là một dữ liệu hằng có kích thước 32bit.
Kết quả được ghi lại vào ACCU1.
Lệnh thực hiện phép tính exclusive or 16bit
Cú pháp XOW [<dữ liệu hằng >]
- Nếu lệnh không có toán hạng :mà hai bit không cùng giá trị thì kết quả sẽ là 1 .
Toàn bộ bit kết quả được ghi lại vào ACCU1 .
- Nếu lệnh có toán hạng thì toán hạng phải là một dữ liệu hằng có kích thước 32bit .
Nếu hai bit không cùng giá trị thì kết quả sẽ là 1.Toàn bộ 16 bit kết quả được ghi lại
vào ACCU1.
Lệnh thực hiện phép tính exclusive or 32bit
Cú pháp XOD [<dữ liệu hằng >]
- Nếu lệnh không có toán hạng :mà hai bit không cùng giá trị thì bit kết quả sẽ là 1.
Toàn bộ 32bit kết quả được ghi lại vào ACCU1
- Nếu lệnh có toán hạng thì toán hạng phải là một dữ liệu hằng có kích thước
32bit .Nếu hai bit không cùng giá trị thì kết quả sẽ là 1. Toàn bộ 32bit kết quả được
ghi lại vào ACCU1.
e. Lệnh tăng giảm nội dung của thang ghi ACCU
Lệnh tăng nội dung của thanh ghi ACCU1
Cú pháp INC (toán hạng )
Toán hạng là số nguyên 8 bit. Lệnh thực hiện phép cộng giữa byte thấp của từ thấp
trong ACCU1 với toán hạng .Kết quả được ghi lại vào từ thấp của ACCU1.
Lệnh giảm nội dung của thanh ghi ACCU1
Cú pháp DEC (toán hạng )
Toán hạng là số nguyên 8 bit .Lệnh thực hiện phép trừ của từ thấp trong ACCU1
cho toán hạng. Kết quả được ghi lại vào byte thấp của từ thấp trong ACCU1
IV.2.3 Nhóm lệnh so sánh
85
Thuộc nhóm lệnh không toán hạng là các lệnh thực hiện không điều kiện. Cơ chế
thực hiện :lệnh so sánh được thực hiện trong hai thanh ghi ACCU1và ACCU2 kết quả
của phép so sánh được ghi trong bit RLO của từ trạng thái STW
ACCU2 Toán tử so sánh
= = < > ,> ,<, >=, <=
ACCU1
Nếu RLO = 1 phép so sánh đúng. RLO = 0 phép so sánh sai
Các toán hạng trong ACCU1 và ACCU2 phải có cùng kiểu biểu diễn
Cú pháp hệ lệnh so sánh trong ngôn ngữ STL:
Lệnh so sánh bằng nhau
Cú pháp Số nguyên INT Số nguyên DINT Số thực R
= = I D R
Lệnh so sánh không bằng nhau
Cú pháp Số nguyên INT Số nguyên DINT Số thực R
< > I D R
Lệnh so sánh lớn hơn
Cú pháp Số nguyên INT Số nguyên DINT Số thực R
> I D R
Lệnh so sánh nhỏ hơn
Cú pháp Số nguyên INT Số nguyên DINT Số thực R
< I D R
Lệnh so sánh lớn hơn hoặc bằng
Cú pháp Số nguyên INT Số nguyên DINT Số thực R
>= I D R
Lệnh so sánh nhỏ hơn hoặc bằng
Cú pháp Số nguyên INT Số nguyên DINT Số thực R
=< I D R
Hai bit trạng thái CC1và CC0
CC1 CC0 ý nghĩa
0 0 ACCU1=ACCU2
0 1 ACCU2>ACCU1
1 0 ACCU2<ACCU1
86
Cú pháp hệ lệnh so sánh trong ngôn ngữ LAD:
Tên lệnh STL LAD Tên lệnh STL LAD
== <
<> >=
> <=
Lưu ý: đối với các kiểu dữ liệu khác nhau, muốn so sánh thì phải chọn đúng kiểu dữ
liệu so sánh, không được chọn khác kiểu vì chương trình sẽ báo lỗi hoặc thực hiện
không chính xác với bài toán đặt ra.
IV.2.4 Lệnh chuyển đổi kiểu dữ liệu
Cú pháp hệ lệnh sử dụng trong ngôn ngữ STL:
Lệnh chuyển đổi BCD thành số nguyên
số nguyên 16 bit số nguyên 32 bit
Cú pháp BTI BTD
Lệnh không có toán hạng.Kết quả được cất vào ACCU1 .Nội dung của ACCU2
không bị thay đổi .Thanh ghi trạng thái không bị thay đổi nội dung
Lệnh chuyển đổi số nguyên thành BCD
số nguyên 16 bit số nguyên 32 bit
Cú pháp IBT DBT
Lệnh không có toán hạng chữ số. Kết quả được cất vào ACCU1 Nội dung của
ACCU2 không bị thay đổi .
87
Lệnh chuyển đổi số nguyên 16 bit thành số nguyên 32 bit
Cú pháp ITD
Lệnh không có toán hạng.Kết quả được cất vào ACCU1 .Nội dung của ACCU2
không bị thay đổi .Thanh ghi trạng thái không bị thay đổi nội dung
Lệnh chuyển đổi số nguyên 32 bit thành số thực
Cú pháp DTR
Lệnh không có toán hạng. Kết quả được cất vào ACCU1 .Nội dung của ACCU2
không bị thay đổi .Thanh ghi trạng thái không bị thay đổi nội dung
Lệnh chuyển đổi số thực thành số nguyên
Các lệnh này chuyển kiểu biểu diễn của một số thực dấu phẩy động trong ACCU1
thành một số nguyên biểu diễn kiểu từ kép
gần nhất nhỏ nhất lớn nhất
Cú pháp RND RND+ RND -
RND:Lệnh chuyển đổi số thực thành số nguyên gần nhất.Nếu số thực đã cho nằm
giữa hai số nguyên thì lấy số chẵn
RND+ : Lệnh chuyển đổi số thực thành số nguyên nhưng không nhỏ hơn số thực
đã cho
RND - : Lệnh chuyển đổi số thực thành số nguyên nhưng không lớn hơn số thực
đã cho. Kết quả của phép tính được cất vào ACCU1 . Nội dung của ACCU2 không bị
thay đổi
Lệnh lấy phần nguyên
Cú pháp TRUNC
Lệnh không có toán hạng và thực hiện việc lấy phần nguyên của số thực dấu phẩy
động trong ACCU1 Kết quả được cất vào ACCU1 Nội dung của ACCU2 không bị thay
đổi.
Cú pháp hệ lệnh sử dụng trong ngôn ngữ LAD:
Tên lệnh STL LAD Tên lệnh STL LAD
BTI DIR
88
IBT ITD
TRUNC DTR
IV.2.5 Các lệnh điều khiển chương trình
a. Lệnh kết thúc chương trình
- Lệnh kết thúc chương trình vô điều kiện
Cú pháp BEU
Lệnh không có toán hạng
- Lệnh kết thúc chương trình có điều kiện
Cú pháp BEC
Lệnh không có toán hạng và thực hiện việc kết thúc chương trình khi RLO có giá trị 1
b. Lệnh rẽ nhánh theo bit trạng thái
- Rẽ nhánh khi BR =1
Cú pháp JBI <nhãn>
- Rẽ nhánh khi BR =0
Cú pháp JNBI <nhãn>
- Rẽ nhánh khi RLO = 1
Cú pháp JC <nhãn>
- Rẽ nhánh khi RLO = 0
Cú pháp JCN <nhãn>
- Rẽ nhánh khi CC1 = 0 và CC0 =1
Cú pháp JM <nhãn>
Được sử dụng để rẽ nhánh nếu phép tính trước nó có kết quả âm
- Rẽ nhánh khi CC1 = 1 và CC0 =0
Cú pháp JP <nhãn>
Được sử dụng để rẽ nhánh nếu phép tính trước nó có kết quả dương
- Rẽ nhánh khi CC1 = CC0 =0
89
Cú pháp JZ <nhãn>
Được sử dụng để rẽ nhánh nếu phép tính trước nó có kết quả là 0
- Rẽ nhánh khi CC1 CC0
Cú pháp JN<nhãn>
Được sử dụng để rẽ nhánh nếu phép tính trước nó có kết quả khác 0
- Rẽ nhánh khi CC1 = CC0 =0 hoặc CC1 = 0 và CC0 =1
Cú pháp JMZ <nhãn>
Được sử dụng để rẽ nhánh nếu phép tính trước nó có kết quả là một số không dương
- Rẽ nhánh khi CC1 = CC0 =0 hoặc CC1 = 1 và CC0 =0
Cú pháp JPZ <nhãn>
Được sử dụng để rẽ nhánh nếu phép tính trước nó có kết quả là một số không âm
- Rẽ nhánh vô điều kiện
Cú pháp JU <nhãn>
- Lệnh rẽ nhánh theo danh mục
Cú pháp JL <nhãn>
Lệnh rẽ nhánh tuỳ theo nội dung của ACCU1 , số nhánh rẽ nhiều nhất là 255
c. Lệnh xoay vòng (LOOP)
cú pháp LOOP <nhãn>
Khi gặp lệnh này CPU sẽ tự giảm nội dung của từ thấp trong thanh ghi ACCU1 đi 1
đơn vị để kiểm tra xem nó có bằng 0hay không, nếu khác 0 thì CPU sẽ nhảy đến
chương trình được đánh dấu bởi nhãn.
90
IV.3 Bộ định thời – Timer
IV.3.1 Định nghĩa
Bộ thời gian Timer là bộ tạo thời gian trễ T mong muốn giữa tín hiệu logic ngõ vào và tín
hiệu logic ngõ ra. S7 300 có 5 loại timer khác nhau. Tất cả 5 loại Timer này cùng bắt đầu tạo thời
gian trễ tín hiệu kể từ thời điểm kích của tín hiệu đầu vào, tức là khi tín hiệu đầu vào chuyển trạng
thái, được gọi là thời điểm timer được kích. Thời gian trễ T mong muốn được khai báo với timer
bằng một word 16 bit bao gồm 2 thành phần:
- Độ phân giải: timer của S7 300 có 4 chế độ phân giải: 10ms, 100ms, 1s và 10s.
- Một số nguyên BCD trong khoảng 0 ÷ 999 được gọi là PV (giá trị đặt trước)
Thời gian trễ mong muốn = PV * Độ phân giải
Độ phân giải của Timer S7-300 định nghĩa như sau:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Thanh ghi 16bit dùng cho việc đặt thời gian trễ cho Timer.
Trong đó: bit 14 và 15 không sử dụng
bit 13 và 12 mô tả độ phân giải: 13 12 độ phân giải
0 0 10 ms
0 1 100 ms
1 0 1 s
1 1 10 s
từ bit 11 trở xuống được mô tả dạng mã BCD, do đó, giá trị đặt của Timer nằm
trong khoảng từ 0-999.
Ngay tại thời điểm kích timer, giá trị PV được chuyển vào thanh ghi 16 bit của T_word (gọi
là thanh ghi CV, viết tắt current value, giá trị tức thời). Timer sẽ ghi nhớ khoảng thời gian trôi qua
kể từ khi được kích bằng cách giảm dần một cách tương ứng nội dung thanh ghi CV. Nếu nội
dung thanh ghi trở về bằng 0 thì timer đã đạt được thời gian trễ mong muốn T và điều này sẽ
được báo ra ngoài bằng cách đổi trạng thái tín hiệu ngõ ra.
Một timer được đặt tên là Tx, trong đó x là số hiệu của timer (0 ≤ x ≤ 127). Ký hiệu Tx cũng
đồng thời là địa chỉ hình thức của thanh ghi CV (T- word) và của đầu ra T-bit của timer đó. Tuy
chúng có cùng địa chỉ hình thức, song T-word và T-bit vẫn được phân biệt với nhau nhờ kiểu
lệnh sử dụng với toán hạng Tx .Khi dùng lệnh làm việc với từ, Tx được hiểu là địa chỉ của
Tword, ngược lại khi sử dụng lệnh làm việc với tiếp điểm Tx sẽ được hiểu là địa chỉ của T-bit.
91
Một timer đang trong chế độ làm việc (sau khi được kích) có thể được đưa về chế độ chờ khởi
động ban đầu, tức là chờ sườn lên của tín hiệu đầu vào. Công việc này gọi là reset timer. Tín hiệu
reset timer được gọi là tín hiệu xoá và khi tín hiệu xoá có giá trị bằng 1 timer sẽ không làm việc.
Tại thời điểm xuất hiện sườn lên của tín hiệu xoá, T_word và T-bit được xoá về 0, tức là thanh
ghi CV được đặt về 0 và tín hiệu đầu ra có trạng thái 0.
IV.3.2 Khai báo sử dụng
Việc khai báo sử dụng Timer trong STL bao gồm các bước:
- Bước 1: Khai báo tín hiệu enable nếu muốn sử dụng tín hiệu chủ động kích.
- Bước 2: Khai báo tín hiệu đầu vào
- Bước 3: Khai báo thời gian trễ mong muốn
- Bước 4: Khai báo loại Timer được sử dụng ( SD,SS,SP,SE,SF).
- Bước 5: Khai báo tín hiệu xoá Timer nếu muốn sử dụng chế độ reset chủ động.
Trong tất cả 5 bước trên,các bước 2,3,4 là bắt buộc.
- Khai báo tín hiệu enable(chủ động kích)
Cú pháp A <địa chỉ bit>
FR <tên timer>
- Khai báo thời gian trễ mong muốn
Cú pháp L <hằng số >
Thời gian ở đây được khai báo dưới dạng hằng số dưới 2 dạng. Dạng số và dạng
thời gian. Dạng thời gian trực tiếp: ví dụ S5T#6M5S; Dạng số: ví dụ W#16#2111
- Khai báo loại Timer
Trễ theo sườn lên không có nhớ
Cú pháp SD <tên Timer >
Trễ theo sườn lên có nhớ
Cú pháp SS <tên Timer >
Timer tạo xung không có nhớ (Pulse timer)
Cú pháp SP <tên Timer >
Timer tạo xung có nhớ (Pulse timer)
Cú pháp SE <tên Timer >
Timer trễ theo sườn xuống (off ondelay timer)
Cú pháp SF <tên Timer >
92
- Khai báo tín hiệu xoá (reset)
Cú pháp A <địa chỉ bit>
R <tên timer>
- Đọc nội dung thanh ghi T-WORD
+ Đọc số đếm tức thời
Cú pháp L <tên timer>
+ Đọc thời gian trễ tức thời
Cú pháp LC <tên timer>
Khai báo trong LAD sẽ có các dạng khác nhau đối với từng loại Timer.
STT STL LAD LAD
1 SD
2 SS
3 SP
4 SE
5 SF
93
Ví dụ về sử dụng Timer
LAD:
STL:
Tóm tắt các giá trị về thời gian của các loại Timer:
ST
T
Loại Timer Đáp ứng đầu ra
1 S_ODT
94
ST
T
Loại Timer Đáp ứng đầu ra
2 S_ODTS
3 S_OFFDT
4 S_PULSE
5 S_PEXT
95
IV.4 Bộ đếm – Counter
IV.4.1 Định nghĩa
- Counter là bộ đếm thực hiện chức năng đếm sườn xung của các tín hiệu đầu vào.
S7-300 có tối đa 256 counter (tuỳ loại CPU), ký hiệu Cx, trong đó x là số nguyên trong
khoảng từ 0 đến 255. Những bộ đếm của S7-300 đều có thể đồng thời đếm tiến theo sườn lên
của một tín hiệu vào thứ nhất, được ký hiệu là CU (count up) và đếm tiến theo sườn lên của tín
hiệu vào thứ hai, ký hiệu CD (count down).
Thông thường bộ đếm chỉ các sườn lên của tín hiệu CU và CD, song cũng có thể được mở
rộng để đếm cả mức tín hiệu của chúng bằng cách sử dụng thêm tín hiệu enable. Nếu có tín hiệu
enable, bộ đếm sẽ đếm tiến khi xuất hiện sườn lên của tín hiệu enable đống thời tại thời điểm CU
có mức tín hiệu 1. Tương tự bộ đếm sẽ đếm lùi khi có sườn lên của tín hiệu enable và tại thời
điểm CD có mức tín hiệu 1. Số sườn xung đếm được ghi vào thanh ghi 2 byte của bộ đếm, gọi là
thanh ghi C word. Nội dung của C-Word được gọi là giá trị đếm tức thời của bộ đếm và ký hiệu
bằng CV (current value). Bộ đếm báo trạng thái của C-Word ra ngoài thông qua chân C-bit của
nó. Nếu CV ≠ 0, C-Bit có giá trị 1. Ngược lại khi CV = 0 C-bit nhận giá trị 0. CV luôn là 1 giá trị
không âm. Bộ đếm sẽ không đếm lùi khi CV = 0. Khác với timer, giá trị đặt trước PV của bộ
đếm chỉ được chuyển vào C-Word tại thời điểm xuất hiện sườn lên của tín hiệu đặt (set S). Bộ
đếm có thể được xoá chủ động bằng tín hiệu xóa (reset). Khi bộ đếm được xóa, cả C-Word và
C-bit đều nhận giá trị 0.
IV.4.2 Khai báo và sử dụng
Việc khai báo Counter gồm 5 bước:
- Bước 1: Khai báo tín hiệu enable nếu muốn sử dụng tín hiệu chủ động kích đếm.
- Bước 2: Khai báo tín hiệu đầu vào CU được đếm lên.
- Bước 3: Khai báo tín hiệu đầu vào CD được đếm xuông.
- Bước 4: Khai báo tín hiệu đặt set và giá trị đặt trước PV.
- Bước 5: Khai báo tín hiệu xóa reset
Khai báo trong ngôn ngữ STL:
- Khai báo tín hiệu kích đếm
Cú pháp A <địa chỉ bit>
FR <tên counter>
96
- Khai báo tín hiệu đếm tiến theo sườn lên
Cú pháp A <địa chỉ bit>
CU <tên counter >
- Khai báo tín hiệu đếm lùi theo sườn lên
Cú pháp A <địa chỉ bit>
CD <tên counter >
- Khai báo tín hiệu đặt trước
Cú pháp A <địa chỉ bit>
L C# <hằng số >
S <tên counter >
- Khai báo tín hiệu xoá (reset)
Cú pháp A <địa chỉ bit>
R <tên counter >
- Đọc nội dung thanh ghi T-WORD
Đọc số đếm tức thời dạng binary
Cú pháp L <tên counter >
Đọc thời gian trễ tức thời dạng BCD
Cú pháp LC <tên counter >
Khai báo trong ngôn ngữ LAD
STT STL LAD LAD
Đếm tiến CU
Đếm lùi CD
97
STT STL LAD LAD
Đếm tiến lùi
Ví dụ về sử dụng bộ đếm:
LAD: STL :
98
IV.5 Phương pháp lập trình
IV.5.1 Lập trình tuyến tính
Kỹ thuật lập trình tuyến tính là phương pháp lập trình mà toàn bộ chương trình ứng
dụng sẽ chỉ nằm trong một khối OB1. Kỹ thuật này có ưu điểm là gọn, rất phù hợp với
những bài toán điều khiển đơn giản, ít nhiệm vụ.
Do toàn bộ khối chương trình điều khiển chỉ nằm trong khối OB1 nên khối OB1 sẽ
gần như là được thường trực trong vùng nhớ Word memory, trừ trường hợp khi hệ
thống phải xử lý các tín hiệu báo ngắt. Ngoài khối OB1, trong vùng Word memory còn
có miền nhớ địa phương (local block) cấp phát cho OB1 và những khối DB được OB1
sử dụng. Hình dưới mô tả quy trình thực hiện chương trình điều khiển tuyến tính.
Hình 4.3 Sơ đồ khối mô tả quy trình điều khiển tuyến tính
Local block của OB1
Khi thực hiện khối OB1, hệ điều hành của luôn cấp của một Local block có kích
thước mặc định là 20 bytes trong Work memory để OB1 có thể lấy những dữ liệu từ hệ
điều hành. Những dữ liệu này gồm:
Tên hình thức Kiểu Giá trị và ý nghĩa
OB1_EV_CLASS Byte Bits 0-3=1(Coming event). Bits 4-
7=1(Event class 1)
OB1_SCAN_1 Byte 1=vòng quét đầu, 3=từ vòng quét thứ 2
OB1_PRIORITY Byte Mức ưu tiên 1(Mức ưu tiên thứ nhất)
OB1_OB_NUMBR Byte 1=Chỉ số của khối OB
99
Hệ điều hành
Chuyển OB1 từ Load memory vào Word memory và cấp phát local block cho nó.
Xoá OB1 và giải phóng local block
trong Word memory.
Thực hiện OB1 trong Word memory
System memory
Share DB
Instance DB
OB1_RESERVED_1 Byte Dự trữ (của hệ điều hành)
OB1_RESERVED_2 Byte Dự trữ (của hệ điều hành)
OB1_PREV_CYCLE Int Thời gian vòng quét trước (miliseconds)
OB1_MIN_ CYCLE Int Thời gian vòng quét ngắn nhất đã có
(miliseconds)
OB1_MAX_ CYCLE Int Thời gian vòng quét lớn nhất đã có
(miliseconds)
OB1_DATE_TIME Date_And
_Time
Thời điểm OB1 bắt đầu được thực hiện
Mặc dù kích thước chỉ là 20 bytes mặc định nhưng người sử dụng có thể mở rộng
Local block để sử dụng thêm các biến nhớ cho chương trình (hình dưới). Tuy nhiên
phải để ý rằng do Local block được giải phóng ở cuối mỗi vòng quét và được cấp lại ở
vòng quét sau nên các giá trị có trong Local block của vòng quét trước cũng bị mất khi
bắt đầu vòng quét mới. Do đó tốt nhất chỉ nên sử dụng Local block cho việc lưu giữ
biến nháp tạm thời trong tính toán của một vòng quét.
IV.5.2 Lập trình có cấu trúc
a, Cơ sở lý thuyết
Lập trình có cấu trúc (structure programming) là kỹ thuật cài đặt thuật toán điều
khiển bằng cách chia nhỏ thành các khối chương trình con FC hay FB với mỗi khối
thực hiện một nhiệm vụ cụ thể của bài toán điều khiển chung và toàn bộ các khối
chương trình này lại được quản lý một cách thống nhất bởi khối OB1. Trong OB1 có
các lệnh gọi những khối chương trình con theo thứ tự phù hợp với bài toán điều khiển
đặt ra .
Hoàn toàn tương tự, một nhiệm vụ điều khiển con có thể còn được chia nhỏ thành
nhiều nhiệm vụ nhỏ và cụ thể hơn nữa, do đó một khối chương trình con cũng có thể
được gọi từ một khối chương trình con khác. Duy có điều cấm kỵ ta cần phải tránh là
không bao giờ một khối chương trình con lại gọi đến chính nó. Ngoài ra do có sự hạn
chế về ngăn xếp của các module CPU nên không được tổ chức chương trình con gọi
lồng nhau quá số lần mà module CPU được sử dụng cho phép.
Để đơn giản trong trình bày, khi một khối chương trình con này gọi một khối
chương trình con khác, ta sẽ ký hiệu khối chứa lệnh gọi là khối mẹ và khối được gọi là
100
khối con. Hình dưới đây mô tả quy trình thực hiện việc gọi một khối con FC10 từ khối
mẹ OB1.
Hình 4.4 Sơ đồ khối mô tả lập trình điều khiển có cấu trúc
Giữa khối mẹ và khối con có sự liên kết thể hiện qua việc trao đổi các giá trị. Khi
gọi khối con , khối mẹ cần cho những sơ kiện thông qua các tham trị đầu vào để khối
con thực hiện nhiệm vụ. Sau khi thực hiện xong nhiệm vụ, khối con phải trả lại cho
khối mẹ kết quả bằng những tham trị đầu ra. Hệ điều hành của CPU tổ chức việc
truyền tham trị thông qua local block của từng khối con.
Như vậy, khi thực hiện lệnh gọi khối con, hệ điều hành sẽ :
- Chuyển khối con được gọi từ vùng Load memory vào vùng Work memory.
- Cấp phát cho khối con một phần bộ nhớ trong Work memory để làm local block.
Cấu trúc local block được qui định khi soạn thảo các khối.
- Truyền các tham trị từ khối mẹ cho biến hình thức IN, IN-OUT của local block.
- Sau khi khối con thực hiện xong nhiệm vụ và ghi kết quả dưới dạng tham trị đầu ra
cho biến OUT,IN-OUT của local block , hệ điều hành sẽ chuyển các tham trị này
cho khối mẹ và giải phóng khối con cùng local block ra khỏi vùng Work memory
b, Khai báo Local Block
Local block của khối con được cchia thành hai phần:
- Phần các biến hình thức để khối con nhận và truyền tham trị với khối mẹ. Biến
hình thức trong local block của FC có ba loại cho trong bảng 4.1:
Loại biến hình thức ý nghĩa
IN Biến hình thức nhận tham trị từ khối mẹ làm sơ kiện cho
101
Chuyển FC10 vào Work memory, cấp phát local block và gán tham trị từ OB1
FC10
BE
OB1
callFC10
Trả tham trị về OB1. Xoá FC10 và local block trong Work memory
chương trình trong khối con
OUT Biến hình thức truyền tham trị từ khối con về khối mẹ
IN- OUT Biến hình thức vừa có khả năng nhận vừa có khả năng
truyền tham trị giữa khối con với khối mẹ.
Bảng 4.1Các loại biến hình thức trong Local Block
- Phần chứa các biến tạm thời được ký hiệu là TEMP (chữ viết tắt của temporary)
chứa các giá trị tính toán tức thời. Do local block sẽ được giải phóng khi kết thúc
chương trình, giá trị các biến tạm thời này cũng sẽ bị mất theo ngay sau khi chương
trình trong khối con được thực hiện xong.
Việc khai báo local block đồng nghĩa với việc đặt tên biến, định nghĩa loại biến
(biến hình thức hay biến tạm thời) và kiểu dữ liệu (nguyên, thực,ký tự…)cho từng
biến,trong đó tên biến là những dãy ký tự hoặc số và không thuộc nhóm ký tự khoá (đã
được dùng bởi hệ điều hành).
Chương trình truy nhập local block thông qua các tên biến dưới dạng toán hạng của
lệnh theo cấu trúc:
#< tên biến >
Ví dụ:
L # receive // Đọc nội dung của ô nhớ có tên là receive trong local block vào ACCU1
T # transit // Chuyển ACCU1 tới ô nhớ có tên là transit trong local block
Chú ý: Một điều cần phải được đặc biệt chú ý là bắt đầu từ miền các biến tạm thời
TEMP,địa chỉ được đánh lại từ đầu. Miền biến hình thức không được cấp ô nhớ mà chỉ
có con trỏ địa chỉ.Do đó nếu trong trương trình,toán hạng của những lệnh truy nhập ô
nhớ của local block có cấu trúc:
L#<địa chỉ>
Thì đó sẽ là ô nhớ thuộc miền các biến TEMP. Những kiểu dữ liệu hợp lệ cho tất cả
các loại biến (kế cả biến hình thức và biến tạm thời) được tổng kết trong bảng 4.2:
Kiểu dữ liệu Kích thước
(bit)
Tham trị thích hợp
BOOL 1 Kiểu biến logic vơí hai giá trị 0 hoặc 1.Tham trị có
thể là một giá trị logic (TRUE/FALSE) hoặc là nội
dung một bit
102
Kiểu dữ liệu Kích thước
(bit)
Tham trị thích hợp
BYTE 8 Tham trị phải là nội dung của một byte
WORD 16 Tham trị phải là nội dung của một từ (2 byte)
DWORD 32 Tham trị phải là nội dung của một từ kép (4 byte )
CHAR 8 Tham trị được truyền có thể là một mã ASCII
hoặc nội dung của một byte
INT 16 Tham trị được truyền vào có thể là nội dung của
một từ(2 byte) hoặc là một số nguyên trong
khoảng -32768 32767
DINT 32 Tham trị được truyền vào có thể là nội dung của
một từ kép (4 byte) hoặc là một số nguyên trong
khoảng -231231 –1
REAL 32 Tham trị được truyền vào có thể là nội dung của
một từ kép (4 byte) hoặc là một số thực dấu phảy
động.Ví dụ:3.1416.
TIME 32 Tham trị được truyền vào có thể là nội dung của
một từ kép hoặc là một số đo khoảng thời gian
dạng T# ngày D_giờH_phútM_giâyS_mili
giâyMS
DATE 32 Tham trị được truyền vào có thể là nội dung của
một từ kép (4 byte) hoặclà một giá trị ngày tháng
dạng D#năm-tháng-ngày
TOD 32 Tham trị được truyền vào có thể là nội dung của
một từ kép (4 byte) hoặc là một giá trị thời gian
dạng TOD# ngày D_giờH_phútM_giâyS_mili
giâyMS
S5TIME 32 Tham trị được truyền vào có thể là nội dung của
một từ kép (4 byte) hoặc là một giá trị thời gian
dạng S5T# ngày D_giờH_phútM_giâyS_mili
giâyMS
103
Kiểu dữ liệu Kích thước
(bit)
Tham trị thích hợp
DT
Date_And_Time
64 Tham trị được truyền vào có thể là nội dung của ô
nhớ có kiểu Date_And_Time(DT) hoặc là một giá
trị dạng DT # năm-tháng-ngày-giờ:phút:giây:mili
giây
ANY 80 Đây là kiểu biến tổng quát, thay thế được cho các
kiểu ở trên.Ngoài ra tham trị của kiểu biến này
còn có thể là thanh ghi CV,T_Bit,C_Bit,tên của
Timer, tên của Counter; tên các logic block như
FB10, FC2… tên biến hình thức
Bảng 4.2 Các kiểu dữ liệu hợp lệ cho biến
c, Gọi khối FC và thủ tục truyền tham trị
Lệnh gọi một khối con và truyền tham trị cho nó từ khối mẹ có dạng
Cú pháp CALL FCx
Trong đó FCx là tên khối con được gọi.
Ngay khi gặp lệnh gọi một khối con,chương trình soạn thảo Step7 sẽ căn cứ vào cấu
trúc của local block,cụ thể là những biến hình thức của khối con(biến
IN,OUT,IN_OUT), mà cho hiện tại những biến này chờ người sử dụng khai báo tham
trị.
Kiểu tham trị truyền từ khối con thông qua biến hình thức IN hay IN_OUT phụ
thuộc vào kiểu đã gán.Cụ thể là :
- Nếu biến được khai báo một trong các kiểu BOOL, CHAR, INT, DINT,
TIME, BOOL, DATE, TOD, S5TIME thì tham trị truyền có thể là một giá trị cụ thể
hoặc là nội dung của một ô nhớ có kích thước tương ứng.
- Nếu biến được khai báo theo kiểu BYTE, WORD, DWORD, DINT thì phải là
nội dung của ô nhớ có kích thước phù hợp.
Riêng đối với tham trị được khối con trả về cho khối mẹ qua biến hình thức OUT
hay IN-OUT thì luôn phải là một ô nhớ có kích thước cùng với biến.
d, FB và thủ tục truyền tham trị
104
Nhược điểm của của kiểu khối FC là nội dung các biến tạm thời theo TEMP không
được lưu giữ lại cho những vòng quét sau. Điều này bắt buộc những khối FC sử dụng
biến kiểu TEMP trong local block phảI được thực hiện xong trong một vòng quét và
do đó hạn chế miền sử dụng của chúng.
Khắc phục nhược điểm trên, S7-300/400 cung cấp một loại khối có tính năng tương
tự như khối FC nhưng lại có khả năng lưu giữ lại được nội dung các biến tạm thời cho
các vòng quét kế tiếp, được gọi là khối hàm FB. Loại biến tạm thời có nội dung được
lưu giữ này có tên là STAT (viết tắt của static).
Phương thức lưu giữ lại nội dung các biến loại STAT được hệ điều hành thực hiện
nhờ một khối dữ liệu như sau:
Hình 4.5 Mô tả phương thức lưu trữ nội dung
- Khi thực hiện lệnh gọi, hệ điều hành chuyển khối FB được gọi vào Work
memory cấp phát cho nó trong Work memory một local block như yêu cầu. Ghi các
tham trị từ khối mẹ vào các biến hình thức loại IN, IN-OUT, và nội dung các ô nhớ
tương ứng trong DB kèm theo biến loại STAT trong local block .
- Khi chương trình trong khối FB kết thúc, hệ điều hành chuyển nội dung của
biến hình thức loại OUT, IN-OUT về cho khối mẹ và ghi lại các giá trị biến thộc loại
105
DB2
OB1
call FB1,DB2
Chuyển FB1 vào Work memory, cấp phát local block
gắn tham trị cho biến hình thức từ OB1 và cho biến loại
STAT từ DB2
DB22
Trả tham trị về OB1 ghi lại biến loại STAT vào DB2.
Xoá FB1 và local block của nó khỏi Work memory
FB1
EMBED
Equation
.3
BE
STAT trong local block vào khối dữ liệukèm theo. Sau đó giảit phóng local block cùng
khối FB ra khỏi Work memory.
Về cơ bản local block của khối FB cũng giống như của khối FC, nhưng có thêm
biến loại STAT. Các loại biến của khối FB cho trong bảng 4.3:
Loại biến ý nghĩa
IN Biến hình thức sử dụng để nhận tham trị từ khối mẹ làm sơ kiện cho
chương trình trong khối con
OUT Biến hình thức dùng để trả tham trị từ khối con về khối mẹ
IN-OUT Biến hình thức, loại biến này vừa có khả năng nhận vừa có khả năng
trả tham trị cho khối mẹ.
STAT Nội dung của biến loại này có khả năng lưu giữ lại khi kết thúc
chương trình trong FB
TEMP Biến tạm thời.Nội dung sẽ bị mất khi chương trình trong FB kết thúc
Bảng 4.3Các loại biến của khối FB
Việc khai báo local block cho FB cũng hoàn toàn tương tự như cho FC gồm đặt tên
biến, xác định, xác định loại biến (biến hình thức hay,STAT hay TEMP) và kiểu dữ
liệu (nguyên, thực, ký tự…) cho từng biến.
Tên biến phải là những dãy ký tự hoặc số và không thuộc nhóm ký tự khoá(đã được
dùng bởi hệ điều hành).
Thủ tục gọi khối FB và truyền tham trị:
Khác với khối FC, khối hàm FB bao giờ cũng làm việc với một khối dữ liệu DB dùng
để lưu giữ nội dung các biến kiểu STAT local block. Khối DB này có tên khối dữ liệu
là Instance . Lý do là khi ta thực hiện lệnh gọi khối hàm FB, hệ điều hành cũng mở
luôn khối dữ liệu này bằng lệnh “OPN DI”.
Như vậy kèm với lệnh gọi khối FB ta phải chỉ thị luôn cả luôn cả tên khối dữ
liệu DB tương ứng. Lệnh gọi khối hàm FB có cấu trúc như sau:
Cú pháp CALL FBx , DBy
Trong đó FBx là tên khối hàm được gọi, và DBy là tên khối dữ liệu kèm theo. Khối dữ
liệu DBy phải có cấu trúc phù hợp với local block của FBx đã được soạn thảo.
Phần mềm Step7 hỗ trợ người soạn thảo việc tạo lập khối dữ liệu DB có cấu
trúc phù hợp với local block của khối hàm Fb được gọi.Ngay sau khi viết lệnh gọi một
106
khối hàm FB và nếu khối DB kèm theo chưa được soạn thảo trước , Step7 sẽ sẽ tạo lập
một DB mới có cấu trúc phù hợp với local block của khối hàm FB đó.
Sử dụng các khối OB
Các khối OB có thể được xếp theo loại công dụng thành 3 nhóm:
- Nhóm các khối OB chứa chương trình ứng dụng xử lý ngắt,
- Nhóm các khối OB chứa chương trình khởi động,
- Nhóm các khối OB xử lý lỗi trong hệ thống.
Cũng như FC, FB, khối OB là khối chứa chương trình, do đó cũng là một logic
block. Điểm khác biệt cơ bản giữa OB và các khối khác thuộc logic block là OB không
được gọi chủ động để thực hiện (ví dụ bằng lệnh CALL) mà bị động bởi các tín hiệu
ngắt. Khái niệm “bọi bị động” được hiểu là vị trí cũng như thời điểm phát lệnh gọi
không được lập trình từ trước mà hoàn toàn mang tính ngẫu nhiên. Chương trình trong
các khối OB này cũng có thể có các lệnh gọi khối FC hoặc khối FB nhưng tất nhiên
không thể gọi một khối OB khác.
Mỗi khối OB được gọi bằng một loại tín hiệu ngắt. Vậy nếu xảy ra hiện tượng
xuất hiện cùng một lúc nhiều tín hiệu ngắt thì sao? Trong trường hợp như vậy, khối
OB nào có thứ tự ưu tiên cao hơn sẽ được xử lý trước và chương trình trong khối OB
có thứ tự ưu tiên thấp hơn phải chờ cho tới khi tất cả các khối có ưu tiên cao hơn được
xử lý xong mới đến lượt được thực hiện. Khối OB1 là khối có mức ưu tiên thấp nhất
và do đó mọi tín hiệu ngắt đều ngắt được quá trình thực hiện chương trình của khối
OB1.
107
IV.6 Sử dụng ngắt trong lập trình
IV.6.1 Ngăn xếp
Ngăn xếp I (I - Stack)Do cũng được gọi (bị động bằng tín hiệu ngắt) nên giống như
việc xử lý lệnh CALL, hệ điều hành cần phải cất giữ vị trí quay về, các dữ liệu càn
thiết để tiếp tục công việc trong khối mẹ. Ngăn xếp cất những dữ liệu này có tên là I-
Stack (hình 4.6). Độ sâu của ngăn xếp I quyết định số các khối chương trình xử lý ngắt
(OB) được lồng nhau và độ sâu này phụ thuộc vào chủng loại của từng module CPU.
Tín hiệu ngắt gọi
khối OB35
Hình 4.4 Ngăn xếp
IV.6.2 Chương trình ứng dụng xử lý ngắt
Chương trình ứng dụng xử lý ngắt được hiểu là loại chương trình viết cho các
khối OB và được gọi bởi các tín hiệu báo ngắt thuộc loại: được phát ra đều đặn cách
đều nhau một khoảng thời gian định trước; được phát ra tại một điểm thời gian định
trước; được phát ra từ các modul (ngắt cứng).
Ngắt tuần tự theo thời gian (OB30 OB38)
Ngay khi nhận thấy trong chương trình có một trong các khối OB30 OB38,
hệ thống sẽ tự động tích cực chế độ phát tín hiệu báo ngắt gọi các khối này với khoảng
108
Nội dung thanh ghi ACCU1,ACCU2
Nội dung thanh ghi AR1,AR2
Nội dung thanh ghi DI,DB
Con trỏ chỉ vào L-Stack chứa nội dung local block của khối mẹ
Nội dung thanh ghi trạng thái
Tên khối mẹOB35
OB1
I- Stack
thời gian cách đều nhau. Giá trị mặc định cho chu kỳ phát tín hiệu báo ngắt này là
100ms. Nói cách khác,cứ 100ms thì các khối OB này được gọi và thực hiện một lần.
Tổng hợp thì tất cả các khối trong khoảng OB30 OB38 đều thuộc nhóm khối
chương trình xử lý ngắt theo chu kỳ thời gian.Song không phải module nào cũng cho
phép sử dụng tất cả các khối OB đó,chẳng hạn CPU 314 chỉ cho phép sử dụng OB35.
Trường hợp có nhiều khối OB cùng xử lý một tín hiệu báo ngắt thì ta có thể
phân biệt chúng với nhau theo thứ tự ưu tiên. Chỉ số thứ tự ưu tiên được gắn cho từng
khối nhờ phanà mềm Step7. Ta cũng có thể sử dụng Step7 để thay đổi chu kỳ phát tín
hiệu báo ngắt.
Local block của các khối OB30 OB38 có dạng chung giống như của OB35
cho trong bảng sau:
Tên hình thức Kiểu Giá trị và ý nghĩa
OB35_EV_CLASS Byte Bits 0-3=1(Coming event), Bits 4-7=1(Event
class 1)
OB35_SCAN_1 Byte Báo OB5 đã được thực hiện bằng giá trị
16#36
OB35_PRIORITY Byte Có giá trị là 11(thứ tự ưu tiên)
OB35_OB_NUMBR Byte 35.Là chỉ số của khối OB35
OB35_RESERVED_1 Byte Dự trữ (của hệ điều hành)
OB35_
RESERVED_2
Byte Dự trữ (của hệ điều hành)
OB35_PHASE_OFFS
ET
Word Thời gian trễ (miliseconds)
OB35_
RESERVED_3
Int Dự trữ (của hệ điều hành)
OB35_ EXC_FREQ Int Chu kỳ thời gian thực hiện (miliseconds)
OB35_DATE_TIME Date_An
d_Time
Thời điểm OB35 bắt đầu được thực hiện
109
So với các biến trong local block của OB1 thì biến OB35_EXC_FREQ và
OB35_PHASE_OFFSET là hơi khác về mặt ý nghĩa sử dụng và cần được giải thích rõ
thêm:
OB35_EXC_FREQ chứa chu kỳ phát tín hiệu ngắt (mặc định là 100ms hoặc đã
được qui định lại thành Ta nhờ Step7).
OB35_PHASE_OFFSET chứa khoảng thời gian trễ kể từ khi xuất hiện tín hiệu
báo ngắt cho tới khi OB35 được gọi. Thông thường ô nhớ này có nội dung bằng 0,
song trong một số trường hợp ứng dụng người ta vẫn phải gán cho nó một giá trị
dương khác 0 nhằm tránh nguy cơ nhiều khối OB30 OB38 cùng được thực hiện một
lúc dễ gây ra lỗi về thời gian cho hệ thống.
Như đã nói, ngay khi phát hện thấy một trong các khối OB30 OB38 có trong
Load memory hệ thông sẽ tự động tích cực chế độ phát tín hiệu báo ngắt theo chu kỳ
100ms. Chu kỳ Ta =100ms mặc định có thể sửa lại được nhờ công cụ phần mềm
Simatic Manager nhưng giá trị sửa lại đó là cố định trong suốt quá trình thực hiện
chương trình ứng dụng sau này, tức là ta chỉ có thể sửa lại chu kỳ Ta phát tín hiệu ngắt
khi CPU ở chế độ STOP và phải sử dụng Simatic Manager để nạp tham số mới cho
module CPU.
Linh hoạt hơn so với việc sửa đổi lại Ta , ta có thể tích cực hoặc huỷ bỏ chế độ
ngắt theo chu kỳ bằng những hàm có sẵn trong hệ điều hành và do đó không cần phảI
chuyển về trạng thái STOP. Cụ thể là:
Hàm SFC39 (tên hình thức DIS_IRT) có tác dụng che ngắt.
Hàm SFC40 (tên hình thức EN_IRT) có tác dụng bỏ mặt nạ che ngắt.
Hàm SFC41 (tên hình thức DIS_AIRT) có tác dụng che tất cả các ngắt có mức
ưu tiên cao hơn tín hiệu ngắt đang được sử lý.
Hàm SFC42 (tên hình thức EN_AIRT) có tác dụng bỏ mặt nạ che tất cả các
ngắt có mức ưu tiên cao hơn tín hiệu ngắt đang được sử lý.
Ngắt tại một thời điểm định trước (OB10 OB17)
Khối OB10 nói riêng (ví dụ cho module CPU 314) và các khối OB10 OB17
nói chung (phụ thuộc chủng loại của module CPU) sẽ được hệ điều hành gọi một lần
tại một thời điểm định trước hoăc nhiều lần kể từ thời điểm đã cho. Khi được gọi
nhiều lần kể từ thời điểm đã được xác định ta có thể qui định:
110
Mỗi phút một lần,
Mỗi tiếng một lần,
Mỗi ngày một lần,
Mỗi tuần một lần,
Mỗi tháng một lần,
Mỗi năm một lần.
Khối OB10 có local block ( tương tự cho cả các khối OB11 OB17 ) :
Tên hình thức Kiểu Giá trị và ý nghĩa
OB10_EV_CLASS Byte B#16#11=ngắt đang được tích cực
OB10_STRT_INFO Byte B#16#11=OB10 đã được gọi và thực hiện
OB10_ PRIORITY Byte Có giá trị là 2(thứ tự ưu tiên)
OB10_OB_NUMBR Byte 10 là chỉ số của khối OB10
OB10_RESERVED_1 Byte Dự trữ (của hệ điều hành)
OB10_RESERVED_2 Byte Dự trữ (của hệ điều hành)
OB10_PERIOD_EXE Word Mã qui định về chế độ thực hiện sử lý
ngắt
W#16#0000 : một lần
W#16#0201: mỗi phút một lần
W#16#0401: mỗi giờ một lần
W#16#1001: mỗi ngày một lần
W#16#1201: mỗi tuần một lần
W#16#1401: mỗi tháng một lần
W#16#1801: mỗi năm một lần
OB10_RESERVED_3 Int Dự trữ (của hệ điều hành)
OB10_RESERVED_4 Int Dự trữ (của hệ điều hành)
OB10_DATE_TIME Date_And_T
ime
Thời điểm OB10 bắt đầu được thực hiện.
Có hai cách để định nghĩa thời điểm phát tín hiệu ngắt và quy định chế độ làm
việc (một lần hay nhiều lần) cho OB10 OB17. Cách thứ nhất là sử dụng công cụ
111
phần mềm Simatic Manager và cách thứ hai là sử dụng hàm SFC28 có tên hình thức
SET_ TINT của hệ thống.
Sau khi định nghĩa thời điểm gọi OB10, bản thân khối OB10 cũng cần phải
được tích cực. Ta cũng có hai cách để tích cực khối OB10 hoặc bằng công cụ phần
mềm Simatic Manager hoặc nhờ hàm SFC30 (có tên hình thức CAN_TINT) của hệ
thống.
Để huỷ bỏ trạng thái tích cực của khối OB10 ta sử dụng hoặc công cụ phần
mềm Simatic Manager hoặc nhờ hàm SFC29 (có tên hình thức CAN_TINT).
Tín hiệu báo ngắt tại thời điểm định trước này có thể được che nhờ hàm SFC39
(có tên hình thức DIS_IRT) hay bóc mặt nạ che nhờ hàm SFC40 (có tên hình thức
EN_IRT). Ngoài ra ta cũng có thể sử dụng hàm SFC41 (có tên hình thức DIS_AIRT)
để che tất cả các ngắt có mức ưu tiên cao hơn tín hiệu ngắt đang được xử lý hoặc hàm
SFC42 (có tên hình thức EN_AIRT) để bỏ mặt nạ che tất cả các ngắt có mức ưu tiên
cao hơn tín hiệu ngắt đang được xử lý.
IV.6.3 Xử lý lỗi hệ thống
Lỗi hệ thống có hai loại:
Lỗi asynchronous (lỗi không đồng bộ), bao gồm:
+ lỗi vượt quá thời gian xoay vòng cho phép – OB80,
+ lỗi sự cố nguồn nuôI (ví dụ không có pin) – OB81,
+ lỗi sự cố module (ví dụ chập mạch trên module vào) – OB82,
+ lỗi thiếu khối OB chứa chương trình xử lý ngắt – OB85,
+ lỗi truyền thông – OB87.
Lỗi synchronous (lỗi đồng bộ), bao gồm:
+ lỗi lập trình (ví dụ thiếu khối DB, FC hoặc FB) –OB121,
+ lỗi truy nhập module (ví dụ có lệnh truy nhập module mở rộng nhưng lại
không tìm thấy module đó) – OB122.
Khi gặp lỗi không đồng bộ, hệ thống sẽ chuyển CPU về trạng thái STOP. Tất cả
các tín hiệu báo ngắt lỗi không đồng bộ đều có thể được che hoặc bỏ mặt nạ che nhờ
sử dụng:
Hàm SFC39 (tên hình thức DIS_IRT) có tác dụng che ngắt.
Hàm SFC40 (tên hình thức EN_IRT) có tác dụng bỏ mặt nạ che ngắt.
112
Hàm SFC41 (tên hình thức DIS_AIRT) có tác dụng che tất cả các ngắt có mức
ưu tiên cao hơn tín hiệu ngắt đang được xử lý.
Hàm SFC42 (tên hình thức EN_AIRT) có tác dụng bỏ mặt nạ che tất cả các
ngắt có mức ưu tiên cao hơn tín hiệu ngắt đang được xử lý.
Xử lý lỗi về thời gian thực hiện chương trình (OB80)
Khối OB80 sẽ được hệ thống gọi khi:
Thời gian thực hiện chương trình vượt quá thời gian vòng quét cực đại cho
phép. Mặc định mỗi vòng quét được quy định là phảI thực hiện không quá 150ms. Sự
quy định này là cầc thiết để có thể đảm bảo tính thời gian thực của chương trình điều
khiển. Mặc dù ta có thể sử dụng phần mềm Simatic Manager để tăng khoảng thời gian
vòng quét cực đại cho phép, song điều này là hoàn toàn không nên, nhất là khhi phảI
điều khiển đối tượng biến đổi nhanh.
Theo thiết kế, một trong số OB10 OB17 đáng ra phải được gọi tại một thời
điểm định trước, song vì một lý do nào đó, ví dụ như do đồng hồ thời gian thực hiện
của CPU đã bị chỉnh lại, mà điều đó không được thực hiện.
Hệ thống đang phải xử lý một tín hiẹu ngắt chưa xong mà đã gặp phải tín hiẹu
báo ngắt cùng loại. Ví dụ nếu thời gian cần thiết để thực hiện OB35 lại lâu hơn chu kỳ
phát tín hiệu báo ngắt Ta đã khai báo thì sẽ xảy ra trường hợp OB35 chưa được xử lý
xong hệ thống đã lại phải gọi OB35 để xử lý cho lần tiếp theo.
Gặp phải lỗi trong chương trình của một khối OB, chẳng hạn như lỗi logic, lỗi
thuật toán…
Ngay cả trong trường hợp gặp một tín hiệu ngắt cứng hoặc ngắt theo chu
kỳ thời gian nhưng lại không có khối OB tương ứng (OB40 hay OB35) của tín hiệu
ngắt đó, hệ thống cũng chuyển sang gọi khối OB80 đồng thời đưa CPU về trạng thái
STOP.
Như vậy, sẽ có nhiều loại tín hiệu báo ngắt lỗi khác nhau cùng gọi đến OB80.
Chúng sẽ được OB80 phân biệt với nhau trong quá trình xử lý bằng mã nhận biết kiểu
lỗi. Tương ứng với những mã nhận biết kiểu lỗi khác nhau, khối OB sẽ tự tổ chức cho
mình các local block khác nhau.
Local block của khối OB80 cho trong trường hợp a) có cấu trúc như sau:
113
Tên hình thức Kiểu Giá trị và ý nghĩa
OB80_EV_CLASS Byte B#16#35.Mã nhận biết thứ nhất
OB80_FLT_ID Byte B#16#01. Mã nhận biết thứ hai
OB80_PRIORITY Byte 26 (thứ tự ưu tiên).
OB80_OB_NUMB
R
Byte 80. Là chỉ số của khối OB80
OB80_RESERVED
_1
Byte Dự trữ (của hệ điều hành).
OB80_RESERVED
_2
Byte Dự trữ (của hệ điều hành).
OB80_LAST_CYL Word Thời gian vòng quét vừa thực hiện.
OB80_MIN_CYL Word Thời gian vòng quét ngắn nhất đã thực
hiện.
OB80_MAX_CYL Word Thời gian vòng quét lâu nhất đã thực
hiện.
OB80_DATE_TIM
E
Date_And_Time Thời điểm OB80 bắt đầu thực hiện.
Local block của khối OB80 cho các trường hợp b), c), d) như sau:
Tên hình thức Kiểu Giá trị và ý nghĩa
OB80_EV_CLASS Byte B#16#35. Mã nhận biết thứ nhất
OB80_FLT_ID Byte Mã nhận biết thứ hai
B#16#02. B#16#03. B#16#07.
OB80_PRIORITY Byte 26 (thứ tự ưu tiên).
OB80_OB_NUMR Byte 80. Là chỉ số của khối OB80.
OB80_RESERVED_1 Byte Dự trữ (của hệ điều hành).
OB80_RESERVED_2 Byte Dự trữ (của hệ điều hành).
OB80_ERR_INFO Word Kiểu lỗi phát hiện được.
OB80_ERR_EV_CL
A
Byte Kiểu tín hiệu ngắt.
114
Tên hình thức Kiểu Giá trị và ý nghĩa
OB80_ERR_EV_NU
M
Byte Số hiệu tín hiệu ngắt.
OB80_OB_PRIORIT Byte Thứ tự ưu tiên của khối OB đang được
thực hiện thì xuất hiện tín hiệu báo ngắt.
OB80_OB_NUM Byte Tên khối OB đang được thực hiện thì
xuất hiện tín hiệu báo ngắt.
OB80_DATE_TIME Date_And_Ti
me
Thời điểm OB80 bắt đầu được thực hiện.
IV.6.4 Xử lý lỗi thiếu khối OB (OB85)
Hệ thống sẽ gọi khối OB85 khi gặp lỗi đồng bộ cũng như tín hiệu báo ngắt tại
thời điểm định trước nhưng lại không tìm thấy các khối OB tương ứng để xử lý những
tín hiệu ngắt này (ví dụ thiếu khối OB10, OB82).Khối OB85 cũng được hệ thống gọi
nếu trong chương trình ứng dụng có sử dụng các hàm chuẩn của hệ thống (SFC) mà
những hàm này lại truy nhập đến khối OB không có trong bộ nhớ, ví dụ chương trình
sử dụng hàm SFC30 để tích cực OB10 nhưng không tìm thấy OB10 trong bộ nhớ. Nếu
không tìm thấy OB85, hệ thống sẽ chuyển CPU về trạng thái STOP.
Tín hiệu ngắt báo lỗi thiếu khối OB này có thể được che nhờ hàm SFC39 (tên
hình thức DIS_IRT) hoặc bỏ mặt nạ che nhờ hàm SFC40 (tên hình thức EN_IRT). Ta
cũng có thể sử dụng hàm SFC41 (tên hình thức DIS_AIRT) để che tất cả các ngắt có
mức ưu tiên cao hơn tín hiệu ngắt đang được xử lý hoặc hàm SFC42 (tên hình thức
EN_AIRT) để bỏ mặt nạ che tất cả các ngắt có mức ưu tiên cao hơn tín hiệu ngắt đang
được xử lý.
Local block của khối OB85 có dạng:
Tên hình thức Kiểu Giá trị và ý nghĩa
OB85_EV_CLASS Byte B#16#35.
OB85_FLT_ID Byte Mã báo kiểu lỗi
B#16#A1: Chương trình SFC không
tìm thấy khối OB.
B#16#A1: Hệ điều hành không tìm
thấy khối OB
115
Tên hình thức Kiểu Giá trị và ý nghĩa
OB85_PRIORITY Byte 26 (thứ tự ưu tiên).
OB85_OB_NUMR Byte 85. Là chỉ số của khối OB85.
OB85_RESERVED_1 Byte Dự trữ (của hệ điều hành).
OB85_RESERVED_2 Byte Dự trữ (của hệ điều hành).
OB85_RESERVED_3 Word Dự trữ (của hệ điều hành).
OB85_ERR_EV_CL
A
Byte Dạng tín hiệu báo lỗi.
OB85_ERREV_NUM Byte Chỉ số tín hiệu báo lỗi.
OB85_OB_PRIORIT Byte Thứ tự ưu tiên của OB đang được thực
hiện khi có lỗi
OB85_OB_NUM Byte Tên khối OB đang thực hiện khi có lỗi.
OB85_DATE_TIME Date_And_Time Thời điểm OB85 bắt đầu được thực
hiện.
IV.6.5 Xử lý lỗi truyền thông (OB87)
Hệ thống sẽ gọi khối OB87 khi có lỗi truyền thông, ví dụ như lỗi time out
không tìm thấy thấy OB87 để xử lý lỗi, hệ thống sẽ chuyển CPU về trạng thái STOP.
Tín hiệu ngắt báo lỗi truyền thông có thể được che hoặc bỏ mặt nạ che nhờ:
Hàm SFC39 (tên hình thức DIS_IRT) có tác dụng che ngắt.
Hàm SFC40 (tên hình thức EN_IRT) có tác dụng bỏ mặt nạ che ngắt.
Hàm SFC41 (tên hình thức DIS_AIRT) có tác dụng che tất cả các ngắt có mức
ưu tiên cao hơn tín hiệu ngắt đang được xử lý.
Hàm SFC42 (tên hình thức EN_AIRT) có tác dụng bỏ mặt nạ che tất cả các
ngắt có mức ưu tiên cao hơn tín hiệu ngắt đang được xử lý.
Local block của khối OB87 có dạng:
Tên hình thức Kiểu Giá trị và ý nghĩa
OB87_EV_CLASS Byte B#16#35.
OB87_FLT_ID Byte Mã báo kiểu lỗi:
B#16#D2: không phát được tín hiệu yêu
116
Tên hình thức Kiểu Giá trị và ý nghĩa
CPU kiểm tra (diagnostic).
B#16#E1: Sai cấu trrúc ID khi truyền
thông với global data (GD).
B#16#E2: Không đưa được thông tin
trạng thái của GD vào DB.
B#16#E6: Nhóm thông tin trạng tháI của
GD không chuyển được vào DB.
OB87_PRIORITY Byte 26 (thứ tự ưu tiên).
OB87_OB_NUMR Byte 87. Là chỉ số của khối OB87.
OB87-
_RESERVED_1
Byte Dự trữ (của hệ điều hành).
OB87-
_RESERVED_2
Byte Dự trữ (của hệ điều hành).
OB87-
_RESERVED_3
Word Dự trữ (của hệ điều hành).
OB87-
_RESERVED_4
Dword Dự trữ (của hệ điều hành).
OB87-
_DATE_TIME
Date_And_Tim
e
Thời điểm OB87 bắt đầu được thực hiện.
IV.6.6 Những hàm chuẩn quản lý ngắt
Che và bỏ mặt nạ che các tín hiệu ngắt, tín hiệu báo lỗi không đồng bộ
Hàm SFC39 (tên hình thức DIS_IRT) có tác dụng che ngắt.
Hàm SFC40 (tên hình thức EN_IRT) có tác dụng bỏ mặt nạ che ngắt.
Hàm SFC41 (tên hình thức DIS_AIRT) có tác dụng che tất cả các ngắt có mức
ưu tiên cao hơn tín hiệu ngắt đang được xử lý.
Hàm SFC42 (tên hình thức EN_AIRT) có tác dụng bỏ mặt nạ che tất cả các
ngắt có mức ưu tiên cao hơn tín hiệu ngắt đang được xử lý.
Tín hiệu báo lỗi đồng bộ
117
Bị che?
Ghi nhớ mã tín hiệu lỗi
Có khố
i OB?
Gọi khối OB
Chuyển CPU về STOPYes
Yes
No
No
Hình 4.6 Các bước hệ điều hành xử lý tín hiệu báo lỗi đồng bộ.
Các bước xử lý tín hiệu báo lỗi đồng bộ của hệ điều hành
Lỗi đồng bộ có hai loại:
Loại lỗi lập trình (xử lý bởi OB121) và
Loại lỗi truy nhập module (xử lý bởi OB122),
Trong đó mỗi loại có nhiều kiểu lỗi. Nếu ta có một cách nhìn tổng quát về các kiểu lỗi
đó sẽ rất cần thiết cho việc sử dụng các hàm SFC36, SFC37.
Các kiểu lỗi lập trình (OB121)
a. Lỗi biến đổi BCD: Tín hiệu báo lỗi này sẽ được phát khhi hệ thống gặp phải
lệnh đổi kiểu dữ liệu có cấu trúc BCD với một chữ số ngoài khoảng 09. Ví
dụ hệ thống sẽ phát tín hiệu báo lỗi kiểu này nếu gặp lệnh:
L W#16#2E
BTI //Lỗi, vì chữ E nằm ngoài khoảng 09
b. Lỗi đọc ô nhớ ngoài miền cho phép: Tín hiệu báo lỗi kiểu này sẽ được phát
khi hệ thống gặp phải lệnh đọc nội dung một ô nhớ có địa chỉ nằm ngoài miền
cho phép. Ví dụ hệ thống sẽ phát tín hiệu báo lỗi kiểu này nếu gặp lệnh:
L MW300 //Lỗi, vì miền biến cờ (M) chỉ có 256 byte
c. Lỗi ghi vào ô nhớ ngoài miền cho phép: Tín hiệu báo lỗi kiểu này sẽ được
phát khi hệ thống gặp phải lệnh ghi vào ô nhớ có địa chỉ nằm ngoài miền cho
phép. Ví dụ hệ thống sẽ phát tín hiệu báo lỗi kiểu này nếu gặp lệnh:
T MW320 // Lỗi, vì miền biến cờ (M) chỉ có 256 byte
d. Lỗi đọc ô nhớ có địa chỉ sai cấu trúc: Tín hiệu báo lỗi kiểu này sẽ được phát
khi hệ thống gặp phải lệnh đọc một ô nhớ nhưng địa chỉ lại sai cấu trúc.
118
Thông thường việc truy nhập ô nhớ có cấu trúc địa chỉ sai mà không bị phát
hiện sai cú pháp khi soạn thảo là những lệnh truy nhập thông qua con trỏ. Ví
dụ hệ thống sẽ phát tín hiệu báo lỗi kiểu này nếu gặp lệnh:
LAR1 P#0.0
L W[AR1,P#0.0] //Lỗi, vì địa chỉ đúng phải là IW[AR1, P#0.0]
e. Lỗi ghi vào ô nhớ có địa chỉ sai cấu trúc: Tín hiệu báo lỗi khiểu này sẽ được
phát hiện khi hệ thống gặp phải lệnh ghi vào một ô nhớ có địa chỉ sai cấu trúc.
Thông thường việc truy nhập ô nhớ có cấu trúc sai địa chỉ mà không bị phát
hiện sai cú pháp khi soạn thảo là những lệnh truy nhập thông qua con trỏ. Ví
dụ hệ thống sẽ phát tín hiệu báo lỗi kiểu này nếu gặp lệnh:
LAR1 P#4.0
T W[AR1,P#0.0] //Lỗi, địa chỉ đúng phải là QW[AR1, P#0.0]
f. Lỗi sai tên Timer: Tín hiệu báo lỗi kiểu này sẽ xuất hiện khi gặp phải lệnh
làm việc với Timer có tên nằm ngoài khoảng mà CPU cho phép. Ví dụ CPU
312 chỉ có 128 Timer nên hệ thống sẽ phát tín hiệu báo lỗi kiểu này
nếuMW0=129 và gặp lệnh :
SP T[MW0] //Lỗi , nếu MW0 có giá trị là 129
g. Lỗi sai tên Counter : Tín hiệu báo lỗi này sẽ được phát khi hệ thống gặp phải
lệnh làm việc với Counter có tên nằm ngoài khoảng CPU cho phép. Ví dụ
CPU312 chỉ có 64 Counter nên hệ thống sẽ phát tín hiệu báo lỗi kiểu này nếu
MW0 = 100 gặp lệnh :
CU C[MW0] //Lỗi ,nếu MW0 có giá trị là 100
h. Lỗi đọc ô nhớ qua con trỏ có địa chỉ sai: Tín hiệu báo lỗi kiểu này sẽ được
phát khi hệ thống gặp phải lệnh đọc nội dung ô nhớ có kích thước bytes,word
hay dword nhưng con trỏ lại có phần địa chỉ bit 0. Ví dụ hệ thống sẽ phát
tín hiệu báo lỗi kiểu này nếu gặp lệnh:
LAR1 P#M0 .2
L B[AR1, P# 0.0] // Lỗi vì một bytes được tính từ bit thứ 0
i. Lỗi đọc ô nhớ qua con trỏ có địa chỉ sai: Tín hiệu báo lỗi kiểu này sẽ được
phát khi hệ thống gặp phải lệnh đọc nội dung ô nhớ có kích thước bytes,word
119
hay dword nhưng con trỏ lại có phần địa chỉ bit 0. Ví dụ hệ thống sẽ phát
tín hiệu báo lỗi kiểu này nếu gặp lệnh:
LAR1 P#M0 .2
T B[AR1, P# 0.0] // Lỗi vì một bytes được tính từ bit thứ 0
j. Lỗi làm việc với DB: Tín hiệu báo lỗi kiểu này sẽ được phát khi hệ thống gặp
phải lệnh ghi dữ liệu vào một DB (share) chỉ cho phép đọc
k. Lỗi làm việc với DI: Tín hiệu báo lỗi kiểu này sẽ được phát khi hệ thống gặp
phải lệnh ghi dữ liệu vào một DI (Instance) chỉ cho phép đọc.
l. Lỗi mở một DB có tên quá lớn: Tín hiệu báo lỗi kiểu này sẽ được phát khi hệ
thống gặp phải lệnh mở một DB (share) có tên nằm ngoài miền mà CPU cho
phép.
m. Lỗi mở một DI có tên quá lớn: Tín hiệu báo lỗi kiểu này sẽ được phát khi hệ
thống gặp phải lệnh mở một DI (Instance) có tên nằm ngoài miền mà CPU
cho phép.
n. Lỗi gọi một khối FC có tên qua lớn: Tín hiệu báo lỗi kiểu này sẽ được phát
khi hệ thống gặp phải lệnh gọi một khối FC có tên nằm ngoài miền mà CPU
cho phép.
o. Lỗi gọi một khối FB có tên qua lớn: Tín hiệu báo lỗi kiểu này sẽ được phát
khi hệ thống gặp phải lệnh gọi một khối FB có tên nằm ngoài miền mà CPU
cho phép.
p. Lỗi mở một khối DB không có trong bộ nhớ: Tín hiệu báo lỗi kiểu này sẽ
được phát khi hệ thống gặp phải lệnh mở một khối DB nhưng khối này lại
chưa được nạp vào bộ nhớ (Load memory) của CPU
q. Lỗi mở một khối FC không có trong bộ nhớ: Tín hiệu báo lỗi kiểu này sẽ
được phát khi hệ thống gặp phải lệnh mở một khối FC nhưng khối này lại
chưa được nạp vào bộ nhớ (Load memory) của CPU.
r. Lỗi mở một khối FB không có trong bộ nhớ: Tín hiệu báo lỗi kiểu này sẽ được
phát khi hệ thống gặp phải lệnh mở một khối FB nhưng khối này lại chưa
được nạp vào bộ nhớ (Load memory) của CPU
Các kiểu lỗi truy nhập module (OB122)
120
s.Lỗi đọc từ module tín hiệu: Tín hiệu báo lỗi kiểu này sẽ được phát khi hệ thống
thực hiện lệnh đọc cổng một module tín hiệu (SM) nhưng lại không tìm thấy
module này hoặc CPU không thực hiện được sự kết nối với module (time
out).
t. Lỗi ghi ra module tín hiệu: Tín hiệu báo lỗi kiểu này sẽ được phát khi hệ thống
thực hiện lệnh ghi ra cổng một module tín hiệu (SM) nhưng lại không tìm
thấy module này hoặc CPU không thực hiện được sự kết nối với module (time
out).
Tích cực và huỷ bỏ ngắt thời điểm
Khi tín hiệu báo ngắt theo thời điểm được phát ra, hệ thống sẽ gọi khối chương
trình tương ứng OB10OB17 để xử lý. Số các khối OB xử lý tín hiệu ngắt tại thời
điểm định trước phụ thuộc vào từng chủng loại module CPU mà ta sử dụng. Ví dụ với
CPU314 ta chỉ sử dụng được OB10 có thứ tự ưu tiên là 2.
Để khai báo sử dụng OB10OB17, có các công cụ:
1) Xác định thời điểm phát tín hiệu báo ngắt bằng phần mềm Simatic Manager.
2) Tích cực ngắt nhờ phần mềm Simatic Manager hoặc nhờ hàm hệ thống SFC30
có tên hình thức ACT_TINT.
3) Huỷ bỏ tín hiệu ngắt đang tích cực nhờ hàm SFC29 có tên hình thức QRY
_TINT.
4) Xem trạng thái tín hiệu ngắt nhờ hàm SFC31có tên hình thức QRY_TINT
Trước khi sử dụng các hàm hệ thống trên, khối OB10OB17 đã phải có trong
Load memory của CPU. Trong quá trình thực hiện, nếu không tìm thấy các khối OB
này hệ điều hành sẽ gọi OB85 để xử lý lỗi thiếu khối OB và nếu cũng không tìm thấy
OB85, nó sẽ chuyển CPU về trạng thái STOP.
Khi đã tích cực tín hiệu ngắt tại thời điểm cho trước mà vì một lý do nào đó ta
lại chỉnh lại đồng hồ thời gian của CPU thì có thể sẽ gây ra nguy cơ đồng hồ được
chỉnh (tiến hoặc lùi) qua thời điểm phát tín hiệu ngắt. Trong trường hợp như vậy hệ
điều hành sẽ gọi khối OB80 để thực hiện chương trình xử lý lỗi không đồng bộ về thời
gian và nếu cũng không tìm thấykhối OB80, nó sẽ chuyển CPU về trạng thái STOP.
Thay đổi chế độ làm việc của module mở rộng
121
Khi nói về tín hiệu ngắt cứng với các khối chương trình xử lý ngắt
OB40OB47 cũng như về việc tích cực chế độ tự chuẩn đoán lỗi của những module
tín hiệu đặc chủng (module tín hiệu có ngắt cứng, tự chuẩn đoán). module CP, module
FM,… ta có đề cập đến khả năng đặt tham số chế độ làm việc từ chương trình ứng
dụng thông qua một số hàm trao đổi tham số giữa CPU và module mở rộng, tức là
ngay cả khi CPU đang ở trạng thái RUN
Với những hàm này chương trình ứng dụng có thể mềm dẻo sử dụng nhiều chế độ làm
việc khác nhau của module mở rộng.
Ví dụ: Ta có thể lấy việc đọc cổng tương tự làm ví dụ. Chẳng hạn theo yêu cầu
bài toán thì có lúc tín hiệu tương tự đầu vào có dạng là dòng, có lúc là áp. Ngay cả khi
cố định dạng tín hiệu vào là áp thì có lúc nó là tín hiệu thuộc dải 10V, có lúc lại nằm
trong dải 2.5V. Điều này chương trình ứng dụng sẽ nhận biết được thông qua tín
hiệu số tại cổng I0.0. Nếu I0.0=1 thì dạng tín hiệu tương tự có tại địa chỉ PIW256 là áp
trong dải 10V, ngược lại khi I0.0=0 thì nó sẽ là điện áp thuộc khoảng 2.5V. Một
số module tương tự của S7-300 cho phép tuỳ chọn chế độ làm việc với tín hiệu tương
tự dạng điện áp hay dòng cũng như dải giá trị tín hiệu, 10mA, 5mA, 3.2mA….
Tuy nhiên nếu chỉ sử dụng Simatic Manager để quy định chế độ làm việc cho module
tương tự đó thì trong suốt quá trình thực hiện chương trình hoặc ta chỉ có thể làm việc
hoặc với tín hiệu thuộc dải 10V, hoặc 2.5V mà không thay đổi theo I0.0 như yêu
cầu bài toán đặt ra. ở đây để giải quyết được yêu cầu bài toán, bắt buộc phải thay đổi
chế độ làm việc mới từ chương trình ứng dụng tới module tương tự.
Các hàm cho phép ta từ chương trình ứng dụng truy nhập vào thanh ghi xác
định chế độ làm việc của module mở rộng bao gồm:
SFC55 (tên hình thức WR_PARM) để ghi tham số đặt cấu hình cho module.Tham
số cấu hình này được người sử dụng tự xây dựng và tổ chức thành một khối dữ liệu
(DB) có cấu trúc phù hợp với chủng loại module.
SFC56 (tên hình thức WR_DPARM) để sửa đổi một vài tham số cấu hình của
module. Những tham số này phải được lấy từ các khối dữ liệu đã có của hệ thống
(SDB100SDB103).
122
SFC57 (tên hình thức PARM_MOD) để sửa đổi toàn bộ tham số cấu hình của
module. Tất cả các tham số này phải được lấy từ các khối dữ liệu đã có của hệ thống
(SDB100SDB103).
Sau đây là một số chế độ làm việc của các module mở rộng có thể thay đổi
được từ chương trình ứng dụng:
a) Phát tín hiệu ngắt cứng (OB40OB47) từ module tín hiệu vào/ra số. Tín hiệu
ngắt cứng được phát khi xuất hiện sườn lên hoặc xuống của tín hiệu logic tại
cổng vào của module.
b) Tự chuẩn đoán lỗi của module vào/ra số, của module vào/ra tương tự (OB82).
c) Quy định lại dạng tín hiệu tương tự (áp hay dòng) có tại cổng vào tương tự của
module.
d) Xác định lại dải tín hiệu cho phép của tín hiệu tương tự.
e) Phát tín hiệu báo ngắt nếu tín hiệu tương tự đầu vào nằm ngoài khoảng đã được
định nghĩa. Khoảng giá trị được định nghĩa này tất nhiên phải nằm trong dải tín
hiệu cho phép, chẳng hạn dải tín hiệu là 10V được chuyển đổi sang toàn bộ
khoảng biến đổi của số nguyên 16 bits là từ -32768 đến 32767 nhưng ta có ther
quy định lại là chúng chỉ được phép nằm trong khoảng -2000 đến 2000.
Bên cạnh những chế độ vừa nêu còn có một vài chế độ làm việc khác của
module mở rộng có thể được thay đổi bởi chương trình ứng dụng.
Hàm FSC55 (WR_PARM)
Hàm FSC55 có tác dụng truyền tham số đặt cấu hình cho module mở rộng.
Tham số phải được tổ chức thành những khối dữ liệu (DB), chẳng hạn như các khối
DB45. Quá trình truyền tham số này là không đồng bộ, nói cách khác trong thời gian
truyền tham số, module không có khả năng giao tiếp với ngoại vi bởi vậy chương trình
ứng dụng cần phải đợi cho tới khi quá trình truyền tham số được hoàn tấtmới có thể sử
dụng được module và để làm được điều này,hàm FSC55 có biến BUSY thông báo lúc
nào hoàn thành quá trình truyền tham số.
Hàm SFC55 có các tham biến hình thức vào-ra như sau:
Loại
biến
Tên biến Kiểu dữ liệu ý nghĩa
IN REQ Bool Tên khối OB chứa chương trình xử lý ngắt
123
(ví dụ OB10).
IN IOID Byte Vùng truy nhập:
B#16#54: Vào.
B#16#55: Ra.
IN LADDR Word Địa chỉ của module.
IN RECNUM Byte Chỉ số của data record. ở đây nếu tham số
cấu hình được người sử dụng tự tổ chức thì
RECNUM phải là 1.
IN RECORD Any Tên khối dữ liệu chứa tham số và độ dài
(tính theo bytes).
OUT RET_VA
L
Mã báo lỗi khi thực hiện hàm .
OUT BUSY Bool Báo tham số đang được truyền.
REQ: Yêu cầu gửi.
Hàm chỉ thực sự bắt đầu công việc gửi tham số tới module nếu REQ=1. Tuy
nhiên, hàm cũng vẫn sẽ hoàn thành nốt công việc nếu đang trong quá trình gửi mà tín
hiệu yêu cầu gửi REQ đã trở về 0.
BUSY: Mã hiệu báo đang bận truyền.
Khi hàm chưa hoàn thành xong công việc gửi tham số tới module, BUSY vẫn
có giá trị 1. Việc gửi tham số có thể phải kéo dài vài vòng quét và BUSY=0 chỉ khi
công việc gửi tham số thực sự đã hoàn tất.
RET_VAL: Mã hiệu báo lỗi của hàm:
Mã hiệu ý nghĩa
W#16#8090 Địa chỉ module nằm ngaòi miền định nghĩa.
W#16#8091 Địa chỉ module sai cấu trúc.
W#16#8092 Kiểu dữ liệu của tham số trong khối DB không phù hợp với loại
biến (byte, word, dword).
W#16#8093 Sai giá trị của IOID.
W#16#80A1 Không truyền được tham số (đường truyền không thông).
W#16#80B1 Độ dài của DB chứa tham số không đúng.
124
W#16#80B3 Module tìm thấy ở slot đã chỉ thị lại kiểu khác.
W#16#80D2 Tham số không đúng cho module.
125
IV.7 Làm việc với tín hiệu tương tự và bộ đếm xung tốc độ cao
IV.7.1 Xử lý tín hiệu analog
a, Địa chỉ vào ra và dải đo các tín hiệu
PI : Miền địa chỉ cổng vào của các Module tương tự (I/O External input). Các giá
trị tương tự tại cổng vào của module tương tự sẽ được đọc và chuyển tự động theo
những địa chỉ được cấu hình ở phần cứng. Chương trình ứng dụng có thể truy cập
miền nhớ PI theo từng Byte (PIB), từng từ PIW hoặc từng từ kép PID .
PQ: Miền địa chỉ cổng ra cho các module tương tự (I/O External Output). Các giá
trị theo những địa chỉ này sẽ được module tương tự chuyển tới các cổng ra tượng tự.
Chương trình ứng dụng có thể truy nhập miền nhớ PQ theo từng Byte (PQB), từng từ
(PQW) hoặc theo từng từ kép (PQD).
Trên mỗi Slot có khả năng định địa chỉ 16 bytes. PI và PQ lấy địa chỉ bắt đầu như
nhau
Ví dụ: Slot 5 gắn module analog AI 4/ AO 4 thì module có địa chỉ như sau:
Địa chỉ 4 đầu vào: PIW272, PIW274, PIW276, PIW278
Địa chỉ 4 đầu ra: PQW272, PQW274, PQW276, PQW278
- Dạng tín hiệu chuyển đổi: có 2 dạng: tương tự sang số; số sang tương tự
- Thang đo điện áp và dòng điện: Muốn đo điện áp, dòng điện ta chọn module
Analog phù hợp với yêu cầu cần đo. Chọn giá trị thang đo khi thiết lập cấu
hình phần cứng, tuỳ thuộc yêu cầu dãy điện áp cần đo. Giá trị số nguyên của
kêt quả đo đọc được từ PI (thanh ghi đệm chứa giá trị analog ở đầu vào) phụ
thuộc vào độ lớn điện áp cần đo và thang đo được chọn. Giá trị đo phụ thuộc
tuyến tính với điện áp đo trong phạm vi danh định của thang đo. Giá trị số
của thang đo:
Dải đo Dải đo Dải đo Dải đo Dải đo Tín hiệu số
± 80 mV ± 250 mV ± 500 mV ± 1000 mV ± 2500 mV ± 27648
± 5 V ± 10 V ± 10 mA ± 3.2 mA ± 27648
1 - 5V 0 - 20 mA 4 - 20 mA 0 - 27648
- Thang đo điện trở, nhiệt độ: Khi cần đo điện trở, nhiệt độ ta cần chọn
module thích hợp. Chọn đầu vào điện trở, nhiệt độ, loại cảm biến được thực
126
hiện trong xây dựng cấu hình phần cứng. Giá trị đo được tuyến tính trong
pham vi danh định.
Thang đo điện trở:
Dải đo Dải đo Dải đo Tín hiệu số
0 – 150 Ohm 0 – 300 Ohm 0 – 600 Ohm 0 - 27648
Thang đo nhiệt độ:
Dải đo (0C) Tín hiệu số
Pt 100 Standard, - 200 -> 850 - 2000 -> 8500
Pt 100 Climate, - 200 -> 850 - 1200 -> 1300
Ni 100 Standard, - 60 -> 250 - 600 -> 2500
Ni 100 Climate, - 60 -> 250 - 600 -> 2500
Cảm biến loại K, - 270 -> 1372 - 2700 -> 13720
Cảm biến loại N, - 270 -> 1300 - 2700 -> 13000
Cảm biến loại J, - 210 -> 1200 - 2100 -> 12000
Cảm biến loại E, - 270 -> 1000 - 2700 -> 10000
Cảm biến loại L, - 200 -> 900 0C - 2000 -> 9000
- Giá trị đầu ra PQ đưa đến các ra tương tự
Dải đo Tín hiệu số
0 -> 10 V 0 -> 27648
1 -> 5 V 0 -> 27648
± 10 V ± 27648
0 -> 20 mA 0 -> 27648
4 -> 20 mA 0 -> 27648
± 20 mA ± 27648
b, Xử lý tín hiệu tương tự
- Để đọc tốt tín hiệu Analog trước hết ta phải xác định tín hiệu đọc Analog là
tín hiệu loại gì ( 0-10V,4-20mA,cách đấu 2 dây,cách đấu 4 dây……)
- Bước kế tiếp là phải chọn đúng loại tín hiệu trên phần cứng ( Chọn loại tín
hiệu trên Modul đọc kênh Analog) và chọn đúng trên cấu hình phần cứng
127
cho phù hợp, nếu chọn 2 bước này không tương thích thì đèn System Fault
của Modul Analog sẽ sáng và kênh Analog sẽ đọc sai.
- Xác định đúng tín hiệu sử dụng,đơn cực hay lưỡng cực
- Xác định địa chỉ cho từng kênh Analog ( vd: PIW256…)
Tín hiệu analog đầu vào là các số nguyên INT. Muốn tính toán trên các kiểu dữ
liệu khác phải dùng các hàm biến đổi thích hợp.
Biến đổi số nguyên sang BCD: ITB
Biến đổi số nguyên sang số nguyên dài: ITD
Biến đổi số nguyên dài sang số thực: DTR
Biến đổi số nguyên dài sang BCD: DTB
Biến đổi số thực sang số nguyên dài: TRUNC
c, Các hàm chuyển đổi cơ bản
Trong thư viện Standar, mục TI-S7 Converting Blocks có 2 hàm cơ bản thường
được sử dụng trong việc chuyển đổi đại lượng, là hàm SCALE và UNSCALE.
- Hàm chuyển đổi SCALE FC 105
Đây là hàm chuyển đổi từ dạng tín hiệu đầu vào PIW của của module tương tự
dạng INT sang dạng đại lượng cần đo.
Đồ thị biến đổi của hàm FC105
Hàm tuyến tính:
OUT = [{Hi(lim) – Lo(lim)}{IN – K1} / { K2 - K1}] + Lo(lim)
Trong đó:
OUT: giá trị đại lượng đo, dạng số thực.
128
IN: Số từ PIW, dạng số nguyên.
K2: giá trị số nguyên giới hạn trên ở đầu vào PIW.
K1: giá trị số nguyên giới hạn dưới ở đầu vào PIW.
Hi(lim): giới hạn trên đại lượng cần đo
Lo(lim): giới hạn dưới đại lượng cần đo
Đầu vào Bipolar: - 27648
Đầu vào Unipolar: 0
(Ngo vào Bipolar xác định có chuyển đổi giá trị âm hay không. Bipolar = 1 =>ngo
vào 2 cực => có chuyển đổi giá trị âm. Bipolar = 0 => một cực => ko chuyển đổi giá
trị âm)
Ví dụ ứng dụng:
Nếu đầu vào PIW288 của module analog có thang đo ±80 mV, CPU sẽ nhận được
giá trị từ ±27648 nếu có cực. Qua hàm FC105 sẽ chuyển đổi giá trị nhận được thành số
mV mong muốn.
Viết chương trình và kiểm tra chương trình hoạt động.
- Hàm chuyển đổi UNSCALE FC106
129
Hàm FC106 chuyển đổi đại lượng cần đưa ra cổng điều khiển của module analog
từ giá trị thực thành giá trị số nguyên.
Đồ thị biến đổi của hàm FC 106
Dạng biến đổi có công thức:
OUT=[(K2-K1)*(IN-Lo(lim)]/[Hi(lim)-Lo(lim)] + K1
OUT: đầu ra hàm, dạng số nguyên.
IN: đầu vào, dạng số thực.
K2: giới hạn trên của số nguyên đầu ra: 27648 (với module có độ phân giải)
K1: Giới hạn dưới của số nguyên đầu ra, Bipolar là – 27648, Unipolar là 0
Ví dụ:
Ta muốn truyền ra module analog đầu ra PQW290, thang đo 0-10V, giá trị điện áp
3.3V chứa trong MD24. Thay đổi giá trị trong MD24, tín hiệu đầu ra analog sẽ thay
đổi theo.
130
Ngoài ra, nếu dựa trên dải đo của cảm biến, ta có thể viết hàm riêng cho từng loại
cảm biến đo thay vì sử dụng các hàm đã xây dựng sẵn trong phần mềm.
IV.7.2 Đếm xung tốc độ cao
Xung tốc độ cao được đọc thông qua những Modul đọc xung tốc độ cao hoặc có
thể được đọc thông qua CPU có tích hợp sẵn những I/O có khả năng đọc xung tốc độ
cao như CPU 312C,313C……
Việc đọc xung tốc độ cao là hết sức cần thiết cho những ứng dụng đọc xung
Encoder, hay đọc xung của những Input tốc độ cao. Tuỳ thuộc từng loại CPU cũng
như Modul đọc xung tốc độ cao mà có những cách thức đấu nối dây khác nhau,do vậy
việc đấu nối dây cần phải xem tài liệu trước khi thực hiện. Cần phải xác định chế độ
đọc xung trước khi đấu nối ( vd : chế độ đọc 2 xung,chế độ đọc 1 xung ……).
Hàm đọc xung tốc độ cao: SFB 47 (DB47)
131
Chi tiết cụ thể có thể xem trong File Help của SFB47 bằng cách chọn SFB47
rồi bấm F1
Xác định độ rộng xung bằng hàm SFB49 (DB49).
Ngoài việc đọc xung tốc độ cao bằng hàm SFB47,ta còn có thể đọc tần số bằng
hàm SFB48 (DB48). Cách thức định dạng hàm SFB48 cũng hoàn toàn tương tự hàm
SFB47, chỉ khác ngõ ra là tần số. Chi tiết cụ thể có thể chọn hàm SFB48 rồi bấm F1.
132