Giáo trình PLC nâng cao Chương 4 Analog và thuật giải PID

Tắt nguồn Module, chọn tầm đầu vào mong muốn.

Bật nguồn lên cho CPU và Module sau đó để cho hoạt động ổn định trong 15 phút.

Sử dụng transmitter, nguồn dòng hoặc áp chuẩn dùng để đưa tín hiệu giá trị chuẩn zero vào 1 trong các đầu vào.

Đọc giá trị vào PLC bằng kênh đầu vào thích hợp.

Chỉnh giá trị OFFSET có thể cho đến khi giá trị đọc vào là zero hoặc nhận ra giá trị dữ liệu số.

Đặt giá trị tín hiệu toàn tầm đo vào ngõ vào, đọc giá trị mà CPU nhận được.

 

doc15 trang | Chia sẻ: thienmai908 | Lượt xem: 1628 | Lượt tải: 2download
Nội dung tài liệu Giáo trình PLC nâng cao Chương 4 Analog và thuật giải PID, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
CHƯƠNG 4 ANALOG VÀ THUẬT GIẢI PID 1. LỆNH PID LOOP Lệnh PID Loop vòng (vòng tỉ lệ, tích phân, vi phân) được dùng để thực hiện phép toán PID. Lệnh này có hai toán hạng: một là địa chỉ TBL, là địa chỉ khởi đầu của bảng lập vòng và hai là số LOOP, là hằng số từ 0 đến 7. Các điều kiện lỗi khi set ENO = 0, SM1.1 (overflow), SM4.3 (run-ti me), 0006 (địa chỉ gián tiếp). Tám lệnh PID có thể được dùng trong một chương trình. Nếu hai hoặc nhiều hơn hai lệnh PID được dùng cùng một số vòng (thậm chí chúng có bảng địa chỉ khác nhau), thì những phép tính PID sẽ can thiệp vào lẫn nhau và ngõ ra sẽ không đoán hay tính toán được. Bảng lập vòng lưu trữ 9 thông số có chiều dài là 36 byte được dùng cho việc điều khiển, giám sát sự vận hành vòng lập, bao gồm giá trị hiện tại và giá trị trước đó của biến điều chỉnh, biến đặt, ngõ ra, độ lợi, thời gian lấy mẫu, thời gian tích phân, thời gian vi phân, tổng tích phân (mức ngưỡng bias). Địa chỉ lệnh Tên Dạng Type Miêu tả 0 Biến xử lý (process variable) PVn Double word – real in Bao gồm biến xử lý, chuẩn hoá từ 0 đến 1. 4 Điểm đặt (setpoint) SPn Double word – real in Bao gồm điểm đặt, chuẩn hoá từ 0 đến 1. 8 Output Mn Double word - real in/out Ngõ ra PID đã được tính toán, chuẩn hoá tỉ lệ từ 0 đến 1. 12 Độ lợi vòng (Gain) Kc Double word - real in Bao gồm độ lợi là hằng số tỷ lệ. Có thể dương hoặc âm. 16 Thời gian lấy mẫu (Sample time) Ts Double word - real in Thời gian lấy mẫu, đơn vị là giây, là số dương. 20 Thời gian tích phân (Integral time) hoặc reset Ti Double word - real in Chứa thời gian tích phân và tốc độ (rate), đơn vị tính: phút, là số dương. 24 Thời gian vi phân (Derivative time) hoặc reset TD Double word - real in Chứa thời gian vi phân và tốc độ (rate), đơn vị tính: phút, là số dương. 28 Mức ngưỡng (bias) MX Double word - real In/out Bao gồm mức ngưỡng và giá trị tổng vi phân nằm từ 0 đến 1. 32 Biến xử lý trước đó PVn-1 Double word - real In/out Trị số đo giá trị của biến xử lý trước đó được lưu từ lúc thực thi lệnh PID cuối cùng. 2. GIẢI THUẬT PID Trong hoạt động ổn định trạng thái, một bộ điều khiển PID điều chỉnh giá trị của ngõ ra để có độ sai lệch về zero. Đo sự sai lệch này là lấy sự chênh lệch điểm đặt setpoint (điểm làm việc mong muốn) và ngõ ra lặp vòng hay biến xử lý điều chỉnh (điểm làm việc thực tế). Nguyên lý điều khiển PID là dựa theo phương trình sau đây mô tả đầu ra, M(t), như một hàm của thời hằng tỷ lệ, thời hằng tích phân, thời hằng vi phân. M(t) = Kc* e + Kc *∫e dt + Mintial + Kc * de/dt Ngõ ra = khâu tỉ lệ + khâu tích phân + khâu vi phân Trong đó: M(t): Ngõ ra vòng lập là một hàm theo thời gian. Kc : Độ lợi vòng lập. e : Độ lệch (sự sai lệch giửa điểm đặt setpoint và biến xử lý PV). Mintial : Giá trị ban đầu của ngõ ra vòng. Để thực hiện hàm điều khiển này trong một máy tính số, hàm trên phải được lượng tử hóa liên tục vào trong những mẫu tuần hoàn của độ lệch với sự tính toán liên tục của ngõ ra. Phương trình tương ứng là cơ sở cho giải pháp máy tính số như sau: Mn = Kc * en + KI *å + Mintial + KD *( en – en-1 ) Ngõ ra = khâu tỷ lệ + khâu tích phân + khâu vi phân Trong đó: Mn: Giá trị được tính của ngõ ra vòng lặp ở thời mẫu n. KC: Độ lợi vòng lập. en: Giá trị sai lệch vòng ở thời mẫu n. en-1: Giá trị sai lệch vòng trước đó (ở thời mẫu n-1). KI: Hệ số tỉ lệ của hằng số tích phân. Mintial: Giá trị ban đầu của ngõ ra vòng. KD: Hệ số tỉ lệ của hằng số vi phân. Theo phương trình trên, khâu tích phân được xem như là một hàm của tất cả các khâu sai số từ lúc lấy mẫu đầu tiên đến lúc lấy mẫu hiện tại. Còn khâu vi phân là một hàm của lần lấy mẫu hiện tại và lần lấy mẫu trước đó. Khâu tỉ lệ chỉ là một hàm lấy mẫu hiện hành. Máy tính số phải tính toán giá trị ngõ ra trong mỗi lần sai số chính là từ các mẫu đang khởi tạo với các mẫu trước đó. Chúng chỉ cần lưu giá trị trước đó của sai số và giá trị trước đó của khâu tích phân, do vậy phương trình trên có thể đơn giản bằng cách: Mn = KC* en + KI* en + MX + KD* ( en - en-1 ) Ngõ ra = khâu tỉ lệ + khâu tích phân + khâu vi phân Trong đó: Mn : Giá trị được tính của ngõ ra vòng lặp ở thời mẫu n. Kc : Độ lợi vòng lập. en : Giá trị sai lệch vòng ở thời mẫu n. en-1: Giá trị sai lệch vòng trước đó (ở thời mẫu n-1). KI : Hệ số tỉ lệ của hằng số tích phân. MX : Giá trị trước đó của khâu tích phân (ở thời mẫu n-1). KD : Hằng số tỉ lệ của khâu vi phân. CPU dùng một dạng định nghĩa để đơn giản hóa phương trình trên khi tính toán giá trị ngõ ra vòng lập. Phương trình này được sửa đổi: Mn = MPn + MIn + MDn Ngõ ra = khâu tỉ lệ + khâu tích phân + khâu vi phân Trong đó: Mn: Giá trị được tính của ngõ ra vòng lặp tại thời gian lấy mẫu n. MPn: Giá trị của khâu tỉ lệ của ngõ ra vòng lặp tại thời gian lấy mẫu n. MIn: Giá trị của khâu tích phân của ngõ ra vòng lặp tại thời gian lấy mẫu n. MDn: Giá trị của khâu vi phân của ngõ ra vòng lặp tại thời gian lấy mẫu n. 2.1. Khâu tỉ lệ Khâu tỉ lệ MP được tính toán dựa vào độ lợi Kc để tính giá trị điều khiển độ nhạy ở ngõ ra, giá trị sai lệch e là điểm chênh lệch giữa biến xử lý đầu vào PVn và giá trị điểm đặt setpoint SP tại thời điểm lấy mẫu n. Biểu thức tính toán khâu tỉ lệ được tính toán bởi CPU theo công thức sau: MPn = KC * (SPn - MXn) Trong đó: MPn: Giá trị của khâu tỉ lệ của ngõ ra vòng lập tại thời mẫu n. KC: Độ lợi vòng lập. SPn: Giá trị điểm đặt tại thời gian lấy mẫu n. PVn: Giá trị của biến xử lý tại thời gian lấy mẫu n. 2.2. Khâu tích phân Khâu tích phân MI là khâu tỉ lệ của tổng sai lệch trên một đơn vị thời gian. Biểu thức tính toán khâu tích phân được tính toán bởi CPU theo công thức sau: MIn = Kc * Ts/Ti * (SPn - PVn) + MX Trong đó: MIn: Giá trị hàm tích phân của ngõ ra tại thời gian lấy mẫu n. KC: Độ lợi vòng lập. TS: Thời gian lấy mẫu vòng lặp. TI: Thời gian tích phân của vòng lặp. SPn: Giá trị điểm đặt ở thời gian lấy mẫu n. PVn: Giá trị của biến xử lý ở thời gian lấy mẫu n. MX: Giá trị của hàm tích phân ở thời gian lấy mẫu n-1 (còn gọi là tổng tích phân hoặc mức ngưỡng bias). Tổng các giá trị tích phân hoặc mức ngưỡng bias MX là giá trị được dùng để tính tổng tất cả các giá trị trước đó của khâu tích phân. Sau mỗi lần tính toán giá trị MIn thì giá trị MX sẽ được cập nhật vào MIn. Giá trị nạp vào của MX là một kiểu đặt đầu ra của lần lặp đầu tiên, một vài giá trị hằng số cũng có mặt trong khâu tích phân như độ lợi Kc, thời gian lấy mẫu Ts dùng để tính chu kì vòng lặp PID tính toán tiếp theo. Thời gian Ti dùng để điều khiển độ nhuyễn ở ngõ ra. 2.3. Khâu vi phân Nhằm tính giá trị sai lệch giữa hai biến kế tiếp. MDn = Kc * (Td/Ts) * [(SPn - PVn) - (SPn-1 - PVn-1)] Nếu đặt giá trị SP không đổi trong suốt quá trình tính toán PID thì biểu thức trên được rút gọn lại thành. MDn = Kc * (Td/Ts) * (PVn-1 - PVn) 3. ĐIỀU CHỈNH THÔNG SỐ 3.1. Chọn vòng lặp điều khiển Trong nhiều hệ thống điều khiển hầu hết sử dụng hai hoặc nhiều phương pháp điều khiển. Ví dụ như dùng khâu tỉ lệ hay dùng khâu tích phân tỉ lệ. Để chọn được kiểu điều khiển vòng lặp mong muốn phải chọn những giá trị thông số đầu vào phù hợp. Nếu không muốn có khâu tích phân thì phải đặt giá trị Ti rất lớn và giá trị tổng các khâu tích phân bằng 0. Nếu không muốn chọn khâu vi phân thì cho Td bằng 0. Nếu không muốn chọn khâu tỉ lệ mà chỉ muốn có khâu tích phân hay vi phân thì ta đặt giá trị KC = 0. Kể từ vòng lặp kế tiếp hệ số của biểu thức tính toán khâu vi phân hay tích phân sẽ được đặt là 1. 3.2. Chuyển đổi giá trị ngõ vào và ra Do vòng lặp có hai giá trị đầu vào là: điểm đặt (Setpoint) và giá trị biến xử lý PVn là giá trị số thực có tầm từ 0 đến 1. Điểm đặt setpoint là giá trị phù hợp cần phải điều khiển, còn biến xử lý PV là giá trị có quan hệ đến ngõ ra của vòng lặp và chúng được lấy từ giá trị đo đạc thực tế ở ngõ ra của hệ thống thực (đây chính là giá trị hồi tiếp về của hệ thống điều khiển). Cả hai giá trị trên đều có tầm từ 0 đến 1 mà số liệu thực tế lại không có tầm từ 0 đến 1. Như vậy, cần phải chuyển đổi sao cho chúng có tầm từ 0 đến 1 và giá trị đầu ra có tầm từ 0 đến 1 thì phải chuyển đổi về số liệu thực tế ban đầu. Bước đầu tiên là chuyển đổi giá trị số thực từ 16 bit số nguyên sang số có dấu chấm động hay số thực, đọan chương trình được viết như sau: XORD AC0, AC0 // Xoá thanh ghi tích luỹ. MOVW AIW0, AC0 // Lưu giá trị analog vào thanh ghi tích luỹ. LDW>= AC0, 0 // Nếu giá trị analog dương, JMP 0 // chuyển đổi sang số thực. NOT // Ngược lại ORD 16#FFFF0000, AC0 // Mở rộng dấu giá trị bên trong AC0. LBL 0 DTR AC0, AC0 // Chuyển đổi 32-bit số nguyên sang số thực. Bước kế tiếp là chuẩn hoá giá trị nằm trong khoảng 0.0 và 1.0. Phương trình sau dùng để chuẩn hoá giá trị đặt và giá trị điều chỉnh. Công thức chuyển số liệu thực tế về giá trị ngõ vào của PID: RPID = (Rraw/Span) + Offset Trong đó: RPID: Là giá trị đầu vào khi tính toán PID Rraw: Là số liệu thực tế thu từ đầu vào của cảm biến Span: Giá trị maximum có thể ở đầu vào = 32000 nếu là số không dấu. = 64000 nếu là số có dấu. Offset: Giá trị khởi động. = 0.0 nếu là số không dấu. = 0.5 nếu là số có dấu. Lệnh kế tiếp chỉ cách chuẩn hoá giá trị lưỡng cực trong AC0: /R 64000.0, AC0 // Chuẩn hoá giá trị trong thanh ghi tích lũy. +R 0.5, AC0 // Giá trị Offset ở phạm vi từ 0.0 đến 1.0. MOVR AC0, VD100 // Lưu giá trị chuẩn hóa vào loop TABLE. 3.3. Chuyển đổi ngõ ra vòng lặp Ngõ ra vòng lặp là biến điều khiển. Chúng được chuẩn hóa thành số thực nằm trong khoảng 0.0 và 1.0. Trước khi ngõ ra vòng lặp có thể được sử dụng để tạo ngõ ra analog, chúng phải được chuyển đổi thành số nguyên 16 bit tỉ lệ. Quá trình này là đảo ngược của quá trình chuyển đổi PV và SP tới giá trị chuẩn hoá. Bước đầu là chuyển đổi ngõ ra vòng lặp tới một khoảng tỉ lệ, sau đó thành giá trị số thực bằng cách dùng công thức sau: Rscal = (Mn-Offset) * Span Trong đó: Mn Giá trị tính toán ở ngõ ra khâu PID. Rscal Giá trị thực tế ở ngõ ra. Offset Giá trị là 0.0 nếu là số không dấu và là 0.5 nếu là số có dấu. Span: Giá trị toàn tầm lớn nhất có thể ở ngõ ra. Lệnh kế tiếp chỉ cách chia tỉ lệ ngõ ra vòng lặp: MOV VD108, AC0 // Chép ngõ ra vòng lặp đến thanh ghi tích luỹ. -R 0.5, AC0 // Giá trị lưỡng cực. *R 64000.0, AC0 // Chia khoảng giá trị tỉ lệ trong thanh ghi tích luỹ Kế tiếp, giá trị số thực thể hiện ngõ ra vòng lặp phải được chuyển thành số nguyên 16 bit. Lệnh sau chỉ cách chuyển đổi: ROUND AC0, AC0 // Chuyển số thực thành số nguyên 32 bit. MOVW AC0, AQW0 // Xuất giá trị số nguyên 16 bit đến ngỏ ra analog. 3.4. Tăng hoặc giảm giá trị vòng lặp Nếu hệ số khuếch đại KC là số dương thì giá trị tính toán PID sẽ là giảm dần, còn nếu hệ số khuếch đại là số âm thì giá trị tính PID sẽ tăng dần. 3.5. Biến và tầm giá trị của biến Biến xử lý và điểm đặt là các ngõ vào của phép toán PID. Giá trị ngõ ra cũng được cung cấp bởi phép tính PID và giá trị này trong bảng TABLE loop sẽ được cập nhật sau mỗi lần lệnh PID tính toán xong. Giá trị ngõ ra bị kẹp giữa 0 và 1. Giá trị Output có thể được sử dụng như một giá trị khởi động ở ngõ vào khi chỉnh sang chế độ PID tính bằng tay. Nếu khâu vi phân được sử dụng thì giá triï tổng các tích phân sẽ đuợc cập nhật bởi lệnh tính toán PID và sẽ là ngõ vào của lần tính PID ở lần kế tiếp. Khi giá trị tính toán ở ngõ ra bị vượt khỏi tầm thì ngõ ra sẽ được tính toán theo công thức sau: MX = 1.0 - (MPn + MDn) khi MXn > 1.0 Hay MX = - (MPn + MDn) khi giá trị đầu ra là Mn < 0 3.6. Chế độ làm việc Chế độ làm việc không được xây dựng trong chương trình điều khiển PID. Ở chế độ auto thì lệnh tính toán PID được thực hiện còn ở chế độ Manual thì lệnh PID sẽ không được thực hiện. Khi lệnh PID được thực hiện thì chế độ tính toán như đã nêu ở trên còn khi chúng ở chế độ Manual thì: Giá trị điểm đặt sẽ bằng biến ngõ vào ( SPn = PVn). Giá trị biến ngõ vào cũ sẽ bằng giá trị biến đầu vào mới (PVn-1 = PVn). Giá trị tổng các tích phân sẽ bằng giá trị ngõ ra (MX = Mn). 3.7. Điều kiện báo lỗi Trong thời gian biên dịch CPU sẽ phát ra giá trị báo lỗi và quá trình biên dịch sẽ bị sai nếu như giá trị địa chỉ bắt đầu của bảng TABLE loop hay số vòng lặp PID nằm trong vòng lệnh hay vượt quá tầm cho phép. Chắc chắn rằng giá trị đầu vào phải được kiểm tra tầm bởi lệnh PID. Cần phải cẩn thận với giá trị đầu vào và điểm cần thiết lập (như giá trị tổng các giá trị tích phân và giá trị biến trước đó nếu nó được sử dụng như một ngõ vào) phải là số thực có giá trị từ 0 đến 1. Nếu trong quá trình thực hiện lệnh PID mà có lỗi xuất hiện thì giá trị SM1.1 báo tràn hoặc giá trị không hợp lệ) sẽ được set lên và quá trình tính toán PID bị tạm dừng (giá trị ngõ ra sẽ không được cập nhật vì vậy phải có quá trình bảo vệ, nếu giá trị đầu vào không hợp lệ thì sẽ lấy giá trị trước đó). 4. GIỚI THIỆU VỀ MODULE ANALOG PLC S7-200 PLC S7-200 có các module analog mở rộng như sau: EM 231: gồm có 4 ngõ vào analog. EM 232: gồm có 2 ngõ ra analog. EM 235: gồm có 4 ngõ vào và 1 ngõ ra analog. 4.1. Đặc tính chung Trở kháng vào input >= 10MW. Bộ lọc đầu vào input –3Db tại 3.1Khz. Điện áp cực đại cung cấp cho module: 30VDC. Dòng điện cực đại cung cấp cho module: 32mA. Có LED báo trạng thái. Có núm chỉnh OFFSET và chỉnh độ lợi (GAIN). 4.2. Đầu vào Phạm vi áp ngõ vào: +/- 10V. Phạm vi dòng điện ngõ ra: 0 -> 20mA. Có các bộ chuyển đổi ADC, DAC (12 bit). Thời gian chuyển đổi analog sang digital : <250ms. Đáp ứng đầu vào của tín hiệu tương tự: 1.5ms đến 95%. Chế độ Mode chung: Điện áp vào đầu cộng của chế độ Mode chung nhỏ hơn hoặc bằng 12V. Kiểu dữ liệu đầu vào input: Kiểu không dấu (đơn cực) tầm từ 0 đến 32000, Kiểu có dấu (đa cực) tầm từ –32000 đến 32000. 4.3. Đầu ra Phạm vi áp ngõ ra : +/- 10V. Phạm vi dòng điện ngõ ra: 0 -> 20mA. Độ phân giải: Điện áp: 12 bit. Dòng điện: 11 bit. Kiểu dữ liệu đầu ra: Kiểu dữ liệu không dấu (đơn cực): từ 0 đến 32000. Kiểu dữ liệu có dấu (đa cực): từ –32000 đến 32000. Thời gian gửi tín hiệu đi: Điện áp: 100us. Dòng điện: 2ms. Sơ đồ kết nối với các thiết bị ngoại vi, sử dụng theo dạng áp và dòng: Có các contact (switch) để lựa chọn phạm vi áp ngõ vào (contact ở một trong hai vị trí ON và OFF). Contact 1 lựa chọn cực tính áp ngõ vào: ON đối với áp đơn cực, OFF với áp lưỡng cực; contact 2, 3, 4, 5, 6 chọn phạm vi điện áp. Các bước chỉnh đầu vào. Tắt nguồn Module, chọn tầm đầu vào mong muốn. Bật nguồn lên cho CPU và Module sau đó để cho hoạt động ổn định trong 15 phút. Sử dụng transmitter, nguồn dòng hoặc áp chuẩn dùng để đưa tín hiệu giá trị chuẩn zero vào 1 trong các đầu vào. Đọc giá trị vào PLC bằng kênh đầu vào thích hợp. Chỉnh giá trị OFFSET có thể cho đến khi giá trị đọc vào là zero hoặc nhận ra giá trị dữ liệu số. Đặt giá trị tín hiệu toàn tầm đo vào ngõ vào, đọc giá trị mà CPU nhận được. Chỉnh độ lợi có thể cho đến khi giá trị đọc được là 32.000 hay nhận được giá trị dữ liệu số. Ngắn mạch đầu vào các ngõ vào không sử dụng. Tránh gọt các đầu dây quá nhọn. Lặp lại các quá trình, chỉnh Gain và Offset cho đến khi đạt yêu cầu. Sơ đồ chỉnh độ lợi (GAIN) và OFFSET: Switch chỉnh chọn điện áp hoặc dòng ngõ vào đối với module EM 231. Switch chỉnh chọn điện áp hoặc dòng ngõ vào đối với module EM 235. Switch chỉnh chọn độ lợi, đơn cực hoặc lưỡng cực và độ suy giảm (attenuation) Sơ đồ khối các ngõ vào của EM 235 và EM 231. Tín hiệu tương tự được đưa vào các đầu vào A+, A-, B+, B-, C+, C-, sau đó qua các bộ lọc nhiễu, qua bộ đệm, bộ suy giảm, bộ khuếch đại rồi đưa đến khối chuyển đổi ADC, chuyển đổi tín hiệu tương tự sang tín hiệu số 12 bit. 12 bit dữ liệu này được đặt bên trong word ngõ vào analog của CPU như sau: 12 bit dữ liệu ra từ bộ chuyển đổi ADC được canh trái đều (left justified) trong word dữ liệu ngõ ra. Bit MSB là bit dấu: “0” dùng để diễn tả giá trị word dữ liệu dương, “1” dùng để diễn tả giá trị word dữ liệu âm. Sơ đồ khối các ngõ vào của EM 235: 12 bit dữ liệu được đặt bên trong word ngõ ra analog của CPU như sau: 12 bit dữ liệu trước khi đưa vào bộ chuyển đổi DAC được canh trái đều (left justified) trong word dữ liệu ngõ ra. Bit MSB là bit dấu: “0” diễn tả giá trị từ dữ liệu dương. 4 bit thấp có giá trị 0 được loại bỏ trước khi từ dữ liệu này được đưa vào bộ chuyển đổi DAC, các bit này không ảnh hưởng đến giá trị ở ngõ ra. Các chú ý khi cài đặt ngõ ra analog. Chắc chắn rằng nguồn 24VDC cung cấp không bị nhiễu và ổn định. Xác định được Module. Dùng dây cảm biến ngắn nhất nếu có thể. Sử dụng dây bọc giáp cho cảm biến và dây chỉ dùng cho một mình cảm biến thôi. Tránh đặt các dây tín hiệu song song với dây có năng lượng cao. Nếu hai dây bắt buộc phải gặp nhau thì bắt chéo chúng về góc bên phải. @ BÀI TẬP Bài 1: Sử dụng thuật giải PID, đo và điều khiển mức nước. Bài 2: Lấy tỉ lệ tín hiệu analog input và điều khiển tín hiệu output analog theo cũng theo tỉ lệ. Bài 3: Điều khiển lọc ngõ vào analog. Bài 4: Sử dụng thuật giải PID, đo và giám sát nhiệt độ.

Các file đính kèm theo tài liệu này:

  • docChuong 5 - PID va Analog.doc
Tài liệu liên quan