Laấy giá trị từ counter để so sánh plc năm 2024

Trong thực tế có khá nhiều bài toán cần đọc tín hiệu dạng xung như đọc encoder, thước quang hay từ các thiết bị khác phát ra. Để đọc được các giá trị xung này không thể dùng bộ đếm counter bình thường được vì sẽ không đếm được hoặc đếm không chính xác, mà bắt buộc phải dùng bộ đếm tốc độ cao. Sau đây là cách cấu hình, đấu nối, lập trình PLC Omron đọc các loại xung tốc độ cao.

1. Các loại xung

  • Increment Pulse: Xung đếm tăng

Đây là loại xung chỉ có 1 tín hiệu [single phase] xuất ra. PLC sẽ lấy các xung sườn lên của loại xung này để tăng bộ đếm lên 1.

  • Differential Phase: Xung vi sai

Đây là loại xung có 2 tín hiệu xuất ra [2-phase], 2 xung này sẽ lệch pha nhau, từ đấy có thể tăng độ chính xác lên gấp 4 lần từ việc đọc các tín hiệu sườn của các xung này, vừa có thể phát hiện được chiều tăng giảm xung.

Loại xung này thường được phát ra từ các loại encoder thông dụng hiện nay.

  • Up/down pulse: Xung tăng giảm

Đây là loại xung có 2 tín hiệu xuất ra, một tín hiệu quy định chiều đếm tăng và một tín hiệu quy định chiều đếm giảm. Các giá trị đếm lấy theo sườn lên của xung.

  • Pulse+Direction : Kiểu xung hướng

Kiểu này sẽ có 2 đầu vào, 1 đầu vào phát xung cho bộ đếm và một đầu vào quy định chiều tăng/giảm của giá trị bộ đếm.

2. Các chân đọc xung của PLC Omron CP1E

Dưới đang là bảng các chân đầu vào đọc xong của các dòng PLC CP1E và các dạng xung có thể đọc được tương ứng

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 = So sánh giá trị 1 >= giá trị 2 hay không 4 CMP 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

Chủ Đề