You are on page 1of 11

https://sites.google.

com/site/tudienthangmay/plc-s7-200/phat-xung-pto-trong-plc-s7-200

Phát xung trong PLC S7-200

I. GIỚI THIỆU:
Trong PLC S7-200 có hổ trợ chúng ta phát xung tốc độ cao (tức là tạo một chuỗi xung ngỏ ra) tại 2 chân Q0.0 và Q0.1
Ta dùng instruction PLS để thực hiện phát xung trên PLC S7-200. Chú ý rằng instruction này được chia ra 2 chức năng là phát xung PTO và điều rộng xung PWM
       - PTO (Pulse Train Output) là 1 chuỗi xung ngỏ ra với độ rộng xung ON là 50% của chu kì
       - PWM (Pulse Width Modulation) là 1 chuỗi xung ngỏ ra mà ta có thể thay đổi được độ rông xung ON
Vậy ta thấy rằng PTO chẳng qua chỉ là 1 trường hợp đặc biệt của PWM mà thôi.
Khi ta sử dụng chức năng phát xung tại các chân Q0.0 và Q0.1 thì các lệnh xử lý tại các chân này đều được bỏ qua và chú ý rằng trước khi sử dụng phát xung trên 2 chân này ta phải reset chúng về 0 trước

Khi ta sử dụng cũng như thiết kế phát xung tốc độ cao trong PLC S7-200 sẽ có 1 vùng nhớ đặc biệt SM để điều khiển chúng gồm 1 thanh ghi 8 bit cho điều khiển, 1 thanh ghi 32 bit không dấu dành cho giá trị xung đếm,
1 thanh ghi không dấu 16 bit cho thời gian 1 chu kì và 1 thanh ghi 16 bit không dấu cho độ rộng xung

II. PHÁT XUNG PTO PLC S7-200:


Như đã nói ở trên PTO trong PLC S7-200 là 1 chuỗi xung vuông với độ rộng xung là 50% của chu kì. Vì vậy ta nên chọn thời gian của 1 chu kì là 1 số chẵn để đảm bảo hình dạng xung ngỏ ra của chúng ta không bị méo mó biến dạng.

Ta có thể phát liên tục từ 1 đến 4,294,967,295 xung. Thời gian 1 chu kì có thể chọn đơn vị là ms hoặc us dựa vào các bit điều khiển. cycle time (thời gian 1 chu kì) phải nằm trong giới hạn sau:

         - 50 µs to 65,535 µs (nếu chọn đơn vị thời gian là us)


         - 2 ms to 65,535 ms (nếu chọn đơn vị thời gian là ms)
Chú ý những trường hợp đặc biệt sau:
         - nếu ta chọn thời gian của 1 chu kì (cycle time) < 2 lần đơn vị thời gian thì PLC sẽ hiểu cycle time là 2 lần đơn vị 
         - nếu ta chọn số xung phát ra là 0 thì mặc định PLC sẽ phát ra 1 xung

Trong PLC S7-200 có 2 chế độ phát xung PTO là single segment và multiple segment cụ thể ta tìm hiểu 2 chế độ này như sau:
         - Single segment: Ta nên tìm hiểu khái niệm này qua 1 ví dụ cụ thể đặt ra như sau:
Giả sử ta muỗn phát 1 chuỗi xung với 4 xung có thời gian của 1 chu kì là 500ms thì đầu tiên ta phải load giá trị phù hợp vào các thanh ghi điều khiển sau đó thực thi instruciton PLS lúc này PLC sẽ bắt đầu phát xung. Nếu như trong
chương trình của chúng ta, ta muốn sau khi phát xong 4 xung đó phát thêm 4 xung nữa với cycle time khác là 1000ms chẳng hạn thì ngay sau đó ta phải load giá trị phù hợp vào các thanh ghi điều khiển trước, sau khi phát 4 xung đầu
tiên xong ta sẽ thực hiện gọi instruction PLS lần nữa để phát thêm 4 xung với cycle time là 1000ms. Và chúng ta nên nhớ rằng tại 1 thời điểm thì PLC chỉ nhận lưu 1 giá trị thông số kỹ thuật của 1 chuỗi xung kế tiếp mà thôi.
Vậy thì ta hiểu nôm na là chế độ này sẽ phát 1 chuỗi xung với 1 cycle time tại 1 thời điểm mà thôi. Nếu muốn thay đổi giá trị cycle time ta phải thực thi lại PLS instruction 1 lần nữa
 
      - Multiple segment: Ta có thể hiểu nôm na là chế độ này có thể phát 1 chuỗi xung ngỏ ra với thời gian cycle time có thể thay đổi được chỉ với 1 lần gọi instruction               PLS (tức là trong 1 chuỗi xung sẽ có nhiều đoạn xung với
cycle time thay đổi). Mỗi 1 thông số kỹ thuật của 1 chuỗi xung gồm nhiều đoạn thì được lưu vào 1 vùng           nhớ biến V gọi là "profile table". Ta cũng có thể thay đổi thông số đơn vị thời gian (base time) trong chương trình nhưng
nhớ rằng 1 profile chỉ được áp dụng 1               base time mà thôi. Mỗi 1 đoạn xung trong 1 profile table có 1 độ dài gồm 8 bytes điều khiển gồm thanh ghi 16 bit cho cycle time, thanh ghi 16 bit cho cycle time               delta và 1 thanh
ghi 32 bit dành cho số xung cần phát.
Ở đây khái niệm cycle time delta là tự động thay đổi bù thời gian cycle time. Mỗi 1 giá trị dương của cycle time delta thì cycle time sẽ tăng dần lên mỗi xung sau đó và mỗi giá trị âm của cycle time delta thì cycle time của chúng ta sẽ
giảm dần xuống mỗi xung sau đó.
    

