Có thể lập trình cho S7-200 bằng cách sử dụng một trong những phần
mềm sau đây:
- STEP 7-Micro/DOS. - STEP 7-Micro/WIN.
Những phần mềm này đều có thể cài đặt đợc trên các máy lập trình họ PG7xx và các máy tính cá nhân (PC).
Các chơng trình cho S7-200 phải có cấu trúc bao gồm chơng trình chính
(main program) và sau đó đến các chơng trình con và các chơng trình xử lý
ngắt đợc chỉ ra sau đây:
- Chơng trình chính đợc kết thúc bằng lệnh kết thúc chơng trình (MEND).
- Chơng trình con là một bộ phận của chơng trình. Các chơng trình con phải đợc viết sau lệnh kết thúc chơng trình chính, đó là lệnh MEND.
- Các chơng trình xử lý ngắt là một bộ phận của chơng trình. Nếu cần sử dụng chơng trình xử lý ngắt phải viết sau lệnh kết thúc chơng trình chính MEND. Các chơng trình con đợc nhóm lại thành một nhóm ngay sau chơng trình chính. Sau đó đến các chơng trình xử lý ngắt. Bằng cách viết nh vậy, cấu trúc chơng trình đợc rõ ràng và thuận tiện hơn trong việc đọc chơng trình sau này.
Có thể tự do trộn lẫn các chơng trình con và chơng trình xử lý ngắt đằng sau ch- ơng trình chính.
Để tạo ra một chơng trình dạng STL, ngời lập trình cần phải hiểu rõ ph- ơng thức sử dụng 9 bit của ngăn xếp logic của S7-200. Ngăn xếp logic là một khối gồm 9 bit chồng lên nhau. Tất cả các thuật toán liên quan đến ngăn xếp đều chỉ làm việc với bit đầu tiên hoặc với bit đầu tiên và bit thứ hai của ngăn xếp. Giá trị logic mới đều có thể đợc gửi [hoặc đợc nối thêm] vào ngăn xếp. Khi phối hợp hai bit đầu tiên của ngăn xếp, thì ngăn xếp sẽ đợc kéo lên một bit.
Main Program Thực hiện trong một vòng quét
MEND
SBR 0 chơng trình con thứ nhất Thực hiện khi đợc chơng trình chính
gọi RET SBR 0 chơng trình con thứ n+1 RET
INT 0 chơng trình xử lý ngắt thứ nhất Thực hiện khi có tín hiệu báo ngắt
RET1 INT 1 chơng trình xử lý ngắt thứ n+1 RET1 2.3. Ngôn ngữ lập trình của S7-200. 2.3.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.
lệnh lập trình đầu tiên và kết thúc ở lệnh cuối trong một vòng. Một vòng nh vậy đợc gọi là vòng quét.
Một vòng quét (scan cycle) đợc bắt đầu bằng việc đọc trạng thái của đầu
vào, và sau đó thực hiện chơng trình. Scan cycle 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 của Siemens nói chung dựa trên hai phơng pháp lập trình cơ bản: Phơng pháp hình thang
(Ladder Logic 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 chơng trình đợc viết theo kiểu LAD, thiết bị lập trình sẽ tự tạo ra một chơng trình theo kiểu STL tơng ứng. Nhng ngợc lại không phải mọi chơng trình đợc viết theo kiểu STL cũng có thể chuyển đợc sang LAD.
2.3.1.1. Định nghĩa về 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: là biểu tợng (symbol) mô tả các tiếp điểm của rơle. Các tiếp
điểm đó có thể là thờng mở | | hoặc thờng đóng |⁄ |
- Cuộn dây (coil): là biểu tợng ( ) mô tả các 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ộ định 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 đợc 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. Đờng nguồn bên trái là dây nóng, đờng nguồn bên phải là dây trung hòa hay là đờng trở về nguồn cung cấp (đờng nguồn bên phải thờng không đợc thể hiện khi dùng chơng trình tiện dụng STEP7-Micro/DOS hoặc STEP7-Micro/WIN). Dòng điện chạy từ bên trái qua các tiếp điểm đến các cuộn dây hoặc các hộp trở về bên phải nguồn.
2.3.1.2. Định nghĩa về ngăn xếp logic (logic stack).
Để tạo ra một chơng trình dạng STL, ngời lập trình cần phải hiểu rõ ph- ơng thức sử dụng 9 bit ngăn xếp logic của S7-200. Ngăn xếp là một khối gồm 9 bit chồng lên nhau. Tất cả các thuật toán liên quan đến ngăn xếp chỉ làm việc với bit đầu tiên hoặc bit thứ hai của ngăn xếp. Giá trị logic mới có thể đợc gửi vào ngăn xếp. Khi kết hợp hai bit đầu tiên của ngăn xếp thì ngăn xếp sẽ đợc kéo lên một bit.
S0 Stack 0 – Bit đầu tiên hay bit trên cùng của ngăn xếp
S1 Stack 1 – Bit thứ hai của ngăn xếp
S2 Stack 2 – Bit thứ ba của ngăn xếp
S3 Stack 3 – Bit thứ t của ngăn xếp
S4 Stack 4 – Bit thứ năm của ngăn xếp
S5 Stack 5 – Bit thứ sáu của ngăn xếp
S6 Stack 6 – Bit thứ bảy của ngăn xếp
S7 Stack 7 – Bit thứ tám của ngăn xếp
S8 Stack 8 – Bit thứ chín của ngăn xếp
2.3.2. Tập lệnh của S7-200.
2.3.2.1. Lệnh vào ra.
Load (LD): Lệnh LD nạp giá trị logic của một tiếp điểm vào trong bit đầu
Load (LDN): Lệnh LDN nạp giá trị logic nghịch đảo của một tiếp điểm vào trong bit đầu tiên của ngăn xếp , các giá trị cũ còn lại trong ngăn xếp bị đẩy lùi xuống một bit.
OUTPUT (=): Lệnh sao chép nội dung của bit đầu tiên trong ngăn xếp
vào bit đợc chỉ định trong lệnh. Nội dung của ngăn xếp không bị thay đổi.
2.3.2.2. Toán hạng và giới hạn cho phép.
Bảng 2.1. Giới hạn toán hạng của S7-200.
Phơng pháp truy nhập Giới hạn cho phép toán hạng của CPU214
Truy nhập bit (địa chỉ byte chỉ số bit). V (0.0 đến 4095.7) I (0.0 đến 7.7) Q (0.0 đến 7.7) M (0.0 đến 31.7) SM (0.0 đến 85.7) T (0 đến 127) C (0 đến 127) Truy nhập byte VB (0 đến 4095) IB (0 đến 7) MB (0 đến 31) SMB (0 đến 85) AC (0 đến 3) Hằng số Truy nhập từ đơn (địa chỉ byte
cao). VW (0 đến 4094) T (0 đến 127) C (0 đến 127) IW (0 đến 6) QW (0 đến 6) MW (0 đến 30) SMW (0 đến 84) AC (0 đến 3) AIW (0 đến 30) AQW (0 đến 30) Hằng số
Truy nhập từ kép (địa chỉ byte VD (0 đến 4092)
ID (0 đến 4)
QD (0 đến 4)
cao).
SMD (0 đến 82)
AC (0 đến 3)
HC (0 đến 2)
Hằng số
2.3.2.3. Các lệnh ghi/xóa giá trị cho tiếp điểm.
SET (S), RESET (R): Lệnh dùng để đóng và ngắt 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ộn dây đầu ra. Khi dòng điều khiển đến các cuộn 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).
2.3.2.4. Các lệnh logic đại số Boolean.
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.
2.3.2.5. 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 trạng thái của xung (sờn xung) và đảo trạng thái của dòng cung cấp. LAD sử dụng các tiếp điểm đặc biệt để tác động vào dòng cung cấp (giá trị của đỉnh ngăn xế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ớ bởi vậy đối với CPU 212 chỉ có thể sử dụng nhiều nhất 128 lệnh và CPU 214 là 256 lệnh.
Khi lập trình, nếu 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 theo byte, từ hay từ kép của S7-200. LAD sử dụng lệnh so sánh các giá trị của byte, từ và từ kép (giá trị thực hoặc nguyên). Những giá trị so sánh thờng là: so sánh nhỏ hơn hoặc bằng (<=), so sánh bằng (=) và so sánh lớn hơn hoặc bằng (>=).
2.3.2.7. Lệnh nhảy và lệnh gọi 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à 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 trong 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 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 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 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 nó, có thể gọi nh vậy nhiều nhất 8 lần trong S7-200. Đệ quy (trong một chơng trình con có lệnh gọi đến chơng trình chính nó) về nguyên tắc không bị cấm song phải để ý đến giới hạn trên.
2.3.2.8. Các lệnh can thiệp vào thời gian vòng quét.
MEND, END, STOP, NOP, WDR: 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 khoảng thời gian dài của một vòng quét.
Trong LAD và STL chơng trình phải đợc kết thúc 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 nh gặp lệnh STOP trong chơng trình chính
2.3.2.9. Các lệnh can thiệp vào thời gian vòng quét.
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à τ thì tín hiệu đầu ra của Timer đó là x(t-τ).
S7-200 có 64 Timer đối với CPU212 và 128 đối với CPU214 đợc chia làm hai loại khác nhau:
- Timer tạo thời gian trễ không nhớ (TON). - Timer tạo thời gian trễ có nhớ (TONR).
Các loại Timer của S7-200 (đối với CPU 214) chia theo TON, TONR và độ phân giải bao gồm:
Bảng 2.2. Độ phân giải của các Timer
Lệnh Độ phân giải Giá trị cực đại CPU212 CPU214
TON 1ms 32,767 T32 T32, T96 10ms 327,67 T33ữT36 T33ữT36, T97ữT100 100ms 3276,7 T37ữT63 T37ữT63, T101ữT127 TONR 1ms10ms 32,767327,67 T0 T0, T62 T1ữT4 T1ữT4, T65ữT68 100ms 3276,7 T5ữT31 T5ữT31, T69ữT95
Counter là bộ đếm hiện chức năng đếm sờn xung trong S7-2000. Các bộ đếm của S7-2000 đợc chia ra làm 2 loại: bộ đếm tiến (CTU) 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.
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 bit 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 bit thứ 2 của ngăn xếp trong STL.
Giống nh bộ đếm CTU, bộ đếm CTUD cũng đợ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 bit 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-bit của bộ đếm.
2.3.2.11. Các lệnh số học.
Các lệnh số học dùng để thực hiện các phép tính số học trong chơng trình. Các phép tính số học với số thực hoặc với số thực dấu phảy động, và phép biến đổi giữa số thực và số nguyên kiểu từ kép và phép lấy căn.
a. Lệnh cộng (ADD).
ADD_I (LAD), +I (STL): Lệnh thực hiện phép cộng các số nguyên 16-bit IN1 và IN2. Trong LAD kết quả là một số nguyên 16-bit đợ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-bit nhng đợc ghi vào IN2, tức là: IN1 + IN2 = IN2.
ADD_DI (LAD), -D (STL): Lệnh thực hiện phép cộng các số nguyên 32-bit IN1 và IN2. Trong LAD, kết quả là một số nguyên 32-bit đợ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-bit nhng đợc ghi vào IN2, tức là: IN1 + IN2 = IN2.
IN2. Trong LAD, kết quả là một số thực 32-bit đợ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-bit nhng đợc ghi vào IN2, tức là: IN1 + IN2 = IN2.
b. Lệnh trừ (SUB).
SUB_I (LAD), -I (STL): Lệnh thực hiện phép trừ các số nguyên 16-bit IN1 và IN2. Trong LAD kết quả là một số nguyên 16-bit 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-bit nhng đợc ghi lại vào IN2, tức là: IN1- IN2 = IN2.
SUB_DI (LAD), -DI (STL): Lệnh thực hiện phép trừ các số nguyên 32-bit IN1 và IN2. Trong LAD kết quả là một số nguyên 32-bit và đợc ghi vào OUT, tức là: IN1 - IN2 = OUT. Còn trong STL, kết quả là một giá trị 32-bit nhng đợc ghi lại vào IN2, tức là: IN1- IN2 = IN2.
SUB_R (LAD), -R (STL): Lệnh thực hiện phép trừ các số thực 32-bit IN1 và IN2. Trong LAD kết quả là một số thực 32-bit đợc ghi vào OUT, tức là: IN1 - IN2 = OUT. Trong STL, kết quả là một giá trị 32-bit nhng đợc ghi lại vào IN2, tức là IN1- IN2 = IN2.
c. Lệnh nhân (MUL).
Trong LAD: Lệnh thực hiện phép nhân 2 số nguyên 16-bit IN1 và IN2 và cho ra kết quả 32-bit 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-bit n1 và số nguyên chứa trong từ thấp (từ 0 đến bit 15) của toán hạng 32-bit n2 (4 byte). Kết quả 32-bit đợc ghi vào n2.
MUL_R (LAD), +R (STL): Trong LAD: lệnh thực hiện phép nhân hai số thực 32-bit IN1 và IN2 và cho ra kết quả 32-bit chứa trong từ kép OUT (4 byte). Trong STL: Lệnh thực hiện phép nhân giữa số thực 32-bit IN1 và IN2 kết quả 32 bit đợc ghi vào IN2.
Trong LAD: Lệnh thực hiện phép chia số nguyên 16-bit IN1 cho số nguyên 16- bit IN2. Kết quả 32-bit chứa trong từ kép OUT gồm thơng số ghi trong mảng 16-bit từ bit 0 đến bit 15 (từ thấp) và phần d cũng 16-bit ghi trong mảng từ bit-16 đến bit-31 (từ