1- Các vùng nhớ PLC
1.1- Thẻ nhớ: có thể dùng thẻ nhớ để mở rộng Load memory cho PLC
Thẻ nhớ cho PLC S7 1200 là 1 thẻ SD được format theo định dạng Siemens để tương thích với PLC S7 1200. Tính năng chung của thẻ nhớ S7 1200 là:
- Lưu trữ dữ liệu dạng: file datalog, file báo cáo, report, txt….. từ PLC
- Dùng để tải chương trình vào PLC (Transfer): ví dụ bạn không có cách nào load chương trình plc vào, hay khi plc bị lỗi load hoài không được, bạn có thể load chương trình vào thẻ nhớ rồi để thẻ nhớ ở chế độ Transfer, gắn vào PLC, khởi động lại là chương trình sẻ load vào PLC.
Tính năng này hay dùng khi PLC bị lỗi không kết nối được, hoặc do password cài full không read/write chương trình PLC được , ta sử dụng thẻ nhớ với chức năng này để xóa hết chương trình PLC và trả về mặc định.
- Chế độ Program (chế độ thẻ nhớ SD thay thế Load Memory của PLC): cài đặt chế độ cho thẻ nhớ là Program, gắn vào PLC là bạn có thể dùng thẻ nhớ để lưu trữ chương trình PLC, thẻ nhớ lúc này sẻ thay thế vùng nhớ load Memory trong PLC, nó sẻ chứa chương trình chạy và mất thẻ nhớ là chương trình không chạy.
- Update Firmware: có thể dùng thẻ nhớ để update firmware cho CPU
Thao tác cấu hình thẻ trên máy tính: gắn thẻ vào máy tính
1.2- Load Memory
Load Memory có thể so sánh nó như ổ cứng trên máy tính, dùng chứa dữ liệu chương trình mà ta download xuống. Load memory có thể bị thay thế bằng thẻ nhớ ngoài. Để vô hiệu hóa chức năng đó ta vào Hardware và nhấn chọn Disable tính năng này nhé.
Nếu bạn không nhấn chọn “Disable copying from internal load memory to external load memory” thì khi gắn thẻ nhớ với chế độ Program, vùng nhớ Load Memory của PLC sẻ chuyển sang chỗ ở mới là trên thẻ nhớ.
Load Memory chứa:
- Khối hàm chương trình: OB, FC, FB
- Data Blocks (DB)
- Cấu hình phần cứng (Hardware Config)
- Technology object.
1.3- Work Memory
Work Memory có thể so sánh như là RAM trên máy tính. Work memory dùng lưu trữ các thành phần của chương trình đang được gọi ra để thực thi. Và tất nhiên là vùng nhớ không Retain (tức là không tự nhớ).
Work memory chứa code thực thi như: FC, FB, OB và Data thực thi được gọi ra từ các khối data DB, Technology object. Thực thi bạn nào thì bạn đó sẻ được lôi ra Work memory để làm việc.
1.4- Retentive Memory
Là vùng nhớ mà khi mất điện có lại các dữ liệu vẫn ghi nhớ số liệu trước đó.
Vùng nhớ Retentive Memory sẻ giúp lưu trữ lại dữ liệu cho:
- Khối dữ liệu Data Blocks (DB),
- Các data block của Technology object,
- Vùng nhớ Bit Memory/ timer/ counter từ Additional memory (riêng với s7 1500 với thiết lập Retentive được cho timer, counter).
Khi PLC RUN thì vùng nhớ nào được người dùng chọn là Retain sẻ được lưu trữ dữ liệu vào vùng nhớ Retentive Memory, khi mất điện và có lại, dữ liệu của các vùng nhớ đó sẻ được lấy lại từ Retentive Memory.
Tất nhiên lượng vùng nhớ Retentive Memory sẻ có giới hạn tùy từng PLC.
1.5- Additional memory
Vùng nhớ thêm của PLC gồm: Bit Memory, timer và counter, các dữ liệu tạm Temporary local data, các IO dạng process image.
1.6- Kiểm tra vùng nhớ PLC đã dùng
2. Kiểu dữ liệu trong S7:
Trong quá trình lập trình bạn sẻ cần khai báo các biến, tags, và bạn cần ép kiểu cho nó. Kiểu dữ liệu cơ bản giống nhau ở tất cả các loại PLC là:
Bit, trong siemens định nghĩa kiểu bool, giá trị trả về là true or false, hay 1 hoặc 0
Byte=8 bits,
Word=2 bytes=16 bits, tùy kiểu sắp xếp bit mà có kiểu word hay int…
Double word=2 words = 4 bytes= 32bit, , tùy kiểu sắp xếp bit mà có kiểu double word hay double int hay real…
Với Siemens ta sẻ quan tâm ở mấy kiểu thông dụng sau:
- Elementary data types (binary numbers, integers, floating-point numbers, timers, DATE, TOD, LTOD CHAR, WCHAR): kiểu dữ liệu đơn định dạng sẵn của Siemens, phần này sẻ dùng tương đối nhiều và với bạn mới bắt đầu thì nên lưu ý mấy kiểu thông dụng sau:
- bool (định nghĩa 1 bit, trả về true or false), ví dụ: input là I0.0, Output là Q0.0, Data block là: data.%X0, db1.dbx0.1….
- Byte (trả về 1 giá trị Hex hay 8Bits), ví dụ: input là IB0, Output là QB0, Data block là: DB1.DBB0….
- int (trả về 1 giá trị interger 16bit), ví dụ: input là IW0, Output là QW0, Data block là: DB1.DBW0….
- real (trả về giá trị 1 số thực), ví dụ: input là ID0, Output là QD0, Data block là: DB1.DBD0…. ép kiểu khi khai báo tag là real
- Dint (trả về giá trị là 1 số double interger 32bit), ví dụ: input là ID0, Output là QD0, Data block là: DB1.DBD0…. ép kiểu khi khai báo tag là Dint
- char (trả về 1 ký tự).
- Complex data types (DT, LDT, DTL, STRING, WSTRING, ARRAY, STRUCT): kiểu dữ liệu theo 1 cấu trúc định sẵn của Siemens.
- DT-Date and Time: trả về giá trị ví dụ DT#2008-10-25-08:12:34.567, DATE_AND_TIME#2008-10-25-08:12:34.567
- TOD- Time Of Day: trả về giá trị thời gian trong ngày, ví dụ: TOD#10:20:30.400, TIME_OF_DAY#10:20:30.400
- LDT- Date and Long Time: trả về giá trị thời gian tới tận nano giây, ví dụ: LDT#2008-10-25-08:12:34.567
- STRING: Một chuỗi các ký tự ASCII
- User-defined data types (PLC data type (UDT)): kiểu dữ liệu do bạn tự thiết kế trong User-defined data types Menu: PLC data types
- Pointer: con trỏ tới 1 tag nào đó
- Parameter types: các kiểu dữ liệu định nghĩa theo nhóm các tham số
- System data types: các kiễu dữ liệu đã được hệ thống định nghĩa sẵn.
- Hardware data types: kiểu dữ liệu định nghĩa 1 phần cứng nào đó trong cấu hình Hardware.
3- Khai báo biến trong PLC S7
Với PLC S7, ký hiệu các biến khai báo theo vùng nhớ và kiểu data như sau:
Vùng nhớ | Mô tả | Kiểu Data | S7 Ký hiệu | Ví dụ |
Output | Các tín hiệu đầu ra PLC | Output (bit) | Q | Q0.0 |
Output byte | QB | QB0 | ||
Output word | QW | QW0 | ||
Output double word | QD | QD0 | ||
Input | Các tín hiệu đầu vào PLC | Input (bit) | I | I0.0 |
Input byte | IB | IB0 | ||
Input word | IW | IW0 | ||
Input double word | ID | ID0 | ||
Bit memory | Vùng nhớ trung gian | Bit memory (bit) | M | M0.0 |
Memory byte | MB | MB0 | ||
Memory word | MW | MW0 | ||
Memory double word | MD | MD0 | ||
Data block | Vùng nhớ DB | Data bit | DBX | DB1.DBX0.0 |
Data byte | DBB | DB1.DBB0 | ||
Data word | DBW | DB1.DBW0 | ||
Data double word | DBD | DB1.DBD0 | ||
Local data | Biến nhớ tạm dùng bên trong các Block chương trình. Để dùng thì cần bỏ chọn “Optimized block access” | Local data bit | L | L0.0 |
Local data byte | LB | LB0 | ||
Local data word | LW | LW0 | ||
Local data double word | LD | LD0 |
Trong Siemens thì khái báo biến quy định rõ: 1Byte=8bit, 1word = 2byte = 16bit, 1double word= 2word=4byte= 32bit, do đó khai báo tag các bạn lưu ý không sẻ dễ nhầm lẫn với hãng khác, ví dụ:
Khai báo MD0 sẻ chứa MW0 và MW1, chứa MB0, MB1, MB2, MB3, chứa bit M0,0 tới bit M3.0. Nên đã khai báo MD0 thì sẻ không khai báo dùng chỗ khác thêm các biến mà MD0 chứa. Tương tự với các khai báo tag với vùng nhớ khác. Ví dụ: khai báo double word thì cách 4 MD0 -> MD4 -> MD8 hay khai báo word thì cách 2: MW0 -> MW2-> MW4
Cách truy xuất biến trong S7 có 2 cách:
- Theo địa chỉ vùng nhờ như đã nói ở trên, ví dụ: M0.0, MD4…
- Theo Symbolic: tức là theo ký tự định danh vùng nhớ, ví dụ trong các Data Block (DB), khi bạn cấu hình nó là Optimized thì mặc định việc truy xuất biến sẻ thông qua Sumbolic (tức là thông qua tên của biến), do với Optimized Block thì địa chỉ vùng nhớ sẻ không có.
Xem chi tiết mục sau để hiểu rõ Optimized và non-optimized nhé.
4. Cách lưu trữ dữ liệu vào bộ nhớ
Việc lưu trữ dữ liệu vào bộ nhớ có 2 cách sắp xếp ngược nhau là: Little-Endian và Big Endian, tạm hiểu là như này
- Little Endian:dữ liệu được sắp xếp vào vùng nhớ từ Byte nhỏ nhất (Least Significant Byte (LSB)) trong vùng nhớ. Việc này giúp tiết kiệm và tối ưu vùng nhớ, hỗ trợ Processor truy vấn nhanh data, tuy nhiên với người lập trình thì nó khó debug hơn Big Endian.
- Big Endian:thì ngược lại, dữ liệu được sắp xếp từ Byte lớn nhất (Most Significant Byte (MSB) trong vùng nhớ. TCP, UPD, IPv4 và IPv6 và nhiều giao thức đóng gói kiểu dữ liệu truyển nhận theo Big Endian do dễ debug và truy xuất theo Address vùng nhớ dễ hơn, việc sắp xếp từ lớn tới nhỏ cũng tương thích với kiểu sắp xếp trong truyền thông là đi từ địa chỉ lớn tới nhỏ. Mình thì hiểu đơn giản vậy, chứ kỳ thực cũng phức tạp, bạn nào hiểu rõ chia sẻ thêm với nhé.
Siemen S7300/400 dùng lưu trữ kiểu Big Endian, sau này S7 1200/1500 phát triển sử dụng Little Endian để tối ưu lưu trữ và tối ưu việc truy vấn data của Prossesor, tuy nhiên vẫn không thể không dùng Big Endian để hỗ trợ cho các dòng S7300/400 đang lơ lửng trên thị trường và nhiều ứng dụng cần tới như truyền thông….
Căn cứ theo đó mà sinh ra : Optimized blocks và Non-Optimized blocks
- Optimized blocks: sử dụng Little-Endian và Processor có thể truy vấn trực tiếp do khớp nhau và được Siemens khuyến khích sử dụng, do tính năng vượt trội trong việc lưu trữ và tối ưu truy vấn từ Processor, còn người dùng thì truy vấn chỉ qua Symbolic (theo biến user đặt) chứ không gọi được các địa chỉ (theo kiểu: %DB1.DBD0). Quan sát hình bạn cũng thấy Optimized block lưu trữ rất tối ưu. Vùng nhớ Retain được tách riêng ra hẵn nên khi khai báo là Optimized block, bạn có thể tùy chọn Biến nào mún Retain.
- Non-Optimized blocks:sử dụng Big-Endian và cần thêm bước chuyển đổi qua Little-Endian khi Processor truy vấn, ngốn tài nguyên nên Siemen không khuyên dùng, được cái dễ dùng nên khi bạn mún truy vấn bằng Symbolic hay địa chỉ (kiểu %DB1.DBX0.0) cũng vô tư, trong block sẻ hiện kèm giá trị Offset chính là địa chỉ truy vấn, cài mà Optimized Block không có được. Với kiểu này thì bạn chọn Retain là phải Retain hết lun cả block, do đó lạm dụng quá là không tốt cho CPU nhé.
Còn Set Optimized hay Non thì vào Properties của Block mà set nhé:
0 nhận xét:
Đăng nhận xét