21 / 100

Phần 2- Cấu hình phần cứng, Network và Tìm hiểu Khối hàm, vùng nhớ

1. Hardware và cấu hình IO

Để cấu hình phần cứng PLC ta vào Device Configuration

1.1.  Rack và slot:

  • Rack_0: rack chứa nhiều Slot, mỗi PLC sẻ có 1 loại rack khác nhau thể hiện PLC đó mở rộng được thêm được mấy Slot
  • Slot: như hình ta thấy CPU PLC gắn ở Slot 1, còn 2 slot sau còn trống là 2 và 3 để gắn các module In/Out khác, còn các Slot trước là 101, 102, 103 thể để gắn các module truyền thông, functions.
  • Để cấu hình thêm IO cho các Slot ta dễ dàng kéo thả các thư viện hardware cần vào là được.

hardware 2

1.2. Cấu hình phần cứng CPU PLC:

Nhấp vào CPU PLC, bài học sẻ tập trung ở 1 vài điểm cần lưu ý, còn lại các cấu hình khác từ từ các bạn sẻ dùng tới và hiểu.

  • General: Thể hiện Tên PLC (Name), Tác giả (Author), Vị trí CPU trên Rack, slot. Các chú thích liên quan mã hang và Firmware của CPU.

hardware 1

  • PROFINET Interface: cấu hình port profinet cho CPU, phần này ta quan tâm:
    • Subnet: khi CPU có kết nối mạng tới HMI hay SCADA hay 1 subnet nào đó thì cần Add thêm Subnet này vào.
    • IP protocol: Ip mặc định thường là 192.168.0.1 với Subnet mask là 255.255.255.0, vấn đề này có thể gây rắc rối chút khi mà router nhà bạn hay công ty kết nối tới PLC cũng thường có Ip trùng thế này, do đó mình nghĩ bạn nên Set lại là 168.0.22 hay .1.33 nào đó tùy bạn, miễn là nên né .0.1. Nếu dùng router thì bạn cài Address cho Router.

hardware 3

  • System and clock memory: System memory bit và clock memory bit giúp bạn tạo ra các bit đặc biết hay dùng trong chương trình như: First scan, Always true, các xung clock 1hz, 2hz, 10hz…..

hardware 4

  • Time of day:

Cấu hình thời gian, múi giờ cho CPU, để khi đọc thời gian thực hay dùng các hàm thời gian sẻ chính xác hơn

hardware 5

  • IO tag: cấu hình tag cho PLC ta vào IO tags và đặt tagname cho các IO theo thiết kế của bạn, gom theo nhóm bằng cách chọn bảng tag (Tag Table)

io tags

Bạn cũng có thể cấu hình tags trong menu PLC Tags, khi các tag trùng nhau bạn sẻ thấy nó hiện màu vàng và cần phải cấu hình lại.

io tags 2

2. Network và cấu hình mạng cơ bản PLC kết nối HMI

Video hướng dẫn

3. Kiểu dữ liệu:

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.

4. Ngôn ngữ lập trình và các khối hàm

4.1. Ngôn ngữ lập trình:

LAD, FBD, STL, SCL hay graph, mình thì hay dùng LAD và SCL, S7 1200 và S7 1500 có hỗ trợ như sau:

ngon ngu lap trinh s7

  • Khi Add các Block để lập trình là lúc bạn chọn lun loại ngôn ngữ coding

s7 them khoi ham

4.2. Các BLock:

Các Block là các khối hàm, mỗi khối hàm thực thi một nhiệm vụ riêng, ví như mỗi người 1 việc, việc của khối hàm nào khối hàm đó xử lý khi nó được gọi ra. Với khối hàm FB hay FC, ta có thể tự tạo ra và code cho nó để sử dụng như các chương trình con.

Organization blocks (OBs), function blocks (FBs), functions (FCs) or data blocks (DBs).

  • Organization blocks (OBs):
    • Vòng quét chương trình chính- Program Cycle: thực thi vòng quét chính chương trình bạn viết.
    • Startup: Khối hàm được gọi khi PLC khởi động (chuyển từ Stop sang RUN), giúp bạn gọi các hàm khởi tạo hay kiểm tra một số thứ trước khi nhảy vào chương trình chính.
    • Time delay interrupt: ngắt để thực thi 1 chương trình sau 1 Timer Delay cài đặt ở cấu trúc “SRT_DINT”.
    • Cyclic interrupt: Ngắt theo chu kỳ thời gian, bạn sẻ vào Properties của nó để cài chu kỳ thời gian ngắt, bạn có thể ứng dụng để cộng giá trị Sum của FlowMeter, chương trình lọc lấy mẫu….
    • Hardware interrupt: Ngắt theo cấu hình ở Hardware, xem trong cài đặt hardware
    • Time error interrupt: Trong cấu hình CPU có cài thời gian vòng quét Max, khi chương trình bạn quá phức tạp hay lỗi gì đó làm cho vòng quét chương trình vượt quá giá trị Max này thì khối hàm này sẻ được gọi để thực thi, nếu không thì PLC sẻ báo lỗi và STOP
    • Diagnostic error interrupt: Khi Module bị lỗi gì đó thì khối hàm này được gọi ra, nếu không thì PLC sẻ báo lỗi và STOP
    • Pull or plug of modules: khi tháo hay ráp thay thế Module thì khối hàm này được gọi ra, nếu không thì PLC sẻ báo lỗi và STOP
    • Rack or station failure: Gọi khi rack bị lỗi hay trạm Remote IO nào đó bị lỗi do truyền thông hay Module.
    • Time of day: cài đặt gọi theo thời gian cố định trong ngày.
    • Số lượng các OB cho phép:

So luong OB S7

  • FB: Function Block giúp bạn tạo chương trình con, khi gọi FB thì 1 Data Block sẻ được sinh ra và đi kèm, việc này khiến bạn dễ bị ngốn tài nguyên vùng nhớ nếu không biết cách sử dụng tối ưu, việc gắn tag In Out cho các FB có thể không cần, vì nội tại nó đã có Data tham chiếu.
  • FC: Function giúp bạn tạo chương trình con, khi gọi FC thì ko có data block nào được tạo ra kèm, và bạn phải gắn các biến tham chiếu cho chương trình, không nó sẻ có dấu ??? lỗi!
  • DB: là các data block,giúp bạn thiết lập, tạo các biến, tag vùng nhớ DB
  • Số lượng và kích thước vùng nhớ tối đa cho phép của DB/FC/FB:

block size s7

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

optimize block

  • 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é.

optimize block3

Còn Set Optimized hay Non thì vào Properties của Block mà set nhé:

optimize block2

 

HỌC TIẾP PHẦN 3- HỌC CÁC TẬP LỆNH TRONG PLC S7 VỚI NGÔN NGỮ LADDER

Mời bạn comment góp ý để chúng tôi hoàn thiện khóa học được tốt hơn, cám ơn,

 

 113 total views