Tự học PLC, HMI- Phần 4 Học các tập lệnh PLC S7 với ngôn ngữ Ladder

70 / 100

Học các tập lênh với ngôn ngữ Ladder

GIỚI THIỆU:

Các bạn thân mến,

Tập lệnh tựa như các chiêu thức mà bạn có thể nhìn đối tượng rồi áp dụng đúng thì chương trình của bạn sẻ tối ưu, gọn gàng và chuyên nghiệp.

Nhiều bạn thường bỏ qua việc luyện tập lệnh, tuy nhiên việc đó dễ gây chương trình không tối ưu vì chưa sử dụng đúng lệnh đúng việc.

Ví dụ đơn giản: bài toán đặt ra tìm giá trị min và max của vài dãy số, nếu bạn chưa luyện tới nới thì thường ngồi và viết hàm so sánh này nọ, dài và rất ngốn tài nguyên. Thay vì không biết rằng trong tập lệnh có hàm Min hay Max chỉ cần lôi ra dùng…

Khi bạn thành thạo tập lênh, bạn sẻ dễ dàng biêt áp dụng đúng giúp chương trình rất tinh gọn cho ra kết quả tốt mà tối ưu được tài nguyên hạn hẹp của PLC. 

1. Bit logic operations

Tập lênh xử lý Bit hầu như các PLC đều khá giống nhau, nên luyện Siemens rùi qua hãng khác cũng sẻ học nhanh và áp dụng được. Bit thì chỉ có 0 hoặc 1, hay true or false, do đó việc xử lý khá đơn giản thường thì là: thường đóng, thường mở, đảo bit, gài bit, lấy xung của bit….

Video luyện cùng bạn:

Diễn giải tập lệnh:

Số Diễn giải
1 Tiếp điểm thường hở NO
2 Tiếp điểm thường đóng NC
3 Đảo trạng thái ngay sau lệnh NOT
4 Bit trả về (tagout) hay hiểu là cuộn coil
5 Đảo trạng thái ngay bit trả về (tagout) hay cuộn coil
6 Reset bit về false (0)
7 Set bit lên true (1)
8 SET_BF Set 1 chuỗi các bit
9 RESET_bf Reset 1 chuỗi các bit
10/11 SR/RS Set/reset flip-flop
12 Lấy 1 xung cạnh lên
13 Lấy 1 xung cạnh xuống
14/15 Set tagout on chỉ 1 xung lên hay 1 xung xuống

2. Timer operations:

Timer sử dụng rất nhiều khi lập trình hệ thống hay máy, để đảm bảo tuần tự bạn luôn cần khống chế thời gian phù hợp đáp ứng của các đối tượng

Video luyện cùng bạn:

Diễn giải tập lệnh:

Số Diễn giải
1 TP- Tạo 1 xung on ở đầu ra Q trong thời gian PT set khi đầu vào IN kích on
2 TON- Timer on Delay, on ở đầu ra Q sau 1 thời gian đặt PT khi đầu vào IN kích on, khi IN kích off thì đầu ra Q off
3 TOF- Timer off Delay, bình thường on ở đầu ra Q khi IN kích, sau 1 thời gian đặt PT khi đầu vào IN kích off thì đầu ra Q sẻ off,
4 TON- Timer on Delay cần Reset, on ở đầu ra Q sau 1 thời gian đặt PT khi đầu vào IN kích on, khi IN kích off thì đầu ra Q vẫn on, đầu ra Q chỉ off khi kích Reset

3. Counter operations

Tập lênh giúp bạn quản lý việc đếm lên, đếm xuống, lưu trữ kết quả đếm, xóa kết quả đếm….

Video luyện cùng bạn:

Diễn giải tập lệnh:

Số Diễn giải
1 CTU- counter up: đếm lên khi đầu vào CU on 1 xung lên, PV là giá trị preset Value đặt ngưỡng đếm, giá trị đếm >=PV thì Output Q sẻ on, CV thể hiện giá trị đang đếm tới, Reset để trả giá trị đếm về 0
2 CTD- counter down: đếm xuống khi đầu vào CD on 1 xung lên, PV là giá trị preset Value đặt ngưỡng đếm, giá trị đếm <=0 thì Output Q sẻ on, CV thể hiện giá trị đang đếm tới, LD on lên thì giá trị PV sẻ được load vào giá trị đang đếm của counter.
3 CTUD- counter up/down: đếm lên khi đầu vào CU on 1 xung lên, đếm xuống khi đầu vào CD on 1 xung lên, các chưng năng khác tương tự CTU, CTD

4. Comparator operations

So sánh là 1 phần không thể thiếu để bạn xử lý nhiều tình hướng lên quan tới giá trị của một đại lượng nào đó, ví dụ nhiệt độ cao thì mở van, thấp thì đóng van…., bạn chỉ cần lôi hàm so sánh giá trị nhiệt độ với điểm đặt và cho ra kết quả. Siemens còn đặc biết có In range và Out Range giúp bạn quản lý 1 đại lượng nằm trong 1 phạm vi hay ngoài phạm vị nhanh chóng, 1 lệnh hay mà nhiều người thường bỏ qua nhé.

