GIỚI THIỆU
Hôm nay itudong.com sẽ giới thiệu cho các bạn một bài viết vỡ lòng khi bắt đầu tiếp cận với việc lập trình PLC. Chủ đề hôm nay sẽ liên quan đến việc sắp xếp địa chỉ của bộ nhớ trong PLC và cách để chúng ta khai báo đúng, không bị trùng lặp hoặc sai sót khi sử dụng các bộ nhớ này.
Trong PLC có nhiều loại ô nhớ khác nhau, tùy thuộc vào từng dòng và từng hãng sản xuất. Tuy nhiên, tuy gọi tên khác nhau nhưng chúng đều tuân thủ theo quy tắc sắp xếp thứ tự các ô nhớ trong chương trình. Ở đây, để các bạn dễ tiếp cận, mình sẽ lấy ví dụ ở dòng PLC thông dụng là PLC của hãng Siemens nhé.
Trong PLC của hãng Siemens, chúng ta sẽ có các bộ nhớ M, I, Q, DB… mỗi loại sẽ có đặc tính và chức năng khác nhau. Tuy nhiên, khi gọi các địa chỉ trong bộ nhớ này, kỹ sư phải tuân thủ theo các quy tắc đã định sẵn. Ví dụ nếu biến kiểu bit thì M1.1, kiểu byte thì IB10, word thì QW0, kiểu double word thì MD10… Khi nhìn vào các địa chỉ này thì chữ cái đầu tiên là tên bộ nhớ cần truy cập, chữ cái tiếp theo là kiểu dữ liệu, và chữ số cuối cùng cho ta biết địa chỉ của ô nhớ đó. Một vấn đề rất phổ biến khi các bạn lập trình PLC là nên chọn địa chỉ nào và làm sao biết vùng địa chỉ đó đã sử dụng hay chưa. Mình sẽ hướng dẫn các bạn nhé!
CẤU TRÚC ĐỊA CHỈ BỘ NHỚ PLC
Trên thị trường hiện nay, tùy theo từng hãng PLC mà sẽ có cách sắp xếp bộ nhớ khác nhau. Tuy nhiên, chúng được quy thành 2 nhóm chính. Nhóm thứ nhất, ví dụ như hãng Mitsubishi, bộ nhớ địa chỉ được tách riêng ra giữa vùng bit, byte và word. Ví dụ khi dùng bit, họ sẽ dùng M0, M1, M2… Khi dùng word hoặc double word, họ sẽ dùng D0, D1, D2… Do đó sẽ không có hiện tượng bị trộn lẫn giữa vùng nhớ bit và dùng nhớ word. Ở nhóm thứ hai, ví dụ hãng Siemens thì bộ nhớ được chia sẻ dùng chung lẫn nhau giữa bit, byte, word và double word. Do đó, khi sử dụng các loại ô nhớ này sẽ có hiện tượng chồng lấn bộ nhớ xảy ra nếu các bạn gọi địa chỉ không chính xác.
Các PLC của hãng Siemens đều dùng cấu trúc địa chỉ như hình ảnh minh họa dưới đây. Từ dòng PLC cũ đến dòng PLC mới nhất đều tuân thủ theo quy tắc này. Trong hình, bộ nhớ M được lấy làm ví dụ minh họa. Các bộ nhớ khác: I, Q, DB… hoàn toàn tương tự.
Theo đó, bit là đơn vị nhỏ nhất. Mỗi byte sẽ bao gồm 8 bit. Mỗi word sẽ bao gồm 2 byte và mỗi double word sẽ bao gồm 4 byte. Và số đằng sau cho biết byte thấp nhất mà địa chỉ đó đang sử dụng.
Ví dụ:
- MB0 sẽ bao gồm 8 bit M0.0, M0.1… đến M0.7.
- MW0 sẽ bao gồm MB0 và MB1. MW2 sẽ bao gồm MB2 và MB3.
- MD0 sẽ bao gồm MB0, MB1, MB2 và MB3. MD4 sẽ bao gồm MB4, MB5, MB6 và MB7.
Nếu chúng ta hiểu về không gian địa chỉ của bộ nhớ này thì vấn đề chồng lấn ô nhớ khi lập trình PLC sẽ không xảy ra nữa.
MỘT SỐ VÍ DỤ KHI SỬ DỤNG ĐỊA CHỈ TRONG PLC
Chúng ta sẽ cùng xem 2 ví dụ để các bạn thấy rõ cách sử dụng địa chỉ ô nhớ khi lập trình PLC nhé.
Ví dụ 1: Khai báo 1 biến kiểu Bit, 3 biến kiểu Word và 1 biến kiểu Double word.
- Trong ví dụ này, biến Tag đầu tiên các bạn sử dụng M0.1
- Biến Tag tiếp theo các bạn sử dụng kiểu word thì sẽ khai báo MW2. Bởi vì MW0 đã bao gồm MB0 và MB1 rồi nên MB0 sẽ chồng lấn với bit M0.1 đã sử dụng ở trên.
- Hai biến word tiếp theo chúng ta sẽ khai báo địa chỉ tiếp theo là MW4 và MW6.
- Biến tag cuối cùng là kiểu Double word nên sẽ khai báo là MD8. Bởi vì địa chỉ MD0 và MD4 đã được sử dụng trong các biến trước đó.
Ví dụ 2:
- Trong ví dụ này, các bạn khai báo biến đầu tiên kiểu byte và sử dụng địa chỉ MB0.
- Biến word tiếp theo, các bạn sử dụng địa chỉ MW6.
- Như vậy nếu khai báo biến kiểu Double word thì chúng ta có thể sử dụng MD2 mà không bị chồng lấn.
LÀM THẾ NÀO ĐỂ KHÔNG BỊ CHỒNG LẤN Ô NHỚ TRONG CHƯƠNG TRÌNH
Cách tốt nhất để không bị chồng lấn là chúng ta sẽ để cho chương trình tự tìm và sắp xếp ô nhớ để sử dụng. Các chương trình lập trình ngày nay có chức năng nhận biết ô nhớ nào đã sử dụng và tự động tăng dần chỉ số để sử dụng các ô nhớ kế tiếp mà không sợ bị chồng lấn.
Khi lập trình PLC, các bạn chỉ cần khai báo tên của Tag cần sử dụng. Sau đó, chương trình sẽ sắp xếp địa chỉ ô nhớ tương ứng cho Tag vừa tạo ra. Các bạn đừng nhập địa chỉ trực tiếp khi lập trình nhé.
Ví dụ khi lập trình hàm tính cộng. Các bạn sẽ nhập tên Tag vào các ngõ In/Out.
Sau đó nhấn chuột phải và chọn Define Tag để khai báo kiểu và địa chỉ cho Tag. Lúc này, sau khi chọn kiểu là Int và vùng dữ liệu bộ nhớ M thì chương trình sẽ tự khai báo địa chỉ là MW0 do chưa có địa chỉ M nào được sử dụng trước đó.
Tương tự, nếu chúng ta khai báo thêm các biến Tag khác trong vùng nhớ M thì địa chỉ sẽ được chương trình tự điền vào theo thứ tự tăng dần.
Như các bạn thấy, chúng ta đã khai báo theo kiểu nhập tên cho Tag trước, rồi sau đó chương trình sẽ điền địa chỉ tương ứng cho Tag sau. Khi thực hiện theo kiểu này thì các bạn sẽ không cần lo lắng về chồng lấn dữ liệu do chương trình sẽ nắm rõ địa chỉ nào đã sử dụng và vùng ô nhớ nào đang trống để điền vào. Ngoài ra, do điền tự động theo thứ tự tăng dần nên tài nguyên bộ nhớ sẽ được tiết kiệm nhất.
Chi tiết ví dụ này các bạn xem thêm trong Video phía dưới bài viết nhé.
CÁCH KIỂM TRA CHỒNG LẤN ĐỊA CHỈ TRONG CHƯƠNG TRÌNH TIA PORTAL
Trong chương trình TIA Portal, các bạn có thể kiểm tra các địa chỉ ô nhớ nào đã được sử dụng và phát hiện vùng nhớ bị chồng lấn bằng cách vào Menu Program Info -> Chọn mục Assignment list
Ví dụ như trong hình, các bạn có thể thấy Tag có địa chỉ M9.4 đã bị chồng lấn vùng nhớ với MD6 (bao gồm MB6->MB9). Điều này nếu lập trình trong chương trình lớn thì khó nhận biết bằng mắt thường được.
Có một điều mình cần lưu ý các bạn là việc khai báo các vùng nhớ chồng chéo không phải là một lỗi lập trình. Vì vậy chương trình lập trình sẽ không báo lỗi cho chúng ta biết. Bởi vì các kỹ sư có thể tận dụng việc chồng lấn dữ liệu để thực hiện cho các tác vụ mà họ mong muốn. Ví dụ: khi dùng thanh ghi dịch hoặc hoán đổi byte thấp byte cao khi truyền thông…
Một lưu ý thêm nữa là như ban đầu mình có nói, trong bài viết đang áp dụng ví dụ cho vùng nhớ M. Các vùng nhớ khác I, Q, DB cũng hoàn toàn tương tự nhé các bạn.
Video bài viết:
(iTudong.com – Kiến thức Tự động hóa)