Bảng trên cho ta thấy được các giá trị tương ứng của vùng nhớ V trong 1 bảng profile:
BYTE đầu tiên chứa số đoạn cần phát trong profile
BYTE 1 và BYTE 2 chứa giá trị thời gian 1 chu kì (cycle time)
BYTE 3 và BYTE 4 chứa giá trị bù cycle time delta
BYTE 5-8 chứa giá trị xung cần phát trong đoạn segment này của profile và cứ như thế phân bổ 8 bytes tiếp theo cho đoạn segment thứ 2 của profile

III. CÁC THANH GHI ĐIỀU KHIỂN VÀ TRẠNG THÁI TRONG PTO CỦA PLC S7-200:
    
Ta đi vào giải thích từng bit cụ thể như sau:
       - SM66.4 & SM76.4 : Trong chế độ phát xung multiple segment nếu ta gán 1 giá trị không hợp lệ vào delta cycle time thì bit này sẽ set lên 1 và kết thúc chức năng             phát xung ngay lập tức, ngõ ra sẽ khôi phục lại giá trị 0.
       - SM66.5 & SM76.5: Trong chế độ phát xung multiple segment mà trong chương trình nếu ta hủy PTO profile thì bit này sẽ set lên 1
       - SM66.6 & SM76.6: Trong chế độ phát xung single segment nếu ta ghi 2 thông số kỹ thuật của 2 đoạn xung có cycle time khác nhau cùng 1 thời điểm vào thanh              ghi điều khiển thì bit này sẽ set lên 1 (báo tràn)
       - SM66.7 & SM76.7: Đây là bit trạng thái set lên 1 khi công việc phát xung PTO đã hoàn thành
       - SM67.0 & SM77.0: Nếu trong chương trình ta muốn thay đổi thời gian 1 chu kì (cycle time) thì set bit này lên 1
       - SM67.1 & SM77.1: Cho phép thay đổi rộ rộng xung ON hay không, nếu có thì set bit này lên 1 (chỉ dùng cho PWM)
       - SM67.2 & SM77.2: Nếu trong chương trình ta muốn thay đổi số xung cần phát thì set bit này lên 1 
       - SM67.3 & SM77.3: Bit này cho phép ta chọn đơn vị thời gian của cycle time là ms hay us (=0 là us và =1 là ms)
       - SM67.4 & SM77.4: Bit này dành cho điều khiển PWM nên sẽ đề cập ở bài PWM cụ thể hơn
       - SM67.5 & SM77.5: Bit này chọn chế độ phát xung single segment hay multiple segment (0 là single còn 1 là multiple)
       - SM67.6 & SM77.6: Bít này chọn ngỏ ra hoạt động theo PWM hay PTO (0 là PTO và 1 là PWM)
       - SM67.7 & SM77.7: Bit này cho phép ngỏ ra hoạt động ở chế độ phát xung. Phải set lên 1 thì PLS trong PLC S7-200 mới hoạt động được
       - SMW68 & SMW78: Đây là 2 thanh ghi 16 bit chứa giá trị thời gian của 1 khi kì (cycle time)
       - SMW70 & SMW80: Đây là 2 thanh ghi 16 bit chứa giá trị của độ rộng xung (chỉ dùng cho PWM)
       - SMD72 & SMD82: Đây là 2 thanh ghi 32 bit chứa giá trị xung cần phát dùng cho chế độ phát xung PTO
       - SMB166 & SMB176: Đây là 2 thanh ghi chứa số đoạn segment cần phát trong 1 profile (dùng cho chế độ multiple segment)
       - SMW168 & SMW178: Như đã đề cập ở trên khi phát xung PTO chế độ multiple segment ta cần 1 vùng nhớ V để lưu những đặc tính kỹ thuật của từng segment vào 1 bảng gọi là profile table. Vậy thanh ghi này chứa giá trị