Video luyện cùng bạn:

Diễn giải tập lệnh:

Số Diễn giải
1 CMP== So sánh 2 giá trị bằng nhau hay không
2 CMP<> So sánh 2 giá trị khác nhau hay không
3 CMP>= So sánh giá trị 1 >= giá trị 2 hay không
4 CMP<= So sánh giá trị 1 <= giá trị 2 hay không
5 CMP> So sánh giá trị 1 > giá trị 2 hay không
6 CMP< So sánh giá trị 1 < giá trị 2 hay không
7 In_Range So sánh giá trị VAL có nằm trong khoảng từ giá trị MIN tới MAX hay không
8 OUT_Range So sánh giá trị VAL có nằm ngoài khoảng từ giá trị MIN tới MAX hay không
9 OK Kiểm tra giá trị có phải là số thực floating-point
10 NOT_OK Kiểm tra giá trị không phải là số thực floating-point

5. Math functions

Việc tính toán xử lý số liệu với PLC là hoàn toàn đơn giản và dễ như trở bàn tay với đầy đủ các hàm tính toán cần thiết. Giúp bạn xử lý 1 công thức hay hàm tính phức tạp.

Tuy nhiên mình cũng khuyến cáo là sau khi thực hành xong với ngôn ngữ ladder, bạn add 1 network là SCL, hàm tính toán nên viết bằng SCL sẻ gọn gàng hơn rất nhiều, và cũng đơn giản khi bạn đã nắm được vấn đề, ví dụ là: y := abs((a*x + b*y +c)/d) ;

Gán giá trị là ký tự :=

Các phép tính thì không có gì lạ: công +, trừ -, nhân *, chia /,

Các hàm khác thì kéo ra ở đầu và đóng mở ngoặc là được như ABS()

Và lưu ý hàm SCL kết thúc bằng dấu ;

Tạo các ghi chú (comment) bằng 2 dấu //

Video luyện cùng bạn:

Diễn giải tập lệnh:

Số Diễn giải
1 CALCULATE- hàm tính toán OUT theo các IN1, IN2….. theo 1 hàm bạn tự thiết lập +, -, *, /
2 ADD- phép cộng +
3 SUB- phép trừ –
4 MUL- phép nhân *
5 DIV- phép chia /
6 MOD- phép chia trả về Out là số dư
7 NEG- đảo giá trị vào IN âm thành dương và dương thì thành âm ở đầu ra OUT
8 INC – tăng giá trị IN/OUT lên 1 đơn vị khi EN kích on 1 xung cạnh lên
9 INC – giảm giá trị IN/OUT xuống 1 đơn vị khi EN kích on 1 xung cạnh lên
10 ABS- trả về giá trị OUT luôn dương
11 MIN- trả về giá trị IN nhỏ nhất ở đầu ra OUT trong số 1 loạt các IN đầu vào
12 MAX- trả về giá trị IN lớn nhất ở đầu ra OUT trong số 1 loạt các IN đầu vào
13 LIMIT- trả về giá trị IN ở đầu ra OUT nếu IN nằm trong giới hạn ở giá trị MN (min) và MX (max)
14 SQR- bình phương bậc 2
15 SQRT- căn bậc 2
16 LN- logarithm cơ số e = 2.718282
17 EXP- trả về giá trị OUT= e (2.718282) mũ IN

6. Move operations

Hàm Move giúp bạn xử lý các vấn đề về dịch chuyển dữ liệu, gán dữ liệu từ vùng nhớ này qua vùng nhớ khác, xem video cuối trang này nhé

Diễn giải tập lệnh:

Số Diễn giải
1 MOVE- copy giá trị ở IN sang OUT
2-3 Deserialize/Serialize- copy một chuỗi hay 1 cấu trúc data
4 MOVE_BLK- move block, copy toàn bộ dữ liệu từ data block này qua data block khác.
5 MOVE_BLK_VARIANT- move block, copy dữ liệu từ data block này qua data block khác có tùy biến lựa chọn data để copy.
6 UMOVE_BLK- Move block uninterruptible, hàm copy dữ liệu từ Array IN qua Array Out với số lượng biến là COUNT, và hàm này sẻ được gọi bất chấp việc có chương trình ngắt khác diễn ra mà không bị ảnh hưởng.
7 FILL_BLK: Fill block- copy giá trị IN vào chuỗi các biến ở OUT với số biến là COUNT, tức là số phần tử của chuỗi Array OUT (COUNT phần tử) sẻ bị ghi lên cùng 1 giá trị IN.
8 UFILL_BLK: Fill block uninterruptible- cũng như hàm FILL_BLK nhưng nó sẻ không bị ngắt bởi chương trình ngắt khác.
9 SCATTER: Parse the bit sequence into individual bits- copy dữ liệu IN  (BYTE, WORD, DWORD) và đẩy ra OUT (ARRAY[*] of BOOL) với kiểu ở OUT là 1 chuỗi các bit.
11 GATHER, ngược lại với SCATTER là hàm này sẻ gop chuỗi các bit lại để thành 1 giá trị BYTE, WORD hay DWORD
13 SWAP: đảo thứ tự sắp xếp ngược lại của các bit ở biến IN và cho ra OUT

