Bài giảng mô đun Chuyên đề lập trình cỡ nhỏ
1. TỔNG QUÁT
Trong quá trình thực hiện cơ khí hoá - hiện đại hoá các ngành công nghiệp nên việc
yêu cầu tự động hoá các dây chuyền sản xuất ngày càng tăng. Tuỳ theo yêu cầu cụ thể
trong tự động hoá công nghiệp đòi hỏi tính chính xác cao nên trong kỹ thuật điều khiển
có nhiều thay đổi về thiết bị cũng như thay đổi về phương pháp điều khiển.
Trong lĩnh vực điều khiển người ta có hai phương pháp điều khiển là: phương pháp
điều khiển nối cứng và phương pháp điều khiển lập trình được.
+ Phương pháp điều khiển nối cứng: Trong các hệ thống điều khiển nối cứng người
ta chia ra làm hai loại: nối cứng có tiếp điểm và nối cứng không tiếp điểm.
Điều khiển nối cứng có tiếp điểm: là dùng các khí cụ điện như contactor, relay, kết
hợp với các bộ cảm biến, các đèn, các công tắc các khí cụ này được nối lại với nhau
thành một mạch điện cụ thể để thực hiện một yêu cầu công nghệ nhất định. Ví dụ như:
mạch điều khiển đổi chiều động cơ, mạch khởi động sao – tam giác, mạch điều khiển
nhiều động cơ chạy tuần tự
Đối với nối cứng không tiếp điểm: là dùng các cổng logic cơ bản, các cổng logic đa
chức năng hay các mạch tuần tự (gọi chung là IC số), kết hợp với các bộ cảm biến, đèn,
công tắc và chúng cũng được nối lại với nhau theo một sơ đồ logic cụ thể để thực hiện
một yêu cầu công nghệ nhất định. Các mạch điều khiển nối cứng sử dụng các linh kiện
điện tử công suất như SCR, Triac để thay thế các contactor trong mạch động lực.
Trong hệ thống điều khiển nối cứng, các linh kiện hay khí cụ điện được nối vĩnh viễn
với nhau. Do đó khi muốn thay đổi lại nhiệm vụ điều khiển thì phải nối lại toàn bộ mạch
điện. Khi đó với các hệ thống phức tạp thì không hiệu quả và rất tốn kém.
+ Phương pháp điều khiển lập trình: Đối với phương pháp điều khiển lập trình này
thì ta có thể sử dụng những phần mềm khác nhau với sự trợ giúp của máy tính hay các
thiết bị có thể lập trình được trực tiếp trên thiết bị có kết nối thiết bị ngoại vi. Ví dụ như:
LOGO!, ZEN, EASY SYSWIN, CX-PROGRAM
Chương trình điều khiển được ghi trực tiếp vào bộ nhớ của bộ điều khiển hay một
máy tính. Để thay đổi chương trình điều khiển ta chỉ cần thay đổi nội dung bộ nhớ của bộ
điều khiển, phần nối dây bên ngoài không bị ảnh hưởng. Đây là ưu điểm lớn nhất của bộ
điều khiển lập trình.6
2. CÁC ỨNG DỤNG TRONG CÔNG NGHIỆP VÀ TRONG DÂN DỤNG
Các bộ điều khiển lập trình loại nhỏ nhờ có nhiều ưu điểm và các tính năng tích hợp
bên trong nên nó được sử dụng rộng rãi trong công nghiệp và trong dân dụng như:
+ Trong công nghiệp:
Điều khiển động cơ.
Máy công nghệ.
Hệ thống bơm.
Hệ thống nhiệt.
+ Trong dân dụng:
Chiếu sáng
Bơm nước
Hệ thống báo động
Tưới tự động
3. ƯU ĐIỂM VÀ NHƯỢC ĐIỂM SO VỚI PLC
+Ưu điểm:
Kích thước nhỏ, gọn, nhẹ.
Sử dụng nhiều cấp điện áp.
Tiết kiệm không gian và thời gian.
Giá thành rẻ.
Lập trình được trực tiếp trên thiết bị bằng các phím bấm và có màn hình giám sát.
+ Nhược điểm:
Số ngõ vào, ra không nhiều nên không phù hợp cho điều khiển những yêu cầu điều
khiển phức tạp.
Ít chức năng tích hợp bên trong.
Bộ nhớ dung lượng nhỏ
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
Tóm tắt nội dung tài liệu: Bài giảng mô đun Chuyên đề lập trình cỡ nhỏ
với nhiều ngõ vào và không thể kết nối nhiều ngõ ra với một ngõ vào Quy tắc 3: Khi nhập chương trình cần nhớ: - Khi con trỏ có dạng nhấp nháy, ta có thể di chuyển con trỏ. Dùng các phím mũi tên: ,,, để thay đổi đầu vào, đầu ra. Bấm phím OK để chọn đồng ý. Nhấn phím ESC để thoát khỏi chế độ nhập chương trình. - Vẽ các đường nối Bấm Alt khi con trỏ đang ở điểm giữa 2 vị trí cần nối, con trỏ sẽ nhấp nháy khi đó bấm các phím mũi tên ,,, để vẽ các đường nối nằm ngang và thẳng đứng. Chế độ vẽ các đường nối sẽ được thoát ra khi đến đầu hay cuối mỗi dòng hoặc ấn OK hay ESC Quy tắc 4: Zen chỉ có thể lưu trữ chương trình đã hoàn tất. 2.2. Các chức năng cơ bản và chức năng đặc biệt 2.2.1. Các chức năng cơ bản a, Lệnh vào/ra LOAD (LD) 65 Lệnh LD nạp giá trị logic của một tiếp điểm vào trong bit đầu tiên của ngăn xếp, các giá trị còn lại trong ngăn xếp bị đẩy lùi xuống một bit. Toán hạng gồm I, Q, M, C, Y, T Tiếp điểm thường mở sẽ đóng nếu I0 =1 I0 Q0 ( ) LOAD NOT (LDN) Lệnh LDN nạp giá trị logic của một tiếp điểm vào trong bit đầu tiên của ngăn xếp, các giá trị còn lại trong ngăn xếp bị đẩy lùi xuống một bit. Toán hạng gồm I, Q, M, Y, C, T. Tiếp điểm thường đóng sẽ mở khi I0 =1 I0 Q0 ( ) OUTPUT (=) : Lệnh sao chép nội dung của bit đầu tiên trong ngăn xếp vào bit được chỉ định trong lệnh. Nội dung ngăn xếp không bị thay đổi. Toán hạng bao gồm : I,Q,M,Y,T,C (bit) Nếu I0 = 1 thì Q0 sẽ lên 1(cuộn dây nối với ngõ ra Q0 có điện). I0 Q0 ( ) b, Lệnh tiếp điểm AND (A) và ANDNOT (AN): Dùng để tạo các tiếp điểm thường mở (thường đóng) theo sau với các tiếp điểm tạo ra bởi lệnh LD và LDN. AND (A) Tiếp điểm thường mở sẽ đóng nếu I0 =1, I1 = 1 I0 I1 Q0 ( ) ANDNOT (AN) Tiếp điểm thường mở sẽ đóng nếu I0 =1, I1 = 0 I0 I1 Q0 ( ) 66 c, Lệnh tiếp điểm OR (O) và ORNOT (ON): Dùng để tạo các tiếp điểm thường mở (thường đóng) nối song song với một nhánh khác. OR (O) I0 Q0 ( ) Q0 OR (ON) I0 Q0 ( ) Q0 d, Lệnh tiếp điểm AND LD(ALD) và OR LD(OLD): AND LD(ALD) I1 I0 Q0 ( ) Q0 OR LD(OLD) I1 I0 Q0 ( ) Q 0 2.2.2. Các chức năng đặc biệt a, Lệnh Set(S) và Reset (R) Set (S) Lệnh dùng để đóng các điểm gián đoạn đã được thiết kế. Khi dòng điều khiển đến các cuộn dây thì các cuộn dây đóng các tiếp điểm. Nếu bit này có giá trị bằng 1, các lệnh S sẽ đóng 1 tiếp điểm hoặc một dãy các tiếp điểm (giới hạn từ 1 đến 255). Nội dung của ngăn xếp không bị thay đổi bởi các lệnh này. 67 I0 Q0 (S) Reset (R) Lệnh dùng để mở các điểm gián đoạn đã được thiết kế. Khi dòng điều khiển đến các cuộn dây thì các cuộn dây mở các tiếp điểm. Nếu bit này có giá trị bằng 1, các lệnh R sẽ ngắt 1 tiếp điểm hoặc một dãy các tiếp điểm (giới hạn từ 1 đến 255). Nội dung của ngăn xếp không bị thay đổi bởi các lệnh này. I0 Q0 (R) b, Lệnh đếm (COUNTER) và lệnh điều khiển thời gian (TIMER) COUNTER là bộ đếm thực hiện chức năng đếm sườn xung, hay còn gọi đếm số lần thay đổi trạng thái logic từ 0 lên 1 của tín hiệu. TIMER là bộ tạo thời gian trể giữa tín hiệu vào và tín hiệu ra nên trong điều khiển vẫn thường được gọi là khâu trễ. Gồm các loại sau: + On-delay (X) + OFF-delay (■) + Xung One-shot (O) + Xung phóng hồ quang Flashing (F) 2.3. Phương pháp soạn thảo 2.3.1. Lập trình sử dụng phần mềm a, Cài đặt phần mềm. + Yêu cầu cấu hình máy tính: Hệ điều hành: Windowns XP. CPU: Pentium hoặc cao hơn. Bộ nhớ (memory): tối thiểu 1GB hoặc cao hơn. Dung lương ổ đĩa cứng (HDD): cần có ổ cứng 40 GB hoặc nhiều hơn. CD – ROM drive: cần có ổ đĩa CD-ROM. Sự giao tiếp ( truyền tin): 1 cổng COM RS-232C ( COM port). Bàn phím và chuột: cần có. Màn hình: tối thiểu 800x600 dots (SVGA), hay 256 màu. + Cách cài đặt: 68 Bước 1: Đặt đĩa phần mềm vào ổ CD-ROM của máy tính. Sau đó chọn ngôn ngữ hiển thị ra màn hình rồi Click nút OK. Chú ý: Nếu màn hình chọn ngôn ngữ không được hiển thị khi cho đĩa CD-ROM vào ổ đĩa để cài đặt, mở biểu tượng Setup Disk (CD-ROM), và double-click file Setup.exe. Bước 2: Khi màn hình cài đặt hiển thị, kiểm tra những chi tiết và thong tin được yêu cầu, và click nút Next. Bước 3: Sau khi cài đặt đã hoàn thành, click vào nút Finish. b, Cách nhập dữ liệu cho chương trình. Bước 1: Nếu phần mềm bổ trợ Zen chưa được bắt đầu, khởi động đó bằng cách: Chọn Programs/ Omron/ ZEN Support Software/ ZEN Support Software từ Windowns Start Menu. Chọn Create a new program và ấn OK để tạo chương trình mới. Nếu phần mềm hổ trợ ZEN đã được khởi động rồi, chỉ cần click vào nút New trên thanh Toolbar. Hay có thể làm cách khác, chọn File/ New từ Menu Bar. Bước 2: Khi màn hình Property Settings được hiển thị, trên màn hình này, có thể vào mô hình ZEN, cấu hình (mở rộng I/O), tên dự án (project), hay lời chú thích; và sau đó kích nút OK. Bước 3: Khi màn hìnhviết chương trình hiển thị: Nhập ngõ vào/ra, có thể sử dụng bàn phím hoặc con chuột. Nhấn Enter từ bàn phím tại vị trí nhập ngõ vào/ra và chọn ngõ vào/ra. Nhấp đúp chuột. Nhấp vào nút Insert Input hoặc Insert Output trên thanh Toolbar. Chọn Insert-Contact/Coil từ Menu Bar. Hoặc click phải chuột và chọn Edit. Bước 4: Khi Click phải chuột vào vùng dùng để ghi ngõ vào và chọn Edit (hay nhấn chữ E trên bàn phím), hộp các ngõ vào sẽ xuất hiện. Tên bit: I, Q, X, Y, M, .. Normally Open: ngõ vào thường mở. Normally Closed: ngõ vào thường đóng. Relay No: số bit. Comment: chú thích về số bít ngõ vào của CPU. Chú thích màu. Ghi chú: khi đặt thông số, cần chỉ rõ là đặt cho Timer hay Couter. Bước 5: Nhấp đúp chuột lên vị trí được nhập ngõ vào tiếp theo: (để vẽ một ngõ vào nối tiếp với ngõ vào phía trước). 69 Lúc này hộp thoại dùng để nhập ngõ vào được hiển thị một lần nữa, lại tiến hành chọn kiểu bit, kiểu ngõ vào, số bit, lời chú thích về ngõ vào của CPUTất cả thao tác đều tương tự bước 4. Bước 6: Nếu không có ngõ vào tiếp theo nữa thì di chuyển con trỏ đến vị trí ngõ ra và click đúp chuột. Bước 7: Khi hộp thoại dùng để nhập ngõ ra được hiển thị, tiếp tục tiến hành chọn kiểu bit, chức năng của bit, số bit và ghi lời bình nếu được yêu cầu. Sau đó nhấn Enter nếu chấp thuận. Tên bit: Q, Y, M, H, T, . Function: chức năng của bit + Normal out operation ([): ngõ ra thông thường. + Set operation (S): ngõ ra dạng Set. + Reset operation (R): ngõ ra dạng reset. + Altermate operation (A): luân phiên. Bước 8: Viết ngõ vào khác song song với ngõ vào đã viết: Di chuyển con chuột đến vị trí ngõ vào gần đường phía trên và click chuột 2 lần. Lúc này, hộp thoại nhập ngõ vào được hiển thị, tiếp tục tiến hành chọn kiểu bit, chức năng của bit, số bit và ghi lời bình nếu được yêu cầu. Các thao tác giống như bước 4. Sau đó, kéo con chuột để thẳng đứng vẽ đường kết nối. Những đường kết nối thẳng đứng được vẽ bằng nhiều cách như: + Sử dụng chuột để kéo tạo đường kết nối hay để con trỏ tại vị trí cần kết nối rồi dùng phím tắt để kết nối. + Kích nút Insert Vertical trên thanh Toolbar. Những đường kết nối nằm ngang được vẽ bằng nhiều cách như: + Sử dụng chuột để kéo tạo đường kết nối hay để con trỏ tại vị trí cần kết nối rồi dùng phím tắt để kết nối. + Kích nút Insert Horizontal trên thanh Toolbar hay chọn Insert/ Horizontal từ Menu Bar. 2.3.2. Lập trình sử dụng bàn phím a, Nối dây ngõ vào/ra L N s1 S2 I0 I1 ZEN OMRON Q0 70 K1 Hình 4.4: Sơ đồ nối dây ngõ vào, ra b, Lựa chọn ngôn ngữ hiển thị Có thể lựa chọn đến 6 ngôn ngữ để hiện thị Zen là Anh, Pháp, Ý, Đức, Tây Ban Nha, Nhật. Mặc định là tiếng Anh. c, Xoá chương trình (Clear Program) Để xóa chương trình đang có trong Logo, nhấn ,và OK vào menu chính chọn Program – OK chọn Clear Prg – OK chọn NO hay YES (chọn NO là không xóa, chọn YES là xóa hết chương trình cũ), xong OK để thực hiện lệnh. d, Viết chương trình + Cách sử dụng các nút nhấn: Chức năng Nút Menu Viết chương trình bật thang Đặt thông số Nút DEL Xoá ngõ ra, vào, đường nối. B6 ON ALT - Vị trí công tắc thường đóng và B7 ON thường mở. - Thay đổi kiểu nối dây. - Chèn một đường khác. UP Di chuyển con trỏ - Di chuyển con trỏ. - Di chuyển con trỏ B5 ON lên xuống DOWN - Chọn kiểu bit và chức năng - Thay đổi thông số B2 ON LEFT Di chuyển con trỏ Di chuyển con trỏ B3 ON RIGHT B4 ON ESC Trở lại màn hình Huỷ giá trị đã chọn Huỷ bỏ B0 ON trước OK Chọn menu tại vị Xác định cách đặt Xác định cách đặt B1 ON trí con trỏ + Lập trình - Trước khi viết chương trình mới ta phải xáo chương trình cũ theo các bước sau: 71 Bấm OK để màn hình chuyển về Menu chính và chọn Program. Chọn Delete Prog Bấm OK đề hiển thị trang xác nhận thay đổi Bấm tiếp OK để chấp nhận thay đổi. Sau đó màn hình sẽ quay lại hiển thị màn hình trước đó của Menu. Chuyển chương trình về chế độ Stop để viết chương trình Bấm OK để chuyển màn hình Menu và chọn Program. Chọn Edit Program chọn Ok để tiếp tục chương trình Ví dụ. Lập chương trình cho mạch điện sau I0 I1 Q0 ( ) Q0 + Viết đầu vào cho I0 72 Bấm OK để hiển thị viết ban đầu và chuyển con trỏ về vị trí Bit type. Dùng các phím mũi tên để lựa chọn laoị bít. Dùng phím mũi tên để chuyển sang vị trí địa chỉ bit và bấm các phím mũi tên ,để thay đổi địa chỉ bít. Bấm OK hai lần để hoàn tất việc nhập địa chỉ I0 + Viết đầu vào I1 nối tiếp I0 Bấm Ok để hiển thị lại tiếp điểm đầu vào NO và địa chỉ I0 Bấm Alt để chuyển sang loai tiếp điểm NC Bấm mũi tênđể chuyển con trỏ nhấp nháy sang vị trí địa chỉ bít và dùng phím nũi tên để chuyển thành I1 Bấm Ok để chuyển con trỏ sang vị trí nhập tiếp theo. Đường nối sẽ tự động được nối từ I0 đến I1 Bấm Alt để chuyển sang chế độ ghi đường nối. Con trỏ hình mũi tên chỉ sang trái sẽ nhấp nháy Bấm nút để vẽ đường nối đầu ra. + Viết đầu ra Q0 73 Bấm nút sang phải lần nữa để vẽ đường nối với đầu ra và chuyển con trỏ về vị trí ghi đầu ra. Bấm Ok để hiện thị giá trị ban đầu cho đầu ra và chuyển con trỏ nhấp nháy về vị trí laoị bít Q0. Dùng các phím ,để chọn loại bít. Dùng phím ,để di chuyển con trỏ. Dùng các phím ,để lựa chọn các chức năng khác hay lựa chọn bit địa chỉ. Bấm OK hai lần để hoàn tất việc nhập địa chỉ Q. Con trỏ giờ đây chuyển sang vị trí nhập đầu vào Input ở đầu dòng tiếp theo + Viết 1 tiếp điểm Q0 song song với I0 Bấm OK để hiển thị I0 rồi chuyển con trỏ về lựa chọn loại bit Bấm để lựa chọn loại bít là Q Bấm OK hai lần để hoàn tất việc nhập đại chỉ I0. Con trỏ giờ đây chuyển sang vị trí nhập địa chỉ tiếp theo. Bấm Alt để chuyển sang chế độ vẽ các đường nối Bấm mũi tên để đồng thời vec cả đường nối thẳng đứng và đường nằm ngang. Dấu (+) biểu thị giao điểm Bấm Ok để hoàn tất việc vẽ đường nối và chuyển sang con trỏ nhấp nháy. Bấm ESC hai lần để trờ về màn hình Menu 74 2.4. BÀI TẬP ỨNG DỤNG 3.1. Mạch đảo chiều quay động cơ Cho mạch điện hình vẽ A N S1 S2 1 Kt Kn Kt S3 Kn Mt Kn Mô tả hoạt động Khởi động động cơ ấn nút S2 cuộn hút Kt có điện tự giữ động cơ bắt đầu khởi động và quay theo chiều thuận. Muốn dừng động cơ ấn nút S1 động cơ dừng làm việc. Muốn động cơ quay theo chiều ngược lại ta ấn S3 cuộn hút Kn có điện tự giữ động cơ quay theo chiều ngược. Muốn dừng động cơ ấn nút D động cơ dừng làm việc. Yêu cầu + Lập sơ đồ kết nối phần cứng + Lập trình trực tiếp trên Zen Omron và vận hành 3.2. Mạch mở máy Y/ Mô tả hoạt động: Muốn khởi động động cơ ấn nút Start động cơ bắt đầu khởi động ở chế độ Y, sau 10s động cơ chạy chế độ . Muốn dừng ấn Stop động cơ dừng lại. Yêu cầu 75 + Lập sơ đồ kết nối phần cứng + Lập trình trực tiếp trên Zen và vận hành 3.3. Mạch điều khiển tuần tự nhiều động cơ Mô tả hoạt động: Muốn khởi động động cơ ấn nút Start động cơ K1 hoạt động trước sau 6 động cơ K2 hoạt động, sau 8s động cơ K3 hoạt động. Muốn dừng ấn Stop động cơ K3 dừng trước sau 5s động cơ K2 dừng, sau 5s động cơ K1 dừng. Yêu cầu + Lập sơ đồ kết nối phần cứng + Lập trình trực tiếp trên Zen và vận hành 3.4. Mạch điều khiển đèn giao thông tại ngã tư Mô tả hoạt động: Hệ thống điều khiển đèn giao thông đơn giản tại ngã tư với 6 đèn cho 2 hướng. Với đèn xanh sáng 45 giây, đèn vàng sáng 15 giây, đèn đỏ sáng 60 giây. Gạt công tắc lên ON hệ thống hoạt động. Gạt công tắc xuống OFF hệ thống dừng Yêu cầu + Lập sơ đồ kết nối phần cứng + Lập trình trực tiếp trên Zen và vận hành 3.5. Kiểm soát dây chuyền đóng hộp Mô tả hoạt động: Khi nhấn nút Start thì dây chuyền hộp vận hành. Khi gạt công tắc hành trình S3 thì dây chuyền hộp dừng lại, dây chuyền táo bắt đầu chuyển động. Cảm biến S2 được dùng để đếm số lượng táo. Khi đếm được 5 quả táo thì băng chuyền táo dừng và dây chuyền hộp lại bắt đầu chuyển động. Bộ đếm được đặt lại và quá trình vận hành lập lại cho đến khi ấn nút Stop. Yêu cầu + Lập sơ đồ kết nối phần cứng + Lập trình trực tiếp trên Zen và vận hành Câu hỏi ôn tập, bài tập Bài 1: Điều khiển đảo chiều trực tiếp động cơ. Mô tả hoạt động: - Ấn nút mở M1 động cơ quay thuận, muốn đảo chiều quay ấn nút M2 động cơ quay theo chiều ngược lại. - Muốn dừng ấn nút dừng D động cơ dừng lại. 76 - Trong lúc hệ thống đang hoạt động mà có bất kỳ sự cố nào xảy ra thì dừng ngay và đưa tín hiệu nháy đèn với thời gian trong 1 chu kỳ là 6 giây. Yêu cầu + Lập sơ đồ kết nối phần cứng + Lập trình trực tiếp trên Zen và vận hành Bài 2: Điều khiển tuần tự 3 động cơ Cho mạch điện như hình vẽ. Mô tả hoạt động: Nhấn S6 cuộn dây K3 có điện và đóng các tiếp điểm, tự giữ. Nhấn S4 thì cuộn dây K2 có điện và đóng các tiếp điểm, tự giữ. Nhấn S2 cuộn dây K1 có điện và tự giữ. Khi tắt thì nhấn S1 cuộn dây K1 mất điện, nhấn S3 thì cuộn dây K2 mất điện, nhấn S5 thì cuộn dây K3 mất điện. Yêu cầu + Lập sơ đồ kết nối phần cứng + Lập trình trực tiếp trên Zen và vận hành Bài 3: Điều khiển tuần tự 2 động cơ. Mô tả hoạt động: Muốn khởi động động cơ ấn nút Start động cơ K1 hoạt động trước sau 5s động cơ K2 hoạt động. Muốn dừng ấn Stop động cơ K1dừng trước sau 6s động cơ K2 dừng . Khi có quá tải có đèn báo nhấp nháy với chu kỳ 4s Yêu cầu + Lập sơ đồ kết nối phần cứng + Lập trình trực tiếp trên Zen và vận hành 77 XÁC NHẬN KHOA Bài giảng mô đun “Chuyên đề lập trình cỡ nhỏ” đã bám sát các nội dung trong chương trình môn học, mô đun. Đáp ứng đầy đủ các nội dung về kiến thức, kỹ năng, năng lực tự chủ trong chương trình môn học, mô đun. Đồng ý đưa vào làm Bài giảng cho mô đun Chuyên đề lập trình cỡ nhỏ thay thế cho giáo trình. Người biên soạn Lãnh đạo Khoa ( Ký, ghi rõ họ tên) ( Ký, ghi rõ họ tên) Phạm Thị Huê 78
File đính kèm:
- bai_giang_mo_dun_chuyen_de_lap_trinh_co_nho.pdf