offset của vùng nhớ V tức là vùng nhớ V bắt đầu để lưu trữ profile. Cụ thể nếu ta nhập 1000 tại đây thì vùng nhớ V bắt đầu lưu trữ profile là VB1000. (thanh ghi này chỉ dùng cho chế độ PTO mutilple segment)
  
Ta có thể tham khảo 1 số giá trị của thanh ghi điều khiển thường sử dụng trong bảng sau :
Ví dụ như load giá trị 16#81 vào thanh ghi SMB77 (10000001) thì có nghĩa là (enable chức năng PLS cho chân Q0.1 chọn chức năng phát xung PTO chế độ single segment, đơn vị thời gian là us, không thay đổi giá trị xung phát ra và
cho phép thay đổi giá trị thời gian 1 chu kỳ). Các trường hợp khác phân tích tương tự nhé

IV. CÁCH TÍNH BẢNG PROFILE TRONG CHẾ ĐỘ MULTIPLE SEGMENT:


Chế độ multiple segment thì rất hữu ích cho 1 số ứng dụng cụ thể như điều khiển động cơ bước. (Động cơ bước là động cơ chạy bằng xung, mỗi 1 xung động cơ sẽ quay 1 bước, thứ tự các xung tại các chân tùy thuộc vào từng loại
động cơ khác nhau, các xung này có tần số càng lớn thì tốc độ động cơ sẽ càng nhanh). Chúng ta nên nhớ rằng khi giảm thời gian 1 chu kì cycle time có nghĩa là ta tăng tần số phát xung qua đó tăng tốc độ của động cơ.

Cho ví dụ ta cần điều khiển động cơ bước tăng tốc lúc ban đầu (ramp up) sau đó chạy với tốc độ không đổi và giảm tốc (ram down) giống như hình bên dưới thì lúc này rõ ràng ta cần 3 segment để phát xung cho động cơ bước. Đọan
đầu tiên phát xung từ tốc độ 2Khz (tức là 500us/1cycle time) lên đến 10Khz (tức 100us/1cycle time) và giả sử ta cần phát 200 xung trong segment này. Segment tiếp theo ta không đổi giá trị cycle time (có nghĩa là tần số không thay
đổi nên vận tốc của motor cũng không thay đổi) với 3400 xung. Segment 3 ta cần giảm tốc từ 10Khz (tức 100us/cycle time) xuống còn 2Khz(tức 500us/cycle time) với 400 xung. Cuối cùng ta có bảng profile như bên dưới (giả sử ở
đây ta chọn giá trị OFFSET vùng nhớ V là 500)
  

Ta đi vào phân tích lại bảng profile table trên. Đầu tiên giá trị OFFSET là 500 có nghĩa là vùng nhớ V bắt đầu lưu trữ bảng profile từ VB500. Ở trên ta đã biết byte đầu tiên là byte chứa số đoạn segment của profile, vậy ở đây có 3
segment nên VB500 có giá trị là 3. 2 bytes tiếp theo chứa giá trị cycle time của segment đầu tiên nên VW501 = 500us. 2 bytes tiếp theo chứa giá trị cycle time delta nên VW503= -2 (chúng ta sẽ tìm hiểu cách tính cycle time delta này
sau nhé). 4 bytes tiếp theo chứa giá trị số xung cần phát cho segment 1 là 200 xung nên VD505=200. Vậy đoạn segment đầu tiên đã chứa 8 bytes. 8 bytes tiếp theo sẽ chứa đặc tính của segment thứ 2 và 8 bytes cuối cùng chứa đặc tính
của segment thứ 3.

Cách tính cycle time delta:


Trước tiên ta cần nhớ lại khái niệm cycle time delta trong chế độ multiple segment như sau:
Ví dụ như trong đoạn segment 1 của ví dụ động cơ bước ở trên giá trị cycle time delta là -2 có nghĩa là cứ mỗi 1 xung sau tạo ra sẽ có chu kì giảm đi 2us so với chu kì của xung trước đó (hay nói 1 cách khác là cứ mỗi 1 xung ON tạo
ra sau sẽ có độ rộng xung giảm 1us so với độ rộng xung ON của xung trước đó). Vậy rõ ràng là tần số tăng lên nên tốc độ động cơ sẽ tăng dần. Và quá trình giảm cứ tiếp tục cho đến khi phát được 200 xung như vậy.
Công thức tính delta cycle time như sau:

      Trong đó :    -End_CTseg là thời gian cycle time tại thời điểm sau của segment đang tính
                        -Init_CTseg la thời gian cycle time tại thời điểm ban đầu của segment đang tính
                        -Quantity là số lượng xung cần phát ra trong segment đang tính
Ta tính lại cycle time của segment 1 ở trên nhé: Đề bài cho lúc ban đầu tần số là 2KHz nên cycle time ban đầu là 500us. Cuối của segment 1 tần số là 10KHz nên cycle time là 100us và ta muốn phát 200 xung trong segment này vậy
cycle time delta = (100-500)/200=-2
      
Công thức tính thời gian cycle time của xung cuối cùng trong 1 segment:
      Trong đó :    -Delta seg là giá trị cycle time delta
                        -Init_CTseg la thời gian cycle time tại thời điểm ban đầu của segment đang tính
                        -Quantity là số lượng xung cần phát ra trong segment đang tính
Tại sao lại có công thức tính cylce time của xung cuối cùng trong 1 segment. Vì đơn giản cycle time delta chỉ chấp nhận là 1 số nguyên. Vì thế nên ta phải cần linh hoạt chọn cycle time của xung cuối cùng và số xung cần phát trong 1
segment để đảm bảo cycle time delta phải là số nguyên.
Ví dụ trong đoạn segment đầu tiên của ví dụ trên ta muốn xung cuối cùng có tần số 5KHz thay vì 10KHz. Vậy cycle time delta = (200-500)/200= -1.5 (số này không hợp lệ) vì thế lúc này ta phải linh hoạt chọn lại số xung cần phát
thay vì 200 ta chọn còn lại 150 xung lúc đó sẽ đảm bảo là cycle time delta là -2 tần số sau cùng vẫn là 5KHz.

V. LẬP TRÌNH PHÁT XUNG PTO TRONG PLC S7-200:


    Ta chỉ sử dụng 1 instruction PLS khi muốn phát xung PTO trong PLC S7-200. Nếu muốn phát xung trên chân Q0.0 thì thông số Q0.X =0 và chân Q0.1 thì chọn là 1

    Để sử dụng phát xung PTO trong PLC S7-200 ở chế độ single segment ta thực hiện các bước như sau:
    B1: Reset chân phát xung và gọi chương trình con với bit SM0.1
    B2: Trong chương trình con load giá trị phù hợp vào thanh ghi điều khiển
    B3: Load giá trị vào thanh ghi cycle time
    B4: Load giá trị số xung cần phát
    B5: Nếu muốn sử dụng ngắt trong chương trình thì ta khai báo ngắt và cho phép ngắt toàn cục
    B6: Gọi instruction PLS để bắt đầu phát xung 
    B7: Nếu lần phát xung tiếp theo cần thay đổi các thông số cycle time hoặc số xung thì load giá trị phù hợp vào thanh ghi điều khiển trước chờ sẵn trước khi thoát khỏi     chương trình con

    Để sử dụng phát xung PTO trong PLC S7-200 ở chế độ multiple segment ta thực hiện các bước như sau:
    B1: Reset chân phát xung và gọi chương trình con với bit SM0.1
    B2: Trong chương trình con load giá trị phù hợp vào thanh ghi điều khiển
    B3: Load giá trị OFFSET để lưu giá trị bảng profile vào vùng nhớ V
    B4: Load giá trị số đoạn segment vào byte đầu tiên của profile cũng như các byte tiếp theo sau cho từng đoạn segment 
    B5: Nếu muốn sử dụng ngắt trong chương trình thì ta khai báo ngắt và cho phép ngắt toàn cục
    B6: Gọi instruction PLS để bắt đầu phát xung
    B7: Thoát khỏi chương trình con

VI. VÍ DỤ CỤ THỂ:
    1. Ví dụ phát xung PTO trong PLC S7-200 chế độ single segment:

Trong chương trình chính network 1 dùng bit SM0.1 để reset chân phát xung (ở đây ta dùng chân Q0.0 để phát xung) sau đó gọi chương trình con SBR_0 và dùng chương trình con này cấu hình và khởi tạo bộ phát xung (điều này sẽ
giảm được thời gian scan time).
Trong chương trình còn SBR_0 ta lần lượt thực hiện các bước như đề cập ở trên
       - Đầu tiên load giá trị vào thanh ghi điều khiển (ở đây 8D=10001101 có nghĩa là cho phép chân Q0.0 phát xung PTO, chế độ hoạt động là single segment, đơn vị thời gian base time là ms, cho phép thay đổi giá trị cycle time và số
xung trong chương trình)
      - Load giá trị 500 vào thanh ghi cycle time để chọn thời gian 1 chu kì là 500ms
      - Load giá trị số xung cần phát là 4 
      - Khai báo chương trình ngắt INT_0 với số hiệu là 19
      - Cho phép ngắt toàn cục
      - Gọi instruction PLS để bắt đầu phát xung trên chân Q0.0
      - Trước khi ta thoát khỏi chương trình con ta cần phải load giá trị mới (phù hợp vào nhu cầu sử dụng) vào thanh ghi điều khiển. Ở đây trong chương trình tiếp theo sau ta chỉ cần thay đổi thời gian cycle time nên ta load giá trị 89
vào thanh ghi điều khiển trước khi thoát khỏi chương trình con.

Vậy sau khi thực hiện xong chương trình con này thì PLC sẽ phát xung trên chân Q0.0, khi phát đủ 4 xung sẽ xảy ra ngắt với số hiệu 19 mà ở trên ta đã khai báo ngắt này sẽ thực hiện chương trình INT_0 (cụ thể các sự kiện ngắt tham
khảo trong bảng sau)
Trong chương trình ngắt INT_0 thực hiện các lệnh sau:
Trong Network 1 của chương trình ngắt ta thấy nếu thời gian chu kì cycle time là 500ms thì thay đổi cycle time thành 1000ms. Gọi lại instruction PLS để thực hiện thay đổi và cuối cùng là thoát khỏi chương trình ngắt
Trong Network 2 của chương trình ngắt ta thấy nếu thời gian chu kì cycle time là 1000ms thì thay đổi cycle time lại thành 500ms. Gọi lại instruction PLS để thực hiện thay đổi.
Vậy rõ ràng khi phát 4 xung đầu tiên với cycle time là 500ms xong chương trình sẽ nhảy vào ngắt thực hiện lệnh trong network 1 và thoát khỏi chương trình ngắt. Phát xong 4 xung tiếp theo với cycle time là 1000ms thì PLC lại nhảy
vào chương trình ngắt lần nữa và lúc này không thực hiện network 1 mà sẽ thực hiện network 2 và chương trình không thể thoát ra khỏi ngắt nữa vì không có lệnh RETI. Vậy cuối cùng PLC phát lại 4 xung với chu kì 500ms lần nữa sẽ
kết thúc phát xung.
Cụ thể chuỗi xung ngỏ ra trên chân Q0.0 như hình sau: 

      2. Ví dụ phát xung PTO trong PLC S7-200 chế độ multiple segment:
Trong ví dụ này ta sẽ thực hiện cụ thể ví dụ động cơ bước ở trên nên chỉ giải thích sơ lại thôi nhé
Trong chương trình chính reset chân phát xung và gọi chương trình con SBR_0
       - Load giá trị 3 vào VB500 (có 3 đoạn segment trong profile)
       - Cấu hình đoạn segment 1 như sau: cycle time ban đầu là 500, cycle time delta là -2 và phát 200 xung
       - Cấu hình đoạn segment 2 như sau: cycle time ban đầu là 100, cycle time delta là 0 và phát 3400 xung
       - Cấu hình đoạn segment 3 như sau: cycle time ban đầu là 100, cycle time delta là +1 và phát 400 xung
       - Load giá trị (AB=10101011) vào thanh ghi điều khiển (cho phép phát xung trên chân Q0.0, chọn base time là ms, chế độ hoạt động là multiple segment)
       - Địa chỉ vùng nhớ V bắt đầu lưu trữ profile là VB500
       - Khai báo ngắt và cho phép ngắt toàn cục
       - Gọi instruction PLS để bắt đầu phát xung
       Thực hiện xong chương trình con này PLC sẽ chờ chân phát xung phát đủ 4000 xung sẽ nhảy vào thực hiện chương trình ngắt
Trong chương trình ngắt set bit Q0.5 lên 1. Vậy có nghĩa là phát xong 4000 xung thì chân Q0.5 set lên 1, kết thúc chương trình tại đây PLC không thực hiện gì nữa cả vì không có lệnh thoát khỏi chương trình ngắt RETI.

You might also like