
Định địa chỉ Bit và các phép Dịch/Xoay Bit trên Siemens S7-300
1. Tổng quan
Bài viết này trình bày cách định địa chỉ từng bit (Bit Addressing) trong PLC Siemens S7-300, các lệnh Shift (dịch bit), Rotate (xoay bit) và phương pháp dịch chuyển tuần tự một bit qua nhiều Word.
Đây là những kỹ thuật rất quan trọng khi xây dựng:
Điều khiển tuần tự (Sequential Control)
Xử lý từng bit (Bit Manipulation)
Đèn báo chạy (Running Light)
Thanh LED chạy
Điều khiển theo từng vị trí
Các thuật toán dịch thanh ghi (Shift Register)
2. Cách định địa chỉ bộ nhớ trên S7-300
PLC Siemens S7-300 sử dụng cách tổ chức vùng nhớ khác với Allen-Bradley.
Do đó, việc hiểu rõ ranh giới giữa các Byte là rất quan trọng.
Kích thước các vùng nhớ
Kiểu dữ liệu | Kích thước | Ví dụ | Phạm vi Byte |
|---|---|---|---|
MB (Mark Byte) | 8 bit | MB4 | Byte số 4 |
MW (Mark Word) | 16 bit | MW4 | Byte 4 và Byte 5 |
MD (Mark Double Word) | 32 bit | MD4 | Byte 4, 5, 6 và 7 |
Cú pháp truy cập từng bit
Định dạng:
Vùng nhớ.Địa chỉ BitVí dụ:
M4.7→ Bit số 7 (MSB) của Byte 4
Đồng thời cũng chính là:
→ Bit số 0 của Word MW4
M5.0→ Bit thấp nhất (LSB) của Byte 5
Đồng thời cũng là:
→ Bit số 8 của MW4
MD4.0→ Bit đầu tiên của Double Word MD4
Lưu ý quan trọng
Siemens đánh số bit theo chuẩn IEC:
Bit 0 là bit ngoài cùng bên phải (Least Significant Bit)
Bit 7 là bit ngoài cùng bên trái (Most Significant Bit)
Ví dụ:
M4.7không có nghĩa là "Byte 4 chấm 7" theo số thập phân, mà là bit số 7 của Byte số 4.
3. Các phép dịch bit trong Ladder và STL
PLC S7-300 cung cấp nhiều lệnh chuyên dụng để dịch bit trong Word và Double Word.
Shift Left Word (SLW)
Ví dụ:
L MW4
SLW 1
T MW6Ý nghĩa:
Đọc giá trị từ MW4
Dịch trái 1 bit
Ghi kết quả vào MW6
Shift Left Double Word (SLD)
L MD4
SLD 1
T MD8Ý nghĩa:
Đọc MD4
Dịch trái 1 bit
Ghi kết quả sang MD8
Bit trạng thái CC1
Sau mỗi phép dịch bit, PLC sẽ ghi giá trị của bit bị đẩy ra ngoài vào cờ trạng thái CC1 (Condition Code 1).
Nhờ đó chương trình có thể:
phát hiện tràn dữ liệu,
truyền bit sang Word kế tiếp,
hoặc thực hiện phép xoay qua nhiều Word.
4. Dịch chuyển một bit qua nhiều Word
Một ứng dụng rất phổ biến là làm cho một bit "1" chạy lần lượt từ bit 0 đến bit 15.
Ví dụ:
0000000000000001
↓
0000000000000010
↓
0000000000000100
↓
...
↓
1000000000000000Sau khi chạy đến bit cuối cùng, chương trình sẽ quay lại bit đầu tiên.
Ví dụ STL trong bài viết minh họa:
kiểm tra vị trí hiện tại,
nếu chưa đến cuối thì dịch trái,
nếu đã đến bit cuối thì reset về bit đầu tiên.
Đây là nguyên lý thường dùng để tạo:
đèn LED chạy,
hiệu ứng xoay bit,
thanh ghi dịch (Shift Register),
bộ đếm dạng bit.
5. Sử dụng mảng với địa chỉ gián tiếp
Nếu cần thao tác với nhiều Double Word liên tiếp, Siemens cho phép sử dụng Indirect Addressing thông qua con trỏ (Pointer).
Khai báo mảng
Ví dụ trong Data Block:
Rotating_Array : ARRAY[1..16] OF DWORDMảng gồm 16 phần tử kiểu DWORD.
Xoay dữ liệu trong mảng
Chương trình STL thực hiện:
phát hiện xung kích hoạt,
tăng chỉ số mảng,
tính địa chỉ bằng Pointer,
đọc DWORD,
dịch trái,
ghi lại vào đúng phần tử.
Đây là kỹ thuật rất mạnh khi xử lý:
nhiều vùng nhớ liên tiếp,
bảng dữ liệu,
FIFO,
Shift Register kích thước lớn.
Lưu ý về phép tính Pointer
Khi dùng:
LAR1và Pointer kiểu:
P#DBX0.0cần nhớ rằng Pointer luôn trỏ đến bit đầu tiên của Byte đầu tiên.
Đối với mảng DWORD:
mỗi phần tử có kích thước 4 Byte,
vì vậy cần nhân chỉ số với 4 để tính Offset Byte trước khi truy cập.
6. Tách một bit bằng phép AND
Một cách đơn giản để lấy trạng thái của một bit là sử dụng phép AND với mặt nạ (Mask).
Ví dụ lấy bit số 5 của MW20:
L MW20
L W#16#0020
AW
T MW22Nếu:
Bit 5 = 0
→ kết quả bằng 0
Nếu:
Bit 5 = 1
→ kết quả bằng 32 (2⁵)
Một phương pháp khác là dịch bit cần lấy về vị trí bit 0 trước khi kiểm tra.
7. Những lỗi thường gặp
7.1. Địa chỉ Word không đúng ranh giới Byte
Nên dùng:
MW2
MW4
MW6Không nên dùng:
MW3vì sẽ gây lệch dữ liệu.
7.2. Dịch quá số bit cho phép
Word chỉ nên dịch:
0 → 15 bitDouble Word:
0 → 31 bitNếu vượt quá giới hạn, kết quả sẽ không xác định.
7.3. Không phát hiện cạnh xung (Edge Detection)
Nếu logic xoay bit không dùng phát hiện cạnh lên (Positive Edge) hoặc cạnh xuống (Negative Edge), chương trình sẽ dịch bit ở mọi chu kỳ quét (Scan Cycle).
Kết quả là bit sẽ chạy quá nhanh và khó kiểm soát.
7.4. Không sử dụng cờ CC1
Khi bit bị dịch ra khỏi Word, giá trị đó được lưu trong CC1.
Nếu bỏ qua CC1, việc xoay bit qua nhiều Word hoặc Double Word sẽ không chính xác.
8. Bảng tổng hợp
Thông số | Word (MW) | Double Word (MD) |
Kích thước | 16 bit | 32 bit |
Số bit được phép dịch | 0–15 | 0–31 |
Lệnh dịch | SLW / SRW | SLD / SRD |
Lệnh xoay | RLD / RRD | RLD / RRD |
Căn chỉnh địa chỉ | Địa chỉ chẵn | Địa chỉ chia hết cho 4 |
9. Tài liệu tham khảo
Để tìm hiểu đầy đủ về tập lệnh và kiến trúc của Siemens S7-300, bạn có thể tham khảo:
SIMATIC S7-300 CPU 31xC và CPU 31x – Technical Data (Mã tài liệu: 6ES731x-xxx).
Programming with STEP 7 (Mã tài liệu: 6ES7810-4CA10-8BW1), tài liệu hướng dẫn chi tiết về lập trình STL, LAD và các ngôn ngữ trong STEP 7.