7. Convertion operations

Tập lênh để xử lý số liệu là các giá trị như: chuyển đổi kiểu dữ liệu, làm tròn dữ liệu, Scale giá trị Ananlog… , xem video cuối trang này nhé

Diễn giải tập lệnh:

Số Diễn giải
1 CONVERT- hàm chuyển đổi các kiểu dữ liệu qua lại, kiểu chuyển cài ngay trên hàm
2 ROUND- hàm làm tròn số
3 CEIL- dựa vào giá trị số floating-point ở IN để có được giá trị số interger ở OUT có giá trị lớn hơn gần đó nhất. ví dụ IN là 0.3 thì OUT là 1
4 FLOOR- ngược lại với CEIL là tạo ra ở OUT có giá trị bé hơn gần nhất, ví dụ IN là 0.3 thì OUT là 0.
5 TRUNC-hàm loại bỏ phần thập phân để làm tròn số ở OUT
6 SCALE_X/NORM_X: 2 hàm này kết hợp tạo thành hàm y-ax+b để làm scale giá trị Analog trả về.

8. Program control

Trong 1 chương trình ta có thể gán các LABEL để quản lý các nhóm tác vụ xử lý (các đoạn chương trình xử lý 1 vấn đề gì đó), việc bỏ qua hay gọi tới các nhóm tác vụ này, tập lệnh này sẻ giúp ta làm điều đó.

Diễn giải tập lệnh:

Số Diễn giải
1 JMP- nhảy tới 1 lable khác trong chương trình nếu được active lên 1
2 JMPN- nhảy tới 1 lable khác trong chương trình nếu được deactive xuống 0
3 LABEL- nhãn để lệnh JMP nhảy tới
4 JMP_LIST- Tạo 1 list các LABEL ở DEST0, DEST1…., việc nhảy tới DES nào là do hệ số K chỉ định, 0 là DES0, 1 là DES1… và tất nhiên lệnh được thực thi khi EN được active lên 1
5 SWITCH- nhảy tới DES nào là do hệ số K chỉ định với điều kiện tương ứng
6 RET- return, trả về giá trị true hay false ở đầu ra ENO của 1 khối hàm được gọi

9. Word logic

Lệnh AND (và): các bít tương ứng ví dụ 1 AND 1 =1, 1 AND 0 =0, 0 AND 0 =0

như ví dụ dưới, khi Tagin tác động ON thì lệnh AND được thực hiện: “Tag_Result”= “Tag_Value1” AND “Tag_Value2”, kết quả trả về như ví dụ dưới. Kết thúc lệnh “TagOut” sẻ ON

Tương tự lệnh OR (hoặc) trả về kết quả: các bít tương ứng ví dụ 1 OR 1 =1, 1 OR 0 =1, 0 OR 0 = 0

Lệnh XOR trả về kết quả: các bít tương ứng ví dụ 1 XOR 1 =0, 1 XOR 0 =1, 0 XOR 0 = 0

Lệnh đảo giá trị INVERT: giá trị “TangOut_Value” là giá trị đảo ngược hoàn toàn với “TagIn_Value” khi bit “TagIn” tác động ON. Kết thúc lệnh “TagOut” sẻ ON. Ta thấy 000F đảo thành FFF0

 

10. Shift and Rotate

Diễn giải tập lệnh:

Lệnh SHR dịch phải: Khi “TagIn” tác động ON thì dữ liệu trong “TagIn_Value” sẻ dịch qua phải “Tag_Number” bit, và gán giá trị sau khi dịch vào “TagOut_Value. Sau khi dịch thì các bit bị dịch sẻ là 0. Khi dịch thành công thì “TagOut” sẻ ON lên.

Lệnh SHL dịch trái: Khi “TagIn” tác động ON thì dữ liệu trong “TagIn_Value” sẻ dịch qua trái “Tag_Number” bit, và gán giá trị sau khi dịch vào “TagOut_Value. Sau khi dịch thì các bit bị dịch sẻ là 0. Khi dịch thành công thì “TagOut” sẻ ON lên.

Lệnh ROR dịch bít xoay qua phải, ROL dịch bít xoay qua trái: tương tự lệnh dịch SHR hay SHL, chỉ khác ở chỗ các bit bị dịch ở cuối chuỗi bit sẻ đẩy lên đầu chuỗi bit chứ không bị gán về giá trị 0

Video thực hành các mục 6,7,8,9,10

 1,380 total views

3 thoughts on “Tự học PLC, HMI- Phần 4 Học các tập lệnh PLC S7 với ngôn ngữ Ladder

  1. Sơn Thái says:

    có hàm nào mà khi có xung đầu vào thì đầu ra lật trạng thái không bạn nhỉ, mình tính dùng bộ đếm nhưng tốn quá

Leave a Reply

Your email address will not be published. Required fields are marked *