Định địa chỉ Bit và các phép Dịch/Xoay Bit trên Siemens S7-300
PLC10 tháng 7, 2026· 7 phút đọc · 1 lượt xem

Định địa chỉ Bit và các phép Dịch/Xoay Bit trên Siemens S7-300

Tìm hiểu cách định địa chỉ bit trên Siemens S7-300, các lệnh Shift/Rotate, kỹ thuật xử lý bit và những lưu ý quan trọng khi lập trình PLC.

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ỉ Bit

Ví 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.7

khô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:

  1. Đọc giá trị từ MW4

  2. Dịch trái 1 bit

  3. Ghi kết quả vào MW6


Shift Left Double Word (SLD)

L     MD4
SLD   1
T     MD8

Ý nghĩa:

  1. Đọc MD4

  2. Dịch trái 1 bit

  3. 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

↓

...

↓

1000000000000000

Sau 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 DWORD

Mả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:

LAR1

và Pointer kiểu:

P#DBX0.0

cầ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     MW22

Nế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
MW6

Không nên dùng:

MW3

vì 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 bit

Double Word:

0 → 31 bit

Nế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.

Chưa biết chọn UPS công suất bao nhiêu?
Nhập danh sách thiết bị, công cụ sẽ tính tự động và gợi ý model phù hợp.
Tính công suất miễn phí

Cần tư vấn giải pháp UPS?

UPSsmart hỗ trợ tư vấn miễn phí, không ràng buộc